IIC总线
- IIC特点
- 串行半双工总线,主要用于近距离、低俗芯片之间的通信
- 组成
- IIC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟SCL用于双方时钟同步
- 多主机总线协议—多个挂在可以作为主机
- 主机
- 主机有权发起和结束一次通信
- 从机
- 只能被主机呼叫
- 多主机同时启用总线
- 有冲突检测功能及仲裁功能,防止错误产生
- 每个IIC总线上都有一个唯一的地址(7bit)—这个地址是硬件决定的
- 挂载器件既可以当主机又可以当从机,但是同一时间只能有一个身份
- 主机
- 发送数据的叫发送器,接收数据的叫接收器接收器和发送器与主机从机无关
- 通信过程—宏观分析
- 主机发送起始信号启用总线—总线被占用,其余主机无法使用
- 主机发送一个字节数据指明从机地址(高7bit)和后续字节的传送方向(最低1bit)
- 所有从机都能收到地址,与自己进行比较,最后决定是否与主机通信
- 传输方向问题—最后一位如果是0则主机给从机发数据,如果1则从机给主机发数据
- 自此,虽然字节数不受限制但发送方向不可以改变
- 被寻址的从机发送应答信号回应主机
- 发送器发送一个字节数据
- 接收器发送应答信号回应发送器
- 循环上述两步—可以发送n个字节
- 通信完成后主机发送停止信号释放总线
- IIC的寻址方式
- IIC总线上传送的数据是广义的,既包括地址,又包括真正的数据
- 发送起始信号后的一字节由主机发给从机,包含地址信息和收发器的定义
- IIC总线信号的实现—两根线空闲时都是高电平
- 起始信号和停止信号—主机发送
- SCL为高电平,SDA由高变低表示起始信号
- SCL为高电平,SDA由低变高表示停止信号
- 在这两个信号之间其他主机无法启用地址
- 字节传送与应答
- IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后,接收器必须发送1bit的应答位(负脉冲)
- 同步信号
- 两个问题
- 两个不同器件之间不知道什么时候发送数据和接收数据
- 两个连续的相同信号0011和01如何区别
- 第一个问题使用起始信号就可以解决
- SCL就解决了第二个问题
- 当SCL为低电平时,发送器可以向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,当SCL变为高电平时,数据必须稳定,这样才可以进行数据读取
- 两个问题
- 如何记住SCL与SDA的关系所决定的信号呢?
- SCL在高电平期间,如果出现了SDA电平下降沿则表示起始信号,出现SDA上升沿则表示停止信号,如果不变,那么此时正在传输数据,当SCL为低电平,SDA为负脉冲信号信号出现时,则为应答信号
- 为什么IIC可以传输任意多个字节呢?
- 原因就在于共用一根SCL,不存在偏差
- 起始信号和停止信号—主机发送
- IIC的典型时序
- 主机向从机发送数据
- 主机发送起始信号给从机
- 主机发送一个字节的数据包括地址和读写方向0
- 从机应答
- 主机发数据从机应答—循环
- 停止信号发送的前提后两个
- 当主机发送最后一个bit从机发送应答后,主机发送结束信号
- 当主机发送最后一个bit从机未应答,主机发送结束信号
- 从机向主机发送数据—寻址后
- 主机发送起始信号给从机
- 主机发送一个字节的数据包括地址和读写方向1
- 从机应答
- 从机发送数据主机应答
- 从机发送最后一个bit后,主机不去应答,而后发送停止信号
- 主机先向从机发送数据,然后从机再向主机发送数据
- 主机发送起始信号给从机
- 主机发送一个字节的数据包括地址和读写方向0
- 从机应答
- 主机发数据从机应答—循环
- 主机发送起始信号给从机
- 主机发送一个字节的数据包括地址和读写方向1
- 从机应答
- 从机发送数据主机应答—循环
- 从机发送最后一个bit后,主机不去应答,而后发送停止信号
- 要转变方向直接发送起始信号即可,不用停止信号,这样避免总线被其他主机占用
- 主机向从机发送数据