【I3C路书-2】动态地址分配波形
Talk is cheap. 我们直接来看一下 I3C Controller 如何实现动态地址分配。图中C2: SCL, C3: SDA看起来着实有点抽象我们先用简图理解一下动态地址分配都需要经过哪些步骤再结合实测波形逐个击破。广播“Pay attention pleaseController要说话了各单位注意接听”。RSTDAA“现在大家的户口都注销了一夜回到解放前了哈。”ENTDAA“现在Controller会重新给大家分发身份先到先得哈。”Target“我我我我有一个梦想。”Controller“要得你就叫007吧。”Target“Good我喜欢这个名字以后我就叫007了。”Controller“还有其他牛马么没人说话ok那就酱了散会。”PS: 如果不RSTDAA已有动态地址的设备将不再响应ENTDAA只为新加入的设备分配地址。以上就实现了动态地址的分配接下来只需要像I2C那样用刚才分配到的地址来读写数据就可以了。ok我们按顺序来看一看。“广播地址”0b1111110即0x7E, 这里的地址与I2C一样仅有七位“写”第8位是“读/写”功能位。0代表写1代表读。这个很好记忆0Output, 1Input。“ACK”第9位代表“ACK/NACK”位用来表示从机是否响应。“CCC:0x06”: 0x06对应的是RSTDAA(Reset Dynamic Address Assignment) 复位/清除 已有的动态地址。“校验位”这里既不是“读/写”位也不是“ACK”位而是I3C新引入的校验机制采用的是奇校验即:数据中1的个数为偶数校验位写1数据中1的个数为奇数校验位写0如果简洁一点描述校验位XOR(Data[7:0], 1)还是不好理解那看通俗版奇校验用 校验位 来凑奇数个1比如上面的0x060b00000110 里面有偶数个1就需要校验位的1来凑奇数。举一反一如果CCC是0x070b00000111就不需要校验位来凑奇数个1因此校验位就是0了。为什么上面又写了0x7E? 因为写了CCC:0x06后从机是不会有响应的所以这里直接写下一个CCC0x07就是了。——对写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.coloradmin.cn/o/2430664.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!