异步时序与同步时序的区别

  1. 异步时序 节省时钟线 但是对时间要求严格,对硬件电路依赖
  2. 同步时序 需要时钟线 但是对时间要求不严格,对硬件电路依赖小 (可以使用软件模拟时序)

I2C总线

I2C 是两根线(SCL、SDA) 是同步通信 采用半双工工作模式
支持(一主多从,多主多从)通信模式 (多主机下还需要进行时钟同步)在总线冲突时会触发总线仲裁机制

硬件电路

任何时候主机完全掌控SCL线,在空闲状态下可以主动发起对SDA线的控制 从机不允许控制SCL线,且只有在主机允许的情况下才能对SDA线进行控制

所有设备均需要上拉电阻,保证SDA、SCL线在空闲状态下为高电平,主设备配置为开漏输出,从设备上拉输入

I2C禁止所有设备输出强上拉高电平,采用外置弱上拉电阻,开漏输出的方式

##I2C时序
在总线空闲时,SDA和SCL由外挂的上拉电阻拉高至高电平

  1. 起始条件: SCL高电平期间,SDA从高电平切换到低电平

  2. 终止条件: SCL高电平期间,SDA从高电平切换到低电平
    在这里插入图片描述

  3. 传输:

	SCL低电平期间,主机将数据放到SDA线上(高位先),后释放SCL,从机在SCL高电平期间读取SDA数据。

故SCL在高电平期间不允许SDA有数据变化
在这里插入图片描述

  1. 应答
    发送应答:主机在接收完一个字节的数据后,在下一个时钟发送应答数据,0应答 1非应答
    接收应答:主机在发送完一个字节的数据后,在下一个时钟释放SDA线接收从机的应答,0应答,1非应答

来个栗子

首先,需要确定每个从机的唯一地址(7位、10位),用来作为主机发送的地址
而从设备地址会拥有可变部分

  1. 指定地址写 :对于指定的设备,在指定的地址下,写入指定的数据
    1. 先发送起始条件(SDA拉低)
    2. 发送一个字节的数据(从机地址+读写位(0写1读))
    3. 主机查看应答信号
    4. 开始写入一个字节数据
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐