IIC总线是个比较重要的模块,很多外设都通过IIC来传输数据,下面大致说下IIC总线协议原理:
IIC只有2条线,SDA(数据线)/SCL(时钟线),分为主机(IIC控制器)和从机(EEPROM),2条线上可以挂很多从机设备,主机通过向从机发地址,哪个从机响应了,就与哪个从机通信。
当SCL/SDA都为高电平时,拉低SDA作为起始信号, SCL为高,拉高SDA做为结束信号,从机在收到8位数据后,在第9个时钟周期拉底SDA作为ACK应答信号。
scl为低时可以传送数据,传送完后SCL会被拉高,在scl上升沿开始传数据。scl为高时要保持sda数据稳定。
发送完数据,读完数据,发送完stop信号,都要delay一会,等设备反应。
传送数据按芯片手册的timing走,先传地址,先传数据,每传一个8位数据,从机要发送一个ACK应答。
我们编程是以主机的角色,从机自己会拉高拉底scl/sda,主机也不用管怎么拉高拉低SCL/SDA,只需设置IIC控制器的寄存器就可以按timing传数据。
Tiny4412有一个直接连接CPU IIC0 信号引脚的EEPROM芯片AT24C08,主要是为了测试IIC总线用,我们看下往这个设备读写数据应该怎么操作。
下图是写数据时的流程:
IIC只有2条线,SDA(数据线)/SCL(时钟线),分为主机(IIC控制器)和从机(EEPROM),2条线上可以挂很多从机设备,主机通过向从机发地址,哪个从机响应了,就与哪个从机通信。
当SCL/SDA都为高电平时,拉低SDA作为起始信号, SCL为高,拉高SDA做为结束信号,从机在收到8位数据后,在第9个时钟周期拉底SDA作为ACK应答信号。
scl为低时可以传送数据,传送完后SCL会被拉高,在scl上升沿开始传数据。scl为高时要保持sda数据稳定。
发送完数据,读完数据,发送完stop信号,都要delay一会,等设备反应。
传送数据按芯片手册的timing走,先传地址,先传数据,每传一个8位数据,从机要发送一个ACK应答。
我们编程是以主机的角色,从机自己会拉高拉底scl/sda,主机也不用管怎么拉高拉低SCL/SDA,只需设置IIC控制器的寄存器就可以按timing传数据。
Tiny4412有一个直接连接CPU IIC0 信号引脚的EEPROM芯片AT24C08,主要是为了测试IIC总线用,我们看下往这个设备读写数据应该怎么操作。
下图是写数据时的流程: