I2C 原理及时序代码
I2C
通过通信线,实现单片机读写外挂模块的寄存器的功能。
- 串行半双工
- 应答机制
- 多模块 一主多从 / 多主多从
- 同步、时钟线
采用外置若上拉电阻加开漏输出结构,进制所有设备输出强上拉的高电平。
I2C时序基本单元
起始条件:SCL高,SDA下降沿;终止条件:SCL高,SDA上升沿
主机发送一个字节:SCL低电平期间,主机数据将依次放到SDA上(高位先行,B7–>B0依次发送),然后释放SCL,从机在SCL高电平期间,读取数据位。
主机接收一个字节 :SCL低电平期间,从机数据依次放到SDA上(高位先行),主机在SCL高电平期间读取数据位。
应答机制
发送应答SA:主机在接收完一个字节后,在下一个时钟发送1bit,0应答,1非应答。
接收应答RA:主机在发送完一个字节后,在下一个时钟接收1bit从判断从机是否应答,0应答,1非应答。
I2C时序★★★
指定地址写:
对于指定设备(slave address),在指定地址(reg address)下,写入指定数据(data)
- 起始
- –> 主机send slave address(7bit)+ R/W(W=1,1bit)
- –> 主机接收应答RA
- –> 主机send reg address(8bit)
- –> 主机接收应答RA
- –> data 8bit
- –> 主机 RA
- –> 终止
当前地址读:
对于指定设备(slave address),在当前地址下,读从机数据(data)
- 起始
- –> 主机send slave address(7bit)+ R/W(R=0,1bit)
- –> 主机 RA
- –> 主机接收 data8bit
- –> 主机 发送应答 SA
指定地址读:
对于指定设备(slave address),在指定地址(reg address)下,读取从机数据(data)
- 起始
- –> 主机send slave address(7bit)+ R/W(W=1,1bit)
- –> 主机接收应答RA
- –> 主机send reg address(8bit)
- –> 主机接收应答RA
- –> 主机Sr,重复起始条件
- –> 主机send slave address(7bit)+ R/W(R=0,1bit)
- –> 主机 RA
- –> 主机接收 data 8bit
- –> 主机 发送应答 SA
示例代码
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Aylmer's Blog!
评论