N15 I²C(串行通信总线)
一、多路IO
红黑树(Red-Black Tree)是一种自平衡二叉搜索树(BST),通过5 条颜色性质将树高控制在O(log n)量级,保证查找、插入、删除的时间复杂度稳定为O(log n)。相比 AVL 树,它平衡要求更宽松,插入 / 删除时旋转次数更少。
(内核链表核心)
内核
list_head链表节点只存前后指针,不包含业务数据。要通过链表节点指针找回整个结构体指针
- 已知
s2.list是struct stu里的list成员指针- 用
&s1.list - &s1 = 24得到偏移量- 那么
(struct stu *)((char *)&s2.list - 24)就能得到&s2,即从链表节点指针反推出父结构体指针
二、I²C:串行通信总线
| 特性 | 开漏输出 (Open-Drain) | 推挽输出 (Push-Pull) |
|---|---|---|
| 输出结构 | 仅 N-MOS 下拉 | N-MOS 下拉 + P-MOS 上拉 |
| 高电平 | 需外部上拉电阻 | 内部 P-MOS 主动拉高 |
| 低电平 | 内部 N-MOS 主动拉低 | 内部 N-MOS 主动拉低 |
| 高阻态 | MOS 管关断时为高阻 | 无高阻态(始终输出高 / 低) |
| 总线共享 | 支持 “线与”,多设备并联安全 | 不支持,易短路冲突 |
| 电平兼容 | 可通过上拉电源实现电平转换 | 电平固定为 GPIO 电源电压 |
空闲时总线保持高电平
- SCL(Serial Clock):串行时钟线,由主机驱动,同步所有设备的通信节奏。
- SDA(Serial Data):串行数据线,双向传输数据与地址,采用开漏输出设计,支持多设备共享。
不需要像UART那样通信时接地,一般情况已经共地了
ACK/NACK 的完整机制
I²C 通信中,发送方在每发送完 8 位数据后,会主动检测第 9 位的 ACK/NCK 信号;接收方则在第 9 个时钟周期驱动 SDA 来发出应答。
时序:空闲时总线保持高电平
起始信号:SCL为高时,SDA由高到低
数据发送期间:SCL为低时,SDA可以跳变,SCL为高时,SDA保持不变(每次传输以8bit为
基本单位)
数据发送完成后,由接收方发出应答信号(1bit的低电平),如果没有应答,通信强制停止。
停止信号:SCL为高时,SDA由低到高。
1.通信只能由主机发起。
2.时钟线永远由主机控制。
3.数据线传输数据时由发送方控制,应答信号由接收方控制
------主机写数据控制数据位,从机控制应答
------主机读从机控制数据位,主机控制应答
4.主机第一次发送的数据永远是7位从机地址+1位的读写标志(0写 1读)。
IIC典型时钟频率:100K ; 400K ;3.4M (指的上限)
