初识I2C

image-20240717090806935

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

Important

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

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

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

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

Important

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

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

信号起始\停止

image-20240717093017839

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

起始

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

终止

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

中间过程

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

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

数据的实际传输

image-20240717100345681

是一种 串行传输

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

高位优先

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

image-20240717100129628

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

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

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

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

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

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

image-20240717104755015

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

树莓派I2C开发

image-20240717105446195

树莓派4B上一共有3个I2C接口,也就是有3个I2C总线

BSC2:0x7E80_5000一般为内部使用,我们一般不会用

在手册上,I2C叫做BSC

上面图中的8个引脚可以进行I2C,2个一组,都是配置好的

Important

上面所说的引脚都是内部引脚,也就是我们在驱动上进行开发的引脚

寄存器

在硬件上进行开发,主要是进行对寄存器的开发。一共有8个寄存器

image-20240717110304374

转载请注明出处