微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 并口模拟IIC的经验之谈

并口模拟IIC的经验之谈

时间:11-25 来源:互联网 点击:

实验用电路

相对于并口,P1的13脚接SDA 的输入,P1的3脚接SDA的输出,P1的15脚接SCL的输入,P1的5脚接SCL的输出。试验用的电路,分析如后:P1的5脚接IC1的SCL端,用做I2C总线的串行时钟信号输出。因I2C总线中数据线(SDA)在不同的时间可能是输入也可能是输出,所以接在IC1 SDA端上的信号也有两路,输出时,P13脚输出低电平T1导通,SDA被置为低电平,P13 脚输出高电平T1截止,因 R1的作用SDA被置为高电平。输入时,P1 通过判断 13 脚上的电平高低,来读取SDA上的数据。要注意的是用于输入时T1必须是截止的,以免SDA被箝位。

这个电路具有通用性,AT24C01、AT24CO2、24LC64等24系列的I2C EEPROM 均可按这个电路与并口连接,所以 不妨把它当作实用工具来认真制作。先找一条并口电缆,看电缆插头的形式,找一个与之配套的25针插座,购买一个拨动式的IC插座,将IC插座按图中IC1的连接方法与找来的并口插座相连,然后按图将T1、R1、C1、直接焊在IC插座或并口插座上,要尽量作的紧凑些。最后将电路固定在一个合适的小塑料盒内,好了,现在它是我们的试验器材,等看过后面的内容,你会发现只要为其配上软件,它就是一个用于读写I2C EEPROM 的好工具。


(三)试验程序编写:
和其它高级语言相比,C 更适合于对硬件编程。但是由于要求工作界面要美观,目前实验用到的是VC++。但是在VC条件编制并口程序需要相关的I/O库进行配置。

(四)编程:通过上面分析,要用并口来模拟I2C总线来读写 AT24C01 ,程序需有以下几部分:

发送I2C开始信号:SCL和 SDA都为高电平,延时一段时间后,向378H写入"0XFD"(其它脚状态不变,只是将位 1 置为低电平),使SDA由高电平变为低电平,即产生了I2C的开始信号。最后将在378H中写入"0XFC"(即其它脚不变,将位0和位1置为低电平)使SCL为低电平,以完成一个时钟,也为后面的读写作准备。

发送I2C停止信号:I2C的停止信号是在SCL为高时,SDA由低变高。程序可按下面步骤来写,用写端口函数
向378H写入"0XFC",使SCL和SDA为低电平,延时一段时间,向378H写入"0XFD",使SCL变为高电平,SDA为低电平,延时,向378H写入"0XFF"SCL保持不变,使SDA由原来的低电平变为高电平,即产生了一个停止信号。延时一段时间,最后向378H写入"0XFE",使SCL为低电平,以完成一个时钟。

发送数据:先把要发送的数据放在一个变量里,然后按位发送。方法为,通过位运算求得欲发送位的值(
1或0),然后用写端口函数模拟出SCL和SDA,并按I2C的写时序将一位数据发送出去,程序中可用while循环语句来控制发送的位数和字节数。

主机(并口)发送应答:I2C总线,主机发送应答用在连续读时序中,每读取一字节(8位)后,主机使SDA
保持一个时钟周期的低电平。可以用写端口函数先将SDA、SCL置为 0,然后将SCL变高,SDA保持低电平,一个应答信号既被发送,最后将SCL置低,完成一个时钟。

接收数据:并口读取I2C总线的数据时,必须让 T1截止,使用并口的13脚来接收SDA上的数据。可按下面步
骤操作,先用写端口函数使SCL为低电平,同时在并口3脚输出高电平使 T1 截止。然后用写端口函数单独将SCL置1,其它位保持不变,模拟出时钟上升沿,IC1 将把一位数据放到数据线SDA上,用读端口函数 读
取‘打印机状态'寄存器379H当前的值,将结果赋值给一个变量,然后对这个变量进行先右移4位,再左移7位
的运算(用以获得13 脚电平状态,即打印机状态寄存器的位 4 的值),判断该变量是否为0,最后将判断结果
移入另外的一个用于存放‘已读取数据'的变量中,完成读取一位数据的操作,用写端口函数使SCL为低电平,
在下一个SCL的上升沿,同样用上面的方法将一位数据加入‘已读取数据'变量中。可用while循环控制要读的
位数和字节数。注意以上过程都是在 T1 为截止态时进行的。

主机(并口)接收应答:接收应答用于写 I2C 时,每写一字节数据到从机后,如果操作成功,从机在下一
个时钟内使 SDA 为低。主机查询应答可以加强操作的可靠性。接收应答和上面说的接收数据大致相同,只是仅 接收一位数据并且不存储,直接判断其值是否为 0,不为 0 时(即没有收到应答)转错误处理程序,为 0则继
续后面的操作。在实际编程时将这个步骤合并到写I2C的操作中。

有关延时:I2C器件对SDA和SCL上的高、低电平信号需保持的时间是有规定的。如:开始信号的高、低电平
要保持多长时间,数据信号的高、低电平最低要保持多长时间等。不同的器件对这个时间有不同的规定。查找
24LO02的数据手册,可以知道,它在不同的电压下对各信号要保持的时间分别在几百纳秒到几微秒之间。这个
时间也体现了I2C器件的读写速度。因为计算机的速度不同,要用计算机并口来模拟I2C很难将这个时间精确到
微秒。为了能够在不同的计算机上可靠的操作I2C总线,试验程序用了C语言的延时函数delay();这个函数能产
生的最小延时为1毫秒。虽然这样做降低了I2C的读写速度,但可以保证操作的可靠性。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top