)
1. IIC基本电路结构主要包括SCL SDA两根数据线每个从机具有7位的地址- 共有128个地址所以理论上最多可以和128个数据通信。SCL- 时钟线主机发送给从机控制数据传输速率。SDA- 数据线传输发送的数据。此外所有的SCL和SDA线都需要设置为开漏输出 -设置为逻辑线与。1.1 逻辑线与逻辑与如下逻辑线与主要是通过硬件方式实现逻辑与。只有全部为高电平此时总线为高电平当有一个为低电平此时总线为低电平。1.2 主机发送时钟信号所有从机的SCL为输出高电平。当主机输出为1 时候此时总线为高电平为1。当主机输出为0时候此时总线为低电平为0。通过这种方式实现发送SCK时钟信号。1.3 主机发送数据相同的方法所有从机SDA引脚均为1。通过主机输出0/1 来实现对从机写数据。1.4 从机发送数据至主机相同的方法写1 释放总线通过从机写0/1 实现数据传输2. IIC的通信协议2.1 IIC通信的基本流程首先是主机将总线拉低开始进行通信然后通过7位地址确定与那个从机进行通信接着通过读or写来判断方向是主机给从机写数据还是主机从从机读数据。最后是停止位。2.2 IIC数据帧的格式数据帧主要包括起始位地址读写写数据以及对应的应答位最终是停止位。在传输字节过程中每个字节均会进行应答ACK。2.3 起始位和停止位起始位在SCL为高电平的时候拉低SDA;停止位在SCL为高电平的时拉高SDA;2.4 寻址阶段确定从机地址以及读写方式的过程。发送地址和读写方式后等待从机的应答。收到ACK后才会进行后续的数据传输阶段。ACK信号主机释放SDA也就是将SDA置1。从机将SDA拉低此时认为收到了ACK信号可以进行后续传输数据的过程。2.5 数据传输阶段当主机发送数据从机应答时候主机发送完一字节数据释放SDA,从机将SDA拉低表明ACK以此往复。相同的当从机发送的时候此时从机释放SDA主机将SDA拉低作为ACK。3. IIC外设的使用方法3.1 IIC的速度模式IIC也是每个时钟周期传输一个比特位。IIC主要支持如下几种速度模式具体支持那个需要对照单片机类型。3.2 快速模式下时钟信号的占空比高电平或者低电平占时钟周期的比例。主要有12 和916 两个选项4. IIC写数据4.1 IIC的结构图和串口以及SPI一样都是经过数据寄存和移位寄存器。通过标志位判断数据寄存器和移位寄存器的状态。分别是通过START STOP ACK控制位控制SDA的状态。START写1 就是可以控制SDA发送一个起始位。通过选择 标准/快速 占空比 波特率控制SCL的状态。4.2 数据发送的过程通过BUSY标志位判断总线是否空闲。当SCL和SDA总线均为高电平的时候此时就是总线空闲状态。向上述的START位写1此时产生起始位。发送从机地址以及读写信号并通过AF和ADDR标志位判断是否成功接受应答。AF- Acknowledge Failure 应答失败 当为1的时候表示未收到ACKADDR- 当为1 的时候表示寻址成功。不断查询TXE和AF标志位判断发送数据寄存器是否为空以及是否成功得到应答ACK。发送停止位向STOP位写1此时会产生停止位。5. IIC读数据5.1 发送起始位和地址通过START位写1发送起始位通过查询SB标志位等待起始位发送完成。通过AF和ADDR标志位判断是否正常接收到ACK应答标志位。5.2 发送ACK 和NACK在接受数据的过程中当正常接受数据的时候需要发送ACK但是当接收到最后一个数据的时候需要发送NACK来停止接受下一个防止下一个字节与停止位冲突。通过ACK位来控制发送ACK or NACK。5.3 发送停止位对STOP位写1。5.4 根据接受字节情况只有一个字节时此时就正常发送ACK应答当有两个字节时此时第一个自己是ACK第二个字节是NACK。当有n个字节时 前n个字节是ACK第n个字节是NACK。就是这个的区别。6. 软件IIC6.1 使用软件IIC的原因硬件IIC操作繁琐。引脚位置收到限制。此时可以选择任意的通用IO接口作为SCL和SDA两个引脚均设置为通用输入输出开漏模式6.2 具体的实现过程引脚初始化为通用开漏输出模式。分别结合延迟函数实现SCLSDA功能。实现起始位和停止位的功能。实现发送数据和接受数据的功能。这部分了解之后可以直接找对应的封装完毕的软IIC学会使用即可。