当前位置: 首页 > news >正文

【I3C路书-2】动态地址分配波形

Talk is cheap. 我们直接来看一下 I3C Controller 如何实现动态地址分配。

图中C2: SCL, C3: SDA

看起来着实有点抽象,我们先用简图理解一下动态地址分配都需要经过哪些步骤,再结合实测波形逐个击破。

  1. 广播:“Pay attention please,Controller要说话了,各单位注意接听”。

  2. RSTDAA:“现在大家的户口都注销了,一夜回到解放前了哈。”

  3. ENTDAA:“现在Controller会重新给大家分发身份,先到先得哈。”

  4. Target:“我我我,我有一个梦想。”

  5. Controller:“要得,你就叫007吧。”

  6. Target:“Good,我喜欢这个名字,以后我就叫007了。”

  7. Controller:“还有其他牛马么?没人说话?ok,那就酱了,散会。”

PS: 如果不RSTDAA,已有动态地址的设备将不再响应ENTDAA,只为新加入的设备分配地址。

以上就实现了动态地址的分配,接下来只需要像I2C那样用刚才分配到的地址来读写数据就可以了。ok,我们按顺序来看一看。

“广播地址”:0b1111110即0x7E, 这里的地址与I2C一样,仅有七位;

“写”:第8位是“读/写”功能位。0代表写,1代表读。这个很好记忆,0=Output, 1=Input。

“ACK”:第9位代表“ACK/NACK”位,用来表示从机是否响应。

“CCC:0x06”: 0x06对应的是RSTDAA(Reset Dynamic Address Assignment) 复位/清除 已有的动态地址。

“校验位”:这里既不是“读/写”位,也不是“ACK”位,而是I3C新引入的校验机制,采用的是奇校验,即:

数据中1的个数为偶数,校验位写1

数据中1的个数为奇数,校验位写0

如果简洁一点描述:

校验位=XOR(Data[7:0], 1)

还是不好理解?那看通俗版:

奇校验=用 校验位 来凑奇数个1

比如上面的0x06=0b00000110 里面有偶数个1,就需要校验位的1来凑奇数。举一反一,如果CCC是0x07=0b00000111,就不需要校验位来凑奇数个1,因此校验位就是0了。

为什么上面又写了0x7E? 因为写了CCC:0x06后,从机是不会有响应的,所以这里直接写下一个CCC:0x07就是了。——对,写CCC前就需要先写广播指令:0x7E, pay attention please. 然后紧跟一个校验位0,上面已经详细说明了。

0x07: 即ENTDAA。(Enter Dynamic Address Assignment)

前面我们复位了总线上的所有动态地址,现在我们开始重新分配动态地址,这很好理解,对吧。紧接着再写一次 0x7E, 从机们就可以凭本事来获取动态地址了。某一个从机反应最快,率先拉低了SDA,获得优先分配权。不过大家也不能一直等,因此该从机以最快速度发出自己的PID,以进行下一步流程。

主机接收到从机发来的PID信息后,就根据自己的分配策略,将地址list中的0x0D分配给了从机。从机拉低SDA回ACK,表明接受地址。紧接着,主机又发送了0x7E,企图给其他从机分配地址,可是并没有响应,事实上这里我们只挂载了一个从机。既然没其他从机了,主机发送Stop结束了动态地址分配的流程。下面是Specification for I3C BasicSM 中的说明:

ok,有了实测波形,对照着SPEC,理解起来棒棒哒!

注:本文内容基于个人理解整理,如有疏漏或错误之处,欢迎在评论区留言指正,共同探讨 I3C 的技术细节。

公粽号:HardwareABC

http://www.cnnetsun.cn/news/1386899.html

相关文章:

  • 万恶的苹果税,降了
  • SCMA稀疏码多址技术:从原理到5G应用实践
  • Kali+Windows双系统实战:手把手教你用CobaltStrike生成免杀后门(附Python简易HTTP服务搭建)
  • 基于yz-bijini-cosplay的智能合约开发:Solidity编程指南
  • c语言知识总结(3.控制结构)
  • C++ 实战:STL List 容器自定义排序深度解析
  • 从ViLT看多模态大模型进化:为什么说Transformer正在吃掉视觉领域?
  • AS32-TTL-100 LoRa模块嵌入式透传集成指南
  • Quartus II 13.0 实战:3种方法实现D触发器仿真(原理图+Verilog+ModelSim对比)
  • 热式(不可充电)电池市场洞察:2026 - 2032年复合增长率(CAGR)为10.1%
  • SNP芯片分型实战解析:从信号强度到GenomeStudio可视化
  • 计算机毕业设计springboot营养搭配家庭烹饪网站 基于SpringBoot的家庭膳食营养管理平台 SpringBoot智能家常菜谱推荐与营养分析系统
  • MySQL触发器实战:从语法解析到学生选课系统应用
  • 深度解析:攻击者常用 8 种防火墙绕过手法,原理 + 实战全公开
  • 永磁同步模型电流预测控制及滑模控制器结合新趋近律算法文献解读与探究
  • 收藏!IT后端转型AI大模型:多少程序员正在抓住新赛道?
  • Hello-Agents阅读笔记--基础篇--智能体的构成和运行原理
  • Keil5调试实战:从原理到高效问题定位的工程化指南
  • 项目解决方案:AI智能分析在无人机方面的应用方案
  • 信捷XDH Ethercat A_WRITE指令全解析:从参数配置到状态监控(保姆级教程)
  • 跨版本数据库连接困境:用pyodbc统一访问PG、opengauss与gaussdb
  • 摒弃有害厨具,京尚黑科技陶瓷锅,开启高端健康烹饪时代
  • 笔记本电脑外接显示器偶尔不亮
  • 搞懂SMART 200与宇电温控器的Modbus实战
  • 3分钟掌握RePKG:Wallpaper Engine资源提取与转换的终极解决方案
  • Qwen3-32B-Chat开源模型对比评测:Llama3-70B/Qwen3-32B/DeepSeek-V3推理效率PK
  • AFSim 2.9中文参考手册隐藏技巧大揭秘:提升效率的5个冷门功能
  • Qt 线程
  • 探索 Awesome GPT Agents:解锁AI助手在网络安全领域的无限可能
  • 探索Pandas-TA:技术分析图表库,助力金融数据分析