I2C串行总线协议实现与代码整理
I2C 协议的底层实现代码整理得还挺全,基础讲清楚了,代码也不绕。像iic_send_byte
和iic_rcv_byte
这种函数细节都到位,适合对硬件控制感兴趣的朋友深入一下。整体风格偏实用派,没有花哨解释,但讲明白了起始信号、终止信号、ACK/NACK 的实现逻辑,配合 GPIO 控制思路,还挺有参考价值的。
I2C 通信的起始信号就是主控在 SCL 还没拉低时先把 SDA 从高拉到低,这个节点关键,错了就握不了手。终止信号反着来,先把 SDA 拉高再收掉 SCL。
写数据靠iic_send_byte
,读数据靠iic_rcv_byte
,每个字节传完都得接个 ACK,不然主控不知道你到底有没有收到。用iic_noack
表示 NACK,也方便,尤其你只想读一次的时候。
代码结构还是那套老套路:位操作控制SDA
和SCL
,外加定时函数保节奏。适合搞裸机开发或者要精细控制时序的场景,比如用在 STM32 上连接温湿度传感器、EEPROM 啥的。
要是你正折腾 I2C 底层,或者想搞懂库函数底下到底干了啥,这份资料值得看看。另外下面这几个链接也可以顺带翻翻:
如果你想自己撸一套I2C
驱动,建议先看一遍这个整理,再照着写几遍,基本就能摸清里面的门道了。
下载地址
用户评论