文章目录
1 IIC的基本介绍
对于嵌入式开发人员来说,IIC通信大家应该都很熟悉,
1.1 IIC的简介
IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。它是半双工通信方式。
IIC总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
IIC总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
2 IIC数据格式
2.1 字节传输
在每个时钟脉冲期间传输一个数据位。SDA行上的数据必须在时钟脉冲的HIGH期间保持稳定,因为此时SDA行上的变化将被解释为START或STOP。位传输说明如下。
2.2 开始和结束条件
当总行不忙时,SDA和SCL行都保持高电平。SDA在SCL为HIGH时从高到低的转变定义为START条件(S), SDA在SCL为HIGH时从低到高的转变定义为STOP条件§。START和STOP条件如下所示。
2.3 系统调整
系统调整如上所示,下面解释了一些单词的定义:
a.发送器:将数据发送到总行的设备。
b.接收器:从总行接收数据的设备。
c.主控:发起传输的设备产生时钟信号,并终止传输。
d.从机:由主机寻址的设备。
e.多主站:多个主站可以尝试同时控制总行而不会损坏消息。
f.公断:确保在多个主机试图同时控制总行时,只允许一个主机这样做并且消息不会损坏的过程。
g.同步:同步两个或多个设备的时钟信号的过程。
3 总线挂死原因
在排除硬件错误的前提下去分析:
3.1 主机信号挂死
造成主机信号挂死的原因有 硬件IO损坏、软件状态机异常。需要从硬件角度和代码去分析解决。
3.2 主机信号异常
主要原因也在于代码问题
3.3从机拉死总线
IIC数据线是主机从机数据相与的,从机拉低后主机无法再次拉高拉起新的通信。此现象大多出现在信号被干扰时从机丢失Clock或者增加了Clock导致双方时序没有对齐。从机还在维持发送0的状态,从而把SDA拉低了。