IIC 即 inter-integrated-circuit,又称 I2C 一种总线结构,具体接受请度娘。
I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
以下为mini2440的IIC设备:AT24C08
IIC遵从 主/从结构,通信由主机发起,并且由主机结束。
开始信号(s):当时钟信号处于高电平,向数据信号线发送下降沿。
结束信号(p):当时钟信号处于高电平,向数据信号线发送上升沿。
由于IIC总线上可能连有多个设备,因此我们应该在开始信号后进行设备选择,也就是发送地址信号,当设备收到符合自己地址的信号后会返回响应。
一般地址位宽为7位,而发送的数据位为8位,除了7位地址,剩下的一位为读写位。
如果为写,则在设备返回ack信号后,接着主机发送8位数据,当设备收到数据后,设备返回ack信号。
如果为读,则在设备返回ack信号后,接着设备返回8位数据,当主机接收到信号后,接下来的ack信号就由主机发送。
Data Transferred段周而复始,直到数据传输完成。
而在主机发送(R)或者接受(W)到ack信号后,会产生中断,我们可以在中断处理程序中对数据进行进一步处理,或者在中断处理程序内继续发送/接收数据。
当传输完成后,
如果主机作为数据发送方,可以发送停止信号,终止IIC传输过程。
如果主机作为数据接收方,可以不发送响应信号ack,终止传输过程。
寄存器配置:
根据芯片手册,IICCON用于初始化,其余用于数据传输的相关操作。
IICCON: IIC控制寄存器
IICDS: IIC数据移位寄存器
IICSTAT: IIC状态寄存器
IICADD: IIC地址寄存器
流程如下
主机发送流程:
主机接收流程:
设备发送流程:
设备接收流程:
另外,对于AT24C08,值得注意的是,该设备是先进行地址选择(非IIC设备的地址选择,而是AT24C08内部的地址选择),然后进行数据读写。
因此,AT24C08来说,当该设备被选择后(IIC地址匹配),然后对收到的第一个数据进行片内地址选择(写地址),然后:
如果需要写数据,因为同为写模式,所以可以直接进行
如果需要读数据,因为要转换为读模式,所以需要重新发送开始信号,在当前地址读数据
AT24C08是10位地址,所以8位的word address根本不够进行地址选择,因此以device address的最后两位,加上word address 的8位,一共10位数据进行地址选择。