N15 I²C(串行通信总线)

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 电源电压空闲时总线保持高电平SCLSerial Clock串行时钟线由主机驱动同步所有设备的通信节奏。SDASerial 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 指的上限