初始I2C

初识I2C

image-20240717090806935

SCL是时钟线,SDA是数据线。在总线空闲状态的时候,这两根线一般为上拉电阻拉高,保持高电平

I2C总线上的设备存在主(Master)/从(Slave)之分。

同时每一个设备既可以当作主设备也可以是从设备

每个设备都必须对应一个唯一的地址

意味着可以存在多个主设备,但是同时工作的只能有一个

I2C是通过地址来区分不同的设备的

I2C的通信方式为半双工的方式,因为只有一跟SDA线,所以同一时间只可以实现单向通信

信号起始\停止

image-20240717093017839

默认状态下SDA和SCL都是高电平保持

起始

当某一设备开始触发的时候,SDA会进行降压处理(下降沿触发),SCL高电平保持,代表当前设备传输开始

终止

SCL为高电平保持,SDA为上升沿触发的时候,判断为传输停止

中间过程

起始条件产生之后,总线位于忙状态,由负责本次数据传输的主从设备独占,其他I2C器件无法访问总线。

而在停止条件产生之后,本次数据传输的主从设备将释放总线,总线再次位于空闲状态。

数据的实际传输

image-20240717100345681
  • 设备间是 按照SCL线上的每个时钟脉冲周期 为单位 在SDA线上 以 bit 传输数据

是一种 串行传输

数据传输以字节(8个bit一组)为单位,高位优先发送

高位优先

比如要发送0x11,转换为二进制为00010001,高位低位如下图所示

image-20240717100129628

高位优先传输数据从示波器上采样之后看到的第一个数据为高位。

同时,在设计上是区分为发送方和接收方,并且在协议上要求握手。

  • 发送方传输完一个字节之后,接收方拉低SDA线,在总线上产生一个 bit 的ACK信号,表示正确应答,此时才认为一个字节真正的完成传输。如果接收方不执行拉低SDA线的操作,则总线上产生的是一个 bit 的NACK信号,则表示接收方返回错误或者无响应

  • 主设备在发送传输有效数据之前要先指定从设备的地址,大多数从设备的地址是7位的,协议规定再给地址添加一个最低位用来表示接下来数据传输的方向

0表示主设备向从设备数据

1表示主设备向从设备数据

发起的第一个单元标识**地址 **

下面这个图是一个完整的粒子:

image-20240717104755015
  1. 由主机开始,在SCL位高点平的时候,SDA由高到低切边,形成开始信号
  2. 接着是7位地址位和1位读写标志,这里7位地址表示0111100,即0x3c;最后一位为0表示写操作。
  3. 接着在下一个时钟,主机以高电平状态释放SDA;这时从机相应,将SDA拉低表示ACK;
  4. 接着是两个8位数据00101110与响应,即0x2E
  5. 其他的数据和最后的停止位,图中未显示。

暂时更新这么多,如果感觉帮助到了你,我很开心o( ̄▽ ̄)ブ

posted @ 2024-07-17 15:32  OlderV  阅读(33)  评论(0编辑  收藏  举报