APP下载

I2C总线器件编程开发关键技术

2018-12-06黄忠良

汽车电器 2018年11期
关键词:高电平时序字节

黄忠良

(沙洲职业工学院,江苏 张家港 215600)

在微机控制领域,作为外围芯片的I2C总线器件因结构简单,可靠性高,得到了广泛应用。例如存储芯片24C02,用于记录密码及公里数等,广泛用于汽车仪表系统。I2C(Inter-Integrated Circuit)总线又称IIC总线或I2C总线,是PHLIPS公司推出的一种高性能串行总线。采用I2C串行总线技术可以精简系统硬件设计,提高系统可靠性,同时,系统也易于扩充与升级。24C02作为I2C总线接口存储芯片,属串行EEPROM,容量2 kbit,断电后数据不会丢失,常用于记录密码及公里数等场合。

1 24C02及I2C总线接口电路

24C02引脚图如图1所示,24C02与51单片机接口电路如图2所示。

图1 24C02引脚

应用I2C总线器件进行编程时,由单片机主机完成I2C总线初始化、数据传送、产生时钟信号和终止发送功能,从机24C02接收主机发送的数据。I2C总线具有总线裁决功能,主要依靠从机设备地址实现。对于24C02,8位从机设备地址的高4位固定为1010,后3位为A2、A1、A0,最后1位是数据传送的方向位 (R/W),主机将数据写入从机为“0”,主机从从机读出数据为“1”。

图2 24C02与单片机接口电路

2 I2C总线的数据传送

2.1 起始条件与停止条件

只有在起始条件满足后才能进行数据传送,起始条件与停止条件如图3所示。

图3 起始条件与停止条件

从图3可看出,当SCL处于高电平期间,SDA从高电平向低电平跳变时产生起始条件。当SCL处于高电平期间时,SDA从低电平向高电平跳变时产生停止条件。

2.2 I2C位数据传输规定

位数据的有效性及应答信号时序如图4所示。

图4 位数据的有效性及应答信号时序

主机进行数据传送时,从最高位开始逐位传送,时钟信号线为高电平期间,位数据必须保持不变。另外,每传送8位数据 (即一个字节)后,从机都必须产生一个应答信号。

3 I2C总线接口数据读写时序与编程

3.1 24C02字节读取时序

从机读操作有3种不同的方式:读当前地址内容、读随机地址内容、读顺序地址内容。图5为24C02读随机地址内容操作时序。

图5 24C02字节读时序

随机读操作允许主机对存储器的任意字节进行读操作,主机首先通过发送起始信号、从机设备地址和它想读取的字地址执行一个伪写操作。在从机应答之后,主机重新发送起始信号和从机设备地址,注意此处R/W位为1,从机响应并发送应答信号,然后输出所要求的一个8位字节数据,主机不发送应答信号但产生一个停止信号。

3.2 24C02字节写入时序

24C02字节写操作时序如图6所示。

图6 24C02字节写时序

主机先发送起始命令,然后发送从机设备地址数据,主机在收到从机产生的应答信号后,再发送一个字的地址数据,主机再次收到从机的应答信号后,最后发送数据到相应存储单元。从机再次应答,并在主机产生停止信号后开始内部数据的擦写,在内部擦写过程中,从机不再应答主机的任何请求。

3.3 24C02字节写入编程

下列代码完成24C02字节写入。

void write_byte (uchar add,uchar dat )

{

void init ();//I2C总线初始化

void start (void);//起始条件

I2Cwr_byte (0xa0);//写24C02地址

void ack (void);//从机24C02应答

I2Cwr_byte (add);//写单元地址

void ack (void);//从机24C02应答

I2Cwr_byte (dat);//写数据

void ack (void);//从机24C02应答

void stop (void);//结束条件

}

说明:上述用到的几个被调用函数定义如下。

①void init ();//I2C总线初始化

{

sda=1;

scl=1;

}

②void start (void);//起始条件

{

scl=0;//拉低SCL再改SDA以防误操作

delay ();

sda=1;

delay ();

scl=1;

delay ();

sda=0;

delay ();

}

③I2Cwr_byte(uchar dat) /*单字节传送操作*/

{

uchar i;

scl=0;//时钟线上的信号为低电平期间,数据线上电平状态允许变化

for (i=0;i<8;i++) //采用逐位传送方式

{

if (dat&0x80);//为先传最高位状态作准备

{

sda=1;

}

else

{

sda=0;

}

dat=dat<<1;//准备传送后面一位

delay ();

scl=1;//总线数据传送

delay ();

scl=0;

delay ();

}

sda=1;//主机释放总线

delay ();

}

④void stop (void);//停止条件

{

scl=0;//先拉低SCL,再改变SDA

delay ();

sda=0;

delay ();

scl=1;

delay ();

sda=1;

delay ();

}

⑤void ack (void) //从机应答

{

uchar I;

scl=1;

delay ();

while ((sda==1) && (i<200)) i++;//等待接收应答或作超时处理

scl=0;

delay ();

}

另外,有关24C02字节的读取编程见图5。

4 结束语

24CXX芯片目前已广泛应用在断电后仍然需要保持存储数据的场合。上述I2C总线存储单元读写编程方法已在Proteus上仿真调试成功。就I2C总线器件编程开发而言,正确理解操作时序至关重要,否则会导致通信失败。

猜你喜欢

高电平时序字节
顾及多种弛豫模型的GNSS坐标时序分析软件GTSA
清明
基于GEE平台与Sentinel-NDVI时序数据江汉平原种植模式提取
No.8 字节跳动将推出独立出口电商APP
你不能把整个春天都搬到冬天来
TS-03C全固态PDM中波发射机开关机控制电路原理及故障分析
No.10 “字节跳动手机”要来了?
数字电子技术的应用
浅谈物理电路与数字电路
关于Multisim10.0的高电平调幅电路仿真研究