22.裸板--I2C协议

I2C详解(一)_sternlycore的博客-CSDN博客_i2c

I2C协议靠这16张图彻底搞懂(超详细)_GREYWALL-CSDN博客_i2c协议

I2C总线通讯协议 - micro虾米 - 博客园

I2C别人的已经讲得很清楚,我按自己的理解重新写写,加深记忆。

I2C特性:

只需要两条总线,一条时钟线SCL,一条数据线SDA;
没有严格的波特率要求,但不能大于其硬件规定的速率;
所有组件之间都存在简单的主/从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址;
I²C是真正的多主设备总线,可提供仲裁和冲突检测;
标准模式:Standard Mode = 100 Kbps(最常用)
快速模式:Fast Mode = 400 Kbps

高速模式: High speed mode = 3.4 Mbps
超快速模式: Ultra fast mode = 5 Mbps
最大主设备数:无限制;
最大从机数:理论上是127

引脚和硬件连接:

I2C设备间的连接只有两根线,SDA数据线和SDL时钟线,SDA和SDL均结在上拉电阻,平时处于高电平。

设备地址的确定:

连接到同一个主设备的所有I2C从机,其设备地址不能相同,主机通过往从机写入设备地址,如果某个从机的地址与写入的数据匹配,则应答产生连接,从而主机找到从机

设备地址分为三部分:固定部分+变动部分+读(1)/写(0)

固定部分,要到芯片手册里找

 变动部分,在原理图就能看到,这部分是可以更改的,图示A0A1A2都接地,位000,如果有另外一个I2C芯片,可以把A0接高电平,改成001

P为页,只能用程序写入,比较大的I2C芯片内部有很多也,就需要P,如下有2个P,说明最多有4页

把固定部分,变动部分以及读/写合起来就是一个芯片的设备地址:如上读为10100001

数据传输

I2C的数据传输很简单,总结了几条规则方便记忆:

1.scl时钟信号高电平,sda必须稳定(此时数据传输),如果此时sda信号反转,不是启动(sda下降,一高一低)就是停止(sda上升,两个都高)

2.主从每次互动,一定是8+1(应答):7位设备地址+1位读写+1位应答;8位内存地址+1位应答;8位数据+1位应答

3.启动信号之后一定是紧接着设备地址发送(7位设备地址+1位读写+1位应答),找从机

4.应答是低电平

传输的各种状态:

空闲状态:SDA和SDL均处于高电平

启动:SDL处于高电平时,SDA拉低(这是一个动态过程),所有从机立刻激活

结束:SDL处于高电平,SDA拉高(这是一个动态过程)

传输过程:在SDL高电平时,SDA维持稳定,在SDL低电平时,SDA发生变化

应答(ACK):拉低SDA线,并在SCL为高电平期间保持SDA线为低电平
非应答(NOACK):不要拉低SDA线(此时SDA线为高电平),并在SCL为高电平期间保持SDA线为高电平

通讯步骤:

读:(每步最后自动补应答)

主机启动--->找从机(写)--->写内存地址---->再次启动-->找从机(读)--->从机发送,主机应答

--->知道主机不应答--->主机停止

 

写:

主机启动--->找从机(写)--->写内存地址---->写数据---->主机停止,连续写和单字节写是一样

通信时序:  I2C是同步通讯,每步结束都需要应答或者非应答

A.启动

SDL处于高电平,SDA拉低,所有从机即使处于睡眠模式也将变为活动状态,并等待接收地址位

B.

只要主机按规矩来,从机就自动知道怎么做,真是好小弟

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值