接口是小,忘性也大
上面是网上找的图片
归纳一下有几个要素
- 开始发送段 —— START标志 + 地址 + RW + ACK
- RW标识 —— 影响开始发送段的R/W,以及后续DATA是读是写
- 数据段 —— 根据RW,做数据的读写
- ACK标识 —— 影响开始发送段和数据段的ACK/NACK
对应几个寄存器域段
-
ADDR_EN (start)
-
RW
-
DATA
- 写数据直接写在寄存器中
- 读数据时,配置寄存器只是让接口去取数据
- 需要再读寄存器一把,获得数据
-
ACK
-
以上可以组装出所有的I2C波形,时序参数此处这里不讨论
Q&A
-
为什么读的最后一笔需要NACK?
- 需要告诉slave后面不需要发了,释放sda,让master拉起stop
-
RESTART是什么?
- 实际器件经常会看到——S- slave_addr - W - register_addr - ACK - register_addr - ACK - restart - slave_addr - R - read_data - ACK- read_data - NACK- stop 的时序
此时register_addr可以当做数据来看待,restart可以当成另一笔命令(新的start) - 可能有超时机制,restart不能离上一笔命令太久
- 实际器件经常会看到——S- slave_addr - W - register_addr - ACK - register_addr - ACK - restart - slave_addr - R - read_data - ACK- read_data - NACK- stop 的时序
参考
https://www.wangchaochao.top/
官方标准文档下载
目前网上比较详细的介绍I2C文档主要有以下3个:
-
I2C官方标准文档_UM10204
I2C的官方文档是原飞利浦(Philips)半导体事业部,现恩智浦(NXP)半导体发布的UM10204文档,全文共64页,是目前最权威最详细的I2C协议介绍文章,最新版本Rev. 6发布于20140404,UM10204_4 April 2014: I2C-bus specification and user manual_Rev.6 -
TI:理解I2C文档_SLVA704
TI在2015年发布了一篇SLVA704文档, 全文共8页,精简的概括了I2C协议的电气特性,操作时序,读写时序等,比较适合I2C入门学习。 -
ZLG:I2C总线规范中文版
这篇文档发布于2000年左右,是对飞利浦官方文档UM10204_v2.1的翻译。