!!
一段时间接触后,对IIC又有了新的认识,请移步新文章 IIC协议及ADuc7126使用GPIO模拟IIC
概述
公司有一个需求,原来硬件IIC的位置被占用了,需要使用GPIO口来模拟IIC。
介绍
IIC介绍
IIC仅仅需要两根线:SDA, SCL;(未验证)SCL仅可由主机产生,而且主从机之间的SCL,SDA分别是线与的关系,且都默认开漏。
IIC主机模式基本的操作有:产生开始信号(S),产生开始信号(S),产生重复开始信号,产生应答信号(ACK),接收应答信号,产生非应答信号(NACK)。读一个字节,写一个字节。
器件地址
一般器件地址为8个字节,其中器件地址最后一位表示读(1)或者写(0)。
基本动作时序
下述中, 1即为高电平, 0即为低电平。
开始信号(S)
SCL为1,SDA由1变为0;
停止信号(P)
SCL为1,SDA由0变为1;
应答信号(ACK)
单个位,SCL为1,且SDA为0;
非应答信号(NACK)
单个位,SCL为1,且SDA为1;
对于NACK信号,要说明一下,很多资料及手册将其称之为“无应答”、“非应答”等等,容易让人望文生义,很具有迷惑性。个人认为,当发送给从机时,称之为“应答非信号”可能更加合适,因为其作用就是相对于应答信号(ACK)的另一种应答回应。
典型应用在多字节读取的时候,一般若主机要继续读下一字节,便发送ACK通知从机,从机则继续发送下一字节数据;若想要停止,便发送NACK通知从机,从机便不在发送下一字节数据,主机便可以产生P释放总线。
但若是从另一个角度去理解,若SDA在主机进行完读、写操作后,主机SDA默认拉高、从机SDA也默认拉高,这样来看,若是未回应,则就表现为非应答。若是回应(即主机或从机将SDA拉低),则表现为应答。
操作时序
一般存储类的从器件,其支持的操作模式有:指定地址单字节写,指定地址多字节写;当前地址单字节读,当前地址多字节读,指定地址单字节读,指定地址多字节读。
相关的主机IIC的操作顺序是(对于存储从器件,且存储目标地址为单字节)
写模式(指定地址单字节写)
- 产生S
- 写器件地址(写模式)。
- 接收从机ACK
- 写单字节的存储目标地址
- 接收从机ACK
- 写单字节数据
- 接收从机ACK
- 产生P;结束;
![指定地址单字节写时序图]()
写模式(指定地址多字节写)
- 产生S
- 写器件地址(写模式)
- 接收从机ACK
- 写单字节的存储目标地址
- 接收从机ACK
- 写单字节数据
- 接收从机ACK
- 写单字节数据(写入的地址会较上一次自动+1字节)
- 接收从机ACK
- 若要继续写,则重复步骤8、9;若要停止,产生P,结束
读模式(当前地址单字节读)
- 产生S
- 写器件地址(读模式)
- 接收从机ACK
- 读一个字节
- 产生NACK
- 产生P
读模式(指定地址单字节读)
- 产生S
- 写器件地址(写模式)
- 接收从机ACK
- 写单字节的存储目标地址
- 接收从机ACK
- 重复产生S,但是不放弃总线控制权。
- 写器件地址(读模式)
- 接收从机ACK
- 读取单字节
- 产生NACK
- 产生P,放弃总线控制权。
读模式(指定地址多字节读)
- 产生S
- 写器件地址(写模式)
- 接收从机ACK
- 写单字节的存储目标地址
- 接收从机ACK
- 重复产生S,但是不放弃总线控制权。
- 写器件地址(读模式)
- 接收从机ACK
- 读取单字节
- 产生ACK
- 读取单字节
- 若要继续,重复10、11;若要停止,产生NACK,产生P,放弃总线控制权。

浙公网安备 33010602011771号