IIC的ack信号为何会出现半高电平?
IIC(Inter-Integrated Circuit),是由飞利浦公司推出的一种串行通信总线(BUS),数字电路中应用非常广泛,经常用在对数据量以及速率要求不太高的场合,比如说用于传输单板配置、状态信息等。
应用中不太容易出现问题,但是也有例外,比如说本次文中要说的ack信号处出现的半高电平。出现半高电平的原因有很多,总结下来也就两点:1、代码写岔了;2、器件之间配合太挫了(第二点概率比较低,因为大家肯定都是按照IIC协议来设计器件的)
首先从协议入手
IIC接口结构
双线制
IIC有两条信号线(支持多主多从):
SCL(时钟线,由主器件输出(master))
边沿触发,上升沿将数据输入从器件,下降沿驱动从器件输出数据(这并不表示一个时钟周期即会触发读,又会触发写,可以对比时序图来理解),为边沿触发信号;
SDA(数据线,主、从(slave)器件都能输出)
双向数据线,漏极开路(OD,open-drain)/集电极开路(OC,open-collector)结构。
速率
标准模式:100kbit/s
快速模式:400kbit/s
高速模式:3.4Mbit/s