STM32 I2C通讯协议


I2C概念

Inter-Intergrated Circuit

一种低速稳定的通讯,特点:

  1. 双向两线,硬件更简单
  2. 同步串行半双工
  3. 一般速度未400kbit/s,和UART串口速度差不多

和UART的区别:I2C是半双工,且是同步的,而UART是异步,全双工的

物理层

在这里插入图片描述

  1. 主设备控制时钟
  2. 总线默认上拉

协议层

在这里插入图片描述
高位先行
起始信号:SCL为高电平时,SDA拉低,停止信号类似。

在这里插入图片描述
开始传输时,第一件事是通过从设备的地址 SLAVE_ADDRESS 找从设备。
LSB是传输方向位(从主机角度看),高电平向从机读,低电平向从设备写。
注意:这一位是第8位而不是第1位。
MSB是地址位,7位的话可以表示128个设备。

在这里插入图片描述
读取:只在SCL为高电平时读取SDA,其他时间SDA改变数据。

在这里插入图片描述
前两个线,发送方和接收方对SDA的行为。
第三个线就是主设备的时钟线。

  1. 一方拉低SDA后,在每个SCL高电平时传输了7位另一方的地址和1位传输方向后,拉高数据线。
  2. 另一方拉低一个SDA周期做响应(NCK),或保持高电平不响应(NACK)。

M24C02 EEPROM 芯片

  1. 256 bytes大小的EEPROM,支持100kHz和400kHz的I2C协议读写。
  2. 16个bytes为一页。
  3. 256 个字节一共需要8位地址,恰好有16页,其高四位是页地址,低四位是页内地址。
  4. 芯片地址高4位固定为1010,低3位由3个引脚电平控制。

写入字节时序

在这里插入图片描述

读出一个字节时序

在这里插入图片描述
因为数据传输位 为读时是高电平,即发送方表达要对从从设备读时,就将总线SDA的所有权让了出去,这时还没有表明要读的寄存器的地址。而EEPROM中有一个地址计数器,每次读取默认从上一次读的位置。因此,要实现对特定地址的读取,可以使用假写真读的策略,如上图所示。
假写的功能就是将地址计数器的存放的地址改成为指定的地址。
因为只收一个字符,传输后直接不应答。
EE2PROM没收到ack就发送一个stop。

单次写多个字节时序

在这里插入图片描述
对于使用的芯片,一次最多只能写一页,也就是16个字节,如果超过16个,EEPROM会覆盖本页。

单词读出多个字节

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值