一、IIC工作原理及协议介绍
1.IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接
微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。
在 CPU 与被控 IC 之间、 IC 与 IC 之间进行双向传送, 高速 IIC 总线一般可达 400kbps 以上。最开始SDA和SCL都属于拉高状态,IIC是半双工总线,发送和接受不可以同时进行,主要用于近距离、低速的芯片之间的通信。
2.IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫。当总线上有多个主机同时启动总线时,IIC也具有冲突检测和仲裁的功能防止产生错误。每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机。IIC通信时总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器。
3.IIC总线通信过程
(1)主机发送起始信号启动总线
(2)主机发送一个字节数据指明从机地址和后续字节的传送方向(高七位确定地址,最后以为确定方向,0表示后续数据主机发送数据,1表示主机接收数据)
(3)被寻址的从机发送应答信号回应主机
(4)发送器发送一个字节数据
(5)接收器发送应答信号回应发送器
(6)循环4、5(发送过程中不允许改变通信方向)
(7)通信完成后主机发送停止信号释放总线
4.IIC协议主要包括四种类型:(1)空闲状态(2)三种信号(3)数据有效性
(1)空闲状态:I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
(2)起始信号、停止信号、应答信号
1.起始信号:当SCL为高期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。
2.停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。
起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线处于空闲状态。
IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传递低位,发送器发送完一个字节数据后必须发送1位应答位来回应发送发送器,即一帧共有9位。
3. 应答信号:发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。 (1)应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;(2)应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平,只有这样才代表是一个有效应答。
如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。
(3)数据有效性:IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许变化,时钟线SCL高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定。
数据在SCL的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。
二、EEPROM(AT24C02)
1.特点:
(1)AT24C存储芯片时一种可擦除可编程存储器,芯片容量有128 x 8 (1K), 256 x 8 (2K), 512 x 8 (4K),1024 x 8 (8K) or 2048 x 8 (16K)。
(2)两线制串行接口,允许页编程,一页八个字节。
(3)可以允许反复擦除100万次,数据可保护100年。
如果要对其进行写操作,需要把写保护引脚WP接大地,即拉低。
2.自身地址:R/W,如果是0表示要在这个芯片里面写数据,1则表示要在这个数据里面读数据
3.存储地址
(1)AT24C02存储芯片提供两种写入方式,一种是以字节为单位写入,一种是以页为单位写入,一页由8个字节组成。
(2)写操作,包括按字节写
按字节写操作要求在接收器件地址和ACK应答后,接收8位的字地址。接到这个地址后EEPROM应答“0”,然后是8位数据,在接收8位数据后,EEROM应答“0”,接着必须由主器件发送停止条件来终止写操作。DEVICE ADDRESS是设备地址,WORD ADDRESS是AT24C02地址,一共256个字节,所以一共有256个地址。MSB-最高位,LSB-最低位。在写周期过程中,所有输入都无效,直到写周期完成,EEPROM才会有应答,一个写周期是5ms。
写字节数据操作过程
(1)主机发送开始信号(2)主机发送器件地址(3)主机等待从机应答(4)主机发送存储地址
(5)主机等待从机应答(6) 主机发送存储数据(7)主机等待从机应答(8)主机发送停止信号
(3)写操作,按页写
24C02器件按8字节/页执行页写,24C04/08/16器件按16字节/页执行页写,24C32/64器件按32字节/页执行页写。
页写初始化与字节写相同,知识器件不会再第一个数据后发送停止条件,而是在EEPROM的ACK以后,接着发送7个( 24C02)或15个24C04/08/16或31个24C32/64 。如果传入数据超过最大字节数,字地址将回传到该页的首字节,先前的字节会覆盖。
页写入数据操作过程(0x08是第二页首地址)
(1)主机发送开始信号(2)主机发送器件地址(3)主机等待从机应答(4)主机发送页地址
(5)主机等待从机应答(6) 主机发送存储数据(7)主机等待从机应答(8)主机发送停止信号
4.读字节数据操作过程
读数据操作有三种方式(1)当前地址读(2)随机读(3)顺序读
当前地址读,内部地址计数器保存着上次访问时最后一个地址加1的值。只要芯片有电,该地址就一直保存。当读到最后页的最后字节,地址会回转到0;当写到某页尾的最后一个字节,地址会回转到该页的首字节。
(1)主机发送开始信号(2)主机发送器件地址(3)主机等待从机应答
(4)主机读取存储数据(5)主机发送应答信号(6)主机发送停止信号
随机读 ,指定位置读,需要先写一个目标地址,一旦EEPROM接收器件地址和字地址并应答了ACK,主器件就产生一个重复的起始条件。然后主器件发送器件地址(读/写选择位为“1”),EEPROM应答ACK,并随时钟送出数据。主器件无需应答“0”,但需发送停止条件。
(1)主机发送开始信号(2)主机发送器件地址,必须是写操作(3)主机等待从机应答
(4)主机发送存储地址(5)主机等待从机应答(6)主机再次发送开始信号
(7)主机发送器件地址,必须是读操作(8)主机等待从机应答
(9)主机读取1字节数据,并发送应答信号(10)发送停止信号
顺序读