I2C是同步时序,对硬件依赖性不大,依靠软件也可以非常方便模拟通信。USART串口是异步时序通信,每一位的时间要求非常严格,不能过长或者过短,所以对硬件依赖性较强。
软件I2C比硬件I2C更加灵活。硬件I2C比软件更加节省CPU资源,执行效率高,并且可以实现完整多主机通信,时序波形规整,通信速率快等。
硬件I2C和USART外设一样,写入CR DR寄存器就可以 硬件自动完成其他时序。读取SR寄存器可以实时监控电路状态。
多主机模式分为固定多主机、可变多主机;固定多主机就是总线挂载设备当中固定数量的主机,当两个主机对总线控制产生冲突,仲裁赢得一方控制总线。可变多主机是总线上挂载的设备当中没有固定哪个设备是主机,当总线空闲,任何一个设备都可以控制主线与其他设备通信,通信完成后释放总线,继续保持从机状态,当多个设备都想要控制总线,产生总线冲突,总线仲裁,失败的一方让出控制权,这个模式就是所有设备一视同仁。
7位寻址和10位寻址在时序上的区别:7位寻址,发送的第一个字节7位地址位,1位读写位。前5位不会出现11110。
10位寻址,发送的第一个字节,前5位是11110,第8位是读写位。第6、7位和下一个字节的8位组成10位寻址位。
SMBus(system management bus)系统管理总线协议,基于I2C总线改进而来的。主要用于电源管理系统。和I2C非常相似。
硬件I2C有总线资源数量限制,此型号SMT32只有2路,引脚是固定的;软件模拟没有限制,只需要复制代码,即可创建新的总线通道,引脚可以随意指定。
由于I2C的弱上拉结构,会导致I2C上拉时出现迟滞现象,频率越快越明显,由于这一现象I2C的最大传输速率受到限制。
SMBALERT是SMBus使用。
发送数据:数据寄存器的数据转移到移位寄存器当中时,状态标志位TXE置位,表示发送寄存器为空。
接收数据:移位寄存器的数据转移到数据寄存器当中时,状态标志位RXNE置位,表示接收寄存器非空。
STM32作为从机时,可以写入指定地址到自身地址寄存器当中,为自身指定地址从而被寻址。支持同时响应两个从机地址,写入双地址寄存器即可。
发送数据帧时,用于CRC校验数据是否出现错误。
使用硬件外设的时候,GPIO口的模式要配置成复用模式,复用模式下GPIO口输出交给外设。