31.硬件 - IIC

一、IIC协议

    1、I2C(Inter-Integrated Circuit BUS) 集成电路总线。该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。

    2、IIC的物理层:

        ①、只要求两条总线线路:串行数据线 SDA,串行时钟线 SCL。IIC 是半双工,而不是全双工。

        ②、连接到总线的器件可通过其唯一地址和其它器件通信。主/从机角色和地址可配置,主机可作为主机发送器和主机接收器。

        ③、传输速率在标准模式下可以达到100kb/s,快速模式下可以达到400kb/s。

        ④、连接到总线的设备数量,只受总线的最大负载电容400pf限制。

        ⑤、IIC 是真正的多主机总线,它可在通讯过程中改变主机。如果多个主机同时请求总线,可通过冲突检测和仲裁,防止总线数据被破坏。而 SPI 每次通信前要把主机定死。

        ⑥、一个三极管,使用开集(极电集开发出去作为输出)电路。

        ⑦、发送原理:


    3、IIC 协议:

        ①、I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。

        ②、数据的有效性:时钟SCL在高电平周期内,SDA线上的数据必须保持稳定。数据线仅可在时钟SCL为低电平时改变。

        ③、起始和结束条件:

            Ⅰ、起始条件:当SCL为高电平时,SDA线上由高到低的跳变。总线在起始条件后视为忙状态。

            Ⅱ、结束条件:当SCL为高电平时,SDA线上由低到高的跳变。在停止条件之后视为空闲状态。

            Ⅲ、若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。

        ④、起始和终止信号都是由主机发出。需要进行数据的收或发也是由主机所控制的。

        ⑤、应答:每当传输完一个字节的数据,主机需等待从机给出应答信号 ACK。从机应答主机所需要的时钟仍是主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期。(即接收器 接收到8位数据后,在第9个时钟周期,拉低 SDA)

    4、数据帧格式:

数据帧格式



二、硬件 IIC 初始化

    1、实例框图:

    2、发送流程:

        ①、发出start信号

        ②、把地址数据写入到发送寄存器,一写入就会自动的发出时钟,并把这8位数据从SDA发送给从设备。

        ③、第九个时钟会收到回应信号,查询寄存器看是否有ACK。有ACK表示数据发送成功了。

        ④、第九个时钟后会产生中断,IIC 控制器会拉低 CSL 信号,阻止主或从使用总线。

        ⑤、如果还需传输数据,则随后清中断来恢复时钟,使总线恢复使用来重复发送数据。否则结束(应该是结束流程中进行清中断操作,而非手动操作)。

        ⑤、发完后设置寄存器,让它发出终止信号。

    3、初始化步骤:

        ①、设置时钟:时钟源PCLK(50MHZ)太快,需设置分频系数降低时钟至需要的 SCL。

        ②、

你可能感兴趣的:(31.硬件 - IIC)