I2C通信

我觉得不是重点。看一遍就行。

什么是I2C

I2C(Inter Integrated Circuit),双向二线制串行总线协议。它只要两根线:SCLSDA。显然,它的优点就是节约资源:只要两个IO口就行了。此外,它的协议也很轻量,便于移植。

缺点也很明显:传输速度较慢——至少比SPI慢得多。

和SPI相比呢?

I2C

  • 优点:
    • 简单性:I2C总线结构相对简单,使用两根信号线(SDA和SCL)进行通信。
    • 多主设备:I2C支持多主设备,允许多个设备在同一总线上通信。
    • 地址方案:每个I2C设备都有唯一的七位设备地址,便于识别。
    • 适合短距离通信:I2C在短距离通信和连接多个设备时表现良好。
  • 劣势:
    • 速度较慢:最快的I2C速度仅为1 Mbps,通常为400 Kbps。
    • 不适合长距离传输:I2C不适合长距离传输,因为信号衰减和干扰可能成为问题。

SPI

  • 优点:
    • 高速传输:SPI通信速度快,适用于高速数据传输场景。
    • 灵活性:SPI通信相对灵活,适用于不同类型的设备。
    • 稳定性:SPI通信稳定,对时序要求较高。
  • 劣势:
    • 复杂性:SPI通信需要建立连接,协议较复杂。
    • 占用引脚多:SPI需要多根引脚,相对于I2C占用更多CPU端口。
    • 不适合长距离传输:与I2C一样,SPI也不适合长距离传输。
题外话

我玩的墨水屏全都是SPI通讯协议的,但是OLED屏幕却是I2C。可能因为墨水屏更复杂点:LUT、刷新波形啥的。

协议实现

只有在总线处于“非忙”状态时,数据传输才能开始。在数据传输期间,只要SCL时钟线为高电平,数据线都必须保持稳定,否则数据线上的任何变化都被当作“启动”或“停止”信号

  • SCL高电平,SDA下降沿:启动传输
  • SCL高电平,SDA上升沿:关闭传输

EEPROM

很难想得到这东西究竟该怎么考。我倾向于不考,所以根本不复习。考RISC-V的概率都比这玩意大。