11—AT24C02储存(IIC)
概述
- 由飞利浦开发的串行总线协议,在一个总线上仅有一个主器件,若干个从器件。
- IIC总线有两根数据线,数据线SDA,时钟线SCL。
- IIC总线上一个完整的器件地址包括类型划分符,片选信号与读写标志符。其中类型划分符用于划分不同器件的功能,例如EEPROM的类型地址为1010,AD/DA的类型地址为1001。片选信号用于在同类型中区分不同的芯片,读写标识符则用于标志读/写器件。
例如EEPROM器件片选信号0000,则:
- 读取设备的地址:0xA1
- 写入设备的地址:0xA0
起始/终止
IIC总线上,SDA SCL默认上拉。在SCL高电平时,SDA上的数据变化会被判定为开始/结束标志。仅在SCL低电平时,允许SDA上数据的传输(电平变化)。
- 起始信号:SCL高电平时,SDA拉低。
- 终止信号:SCL高电平时,SDA释放。
应答
应答信号用于数据接收,发送时的二次确认。主器件数据发送时,从器件产生应答;主器件数据接收时,主器件产生应答;主器件数据接收完成时,主器件产生非应答。
- 应答:SCL高电平时,SDA拉低。
- 非应答:SCL高电平时,SDA释放。
数据写入/读取
数据交换时,SCL必须保证低电平,否则将会被判定为开始/结束标志。
- 主器件写入,SCL低电平时,改变SDA上数据。
- 主器件读取,SCL高电平时,读取SDA上数据(从器件发送)。
通信流程
下示意图中,阴影部分为主器件发送,白色部分为从器件发送。S——开始,A——应答,P——停止。
- 主器件向从器件发送数据,先发送器件地址,再发送数据内容,从器件发送应答。
- 主器件从从器件读取数据,注意当数据接收完成后主器件需要发送非应答信号。
- 在通信过程中,如果主/从器件通行方向发生变化,则需要重新开始通信。
协议实现
- 起始
1 | //总线启动条件,SCL为高时拉低SDA |
- 终止
1 | //总线停止条件,SCL为高时释放SDA |
- 等待应答
1 | //等待应答,在SCL为高时读取SDA上的电平变化,为高时非应答,为低时应答 |
- 发送应答
1 | //发送应答,在SCL为高时,由主机发送 |
- 发送数据
1 | //通过I2C总线发送数据,注意SCL高电平时不允许SDA数据变化 |
- 接收数据
1 | //从I2C总线上接收数据,在SCL高电平时读取到SDA数据 |
实例分析
对于AT24C02(2Kb)进行读写操作,注意AT24C02写入时需要延时(最大5ms),同时读取时需要进行伪操作:
1 | void write_eeprom(uchar addr,uchar dat) |
通信流程:
协议起始,发送控制字节0xA0,写入地址0xFF,写入数据0x05,协议终止。
协议起始,发送控制字节0xA0,写入地址0xFF,协议终止;协议起始,发送控制字节0xA1,从从器件读取数据0x05,主器件发送非应答信号,协议终止。
本文标题:11—AT24C02储存(IIC)
文章作者:Raincorn
发布时间:2020-08-06
最后更新:2020-08-07
原始链接:https://blog.raincorn.top/2020/08/06/CT107D_11_AT24C02_IIC/
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可