I2C通信协议

I2C(Inter-Integrated Circuit)由飞利浦公司在20世纪80年代初开发,是一种用于集成电路间通信的串行总线。它支持多主从、双向、半双工通信,广泛应用于嵌入式系统中,如传感器接口、显示控制等。

基础知识

1. 总线结构

两条线:SDA(数据线)和SCL(时钟线)。

上拉电阻:通常在1kΩ到10kΩ之间,确保总线在空闲时保持高电平。

2. 数据传输

同步通信:SCL线提供时钟信号,数据在SDA线上传输。

位和字节传输:数据以8位字节为单位传输,每个字节后跟一个ACK位。

3. 操作时序

START条件:SDA在SCL为高电平时从高变低。

STOP条件:SDA在SCL为高电平时从低变高。

ACK/NACK:用于确认字节传输成功或结束。

模式和速度

标准模式:100 kbps

快速模式:400 kbps

快速模式+:1 Mbps

高速模式:3.4 Mbps

超高速模式:5 Mbps(部分设备支持)

读写操作

写操作

比如:向0x20设备的0x1234寄存器写入0x5678:

  1. 设备地址和写命令:0100 0000(发送)
  2. 寄存器地址(高字节0x12,低字节0x34):0001 0010,0011 0100
  3. 数据(高字节0x56,低字节0x78):0101 0110,0111 1000
  4. 信号序列:[START] 0100 0000 [ACK] 0001 0010 [ACK] 0011 0100 [ACK] 0101 0110 [ACK] 0111 1000 [ACK] [STOP]

读操作

从0x20设备的0x0E寄存器读取数据:

  1. 设置寄存器地址:[START] 0100 0000 [ACK] 0000 0000 [ACK] 0000 1110 [ACK]
  2. 重复START和读命令:[RESTART] 0100 0001 (接收)[ACK]
  3. 接收数据:[DATA] [ACK] [DATA] [NACK] [STOP]
  4. 信号序列就是:[START] 0100 0000 [ACK] 0000 0000 [ACK] 0000 1110 [ACK][RESTART] 0100 0001 [ACK][DATA] [ACK] [DATA] [NACK] [STOP]

特殊功能

时钟拉伸:从设备可将SCL拉低以请求更多处理时间。

广播地址:0x00,所有设备均会响应。

重复START条件:无需释放总线即可进行新的传输。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值