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

一、多路IO

红黑树(Red-Black Tree)是一种自平衡二叉搜索树(BST) ,通过5 条颜色性质 将树高控制在 O(log n) 量级,保证查找、插入、删除的时间复杂度稳定为 O(log n) 。相比 AVL 树,它平衡要求更宽松 ,插入 / 删除时旋转次数更少。

(内核链表核心)

内核list_head链表节点只存前后指针,不包含业务数据。要通过链表节点指针找回整个结构体指针

  • 已知 s2.liststruct stu里的list成员指针
  • &s1.list - &s1 = 24 得到偏移量
  • 那么 (struct stu *)((char *)&s2.list - 24) 就能得到 &s2,即从链表节点指针反推出父结构体指针

二、I²C:串行通信总线

cs 复制代码
        IOMUXC_SetPinMux(IOMUXC_UART4_RX_DATA_I2C1_SDA, 1);
        IOMUXC_SetPinMux(IOMUXC_UART4_TX_DATA_I2C1_SCL, 1);
        IOMUXC_SetPinConfig(IOMUXC_UART4_RX_DATA_I2C1_SDA, 0x98b0);
        IOMUXC_SetPinConfig(IOMUXC_UART4_TX_DATA_I2C1_SCL, 0x98b0);
  • 你把 SDA 设为输入 / 释放后,GPIO_DR 里的值永远是 1(你写的),完全反映不了从机拉低的 0 电平
  • 只有 GPIO_PSR实时采样引脚的物理电压
    • 从机拉低 SDA → PSR 读到 0
    • 从机释放 SDA → PSR 读到 1
特性 开漏输出 (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 (指的上限)

IIC从机访问:

向从机写数据:

1.向总线发送从机地址+写标志

2.向总线发送从机内寄存器地址(从机内寄存器首地址)

3.向总线发送需要写入的数据(可以循环写入多个数据,该地址为从机接收数据后存储的地址)

4.通信结束

向从机读取数据:

1.向总线发送从机地址+写标志

2.向总线发送从机内寄存器地址(从机内寄存器首地址,该地址为从机向主机发送数据的地址)

3.主机重新发起通信,向总线写从机地址+读标志

4.主机读取数据(可循环读取)----最后一个字节接收完成后应该发送一个NCK信号

5.通信停止

必须先等待stop信号,然后读数据。

需要先产生stop信号再读数据,如果先goto的话读不到最后一个字节。

相关推荐
松小白song4 小时前
PID详解+Matlab实现
开发语言·数据结构·matlab
B1acktion4 小时前
2.3.插入排序——像打牌一样整理数组,为什么它对“几乎有序”数据特别友好?
数据结构·算法·排序算法
ComputerInBook4 小时前
OpenCV 基本数据结构
数据结构·opencv
迈巴赫车主4 小时前
蓝桥杯 19717 挖矿java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
丶小鱼丶5 小时前
数据结构和算法之【阻塞队列】下篇
java·数据结构
wangchunting5 小时前
数据结构-图
数据结构·算法
6Hzlia5 小时前
【Hot 100 刷题计划】 LeetCode 239. 滑动窗口最大值 | C++ 优先队列与单调队列双解法
数据结构·算法·leetcode
袋鼠云数栈15 小时前
集团数字化统战实战:统一数据门户与全业态监管体系构建
大数据·数据结构·人工智能·多模态
小月球~15 小时前
天梯赛 · 并查集
数据结构·算法