STM32——I2C总线
·
异步时序与同步时序的区别
- 异步时序 节省时钟线 但是对时间要求严格,对硬件电路依赖
- 同步时序 需要时钟线 但是对时间要求不严格,对硬件电路依赖小 (可以使用软件模拟时序)
I2C总线
I2C 是两根线(SCL、SDA) 是同步通信 采用半双工工作模式
支持(一主多从,多主多从)通信模式 (多主机下还需要进行时钟同步)在总线冲突时会触发总线仲裁机制
硬件电路
任何时候主机完全掌控SCL线,在空闲状态下可以主动发起对SDA线的控制 从机不允许控制SCL线,且只有在主机允许的情况下才能对SDA线进行控制
所有设备均需要上拉电阻,保证SDA、SCL线在空闲状态下为高电平,主设备配置为开漏输出,从设备上拉输入
I2C禁止所有设备输出强上拉高电平,采用外置弱上拉电阻,开漏输出的方式
##I2C时序
在总线空闲时,SDA和SCL由外挂的上拉电阻拉高至高电平
-
起始条件: SCL高电平期间,SDA从高电平切换到低电平
-
终止条件: SCL高电平期间,SDA从高电平切换到低电平

-
传输:
SCL低电平期间,主机将数据放到SDA线上(高位先),后释放SCL,从机在SCL高电平期间读取SDA数据。
故SCL在高电平期间不允许SDA有数据变化
- 应答
发送应答:主机在接收完一个字节的数据后,在下一个时钟发送应答数据,0应答 1非应答
接收应答:主机在发送完一个字节的数据后,在下一个时钟释放SDA线接收从机的应答,0应答,1非应答
来个栗子
首先,需要确定每个从机的唯一地址(7位、10位),用来作为主机发送的地址
而从设备地址会拥有可变部分
- 指定地址写 :对于指定的设备,在指定的地址下,写入指定的数据
- 先发送起始条件(SDA拉低)
- 发送一个字节的数据(从机地址+读写位(0写1读))
- 主机查看应答信号
- 开始写入一个字节数据
更多推荐

所有评论(0)