Hi @Harry_Zhang
I3C的CCC command SETXTIME有设置进入 Async Mode 0的命令,
我看到在MCXN的spec里I3C slave有进入Async Mode 0的寄存器设置SSTATUS的bit31-30 TIMECTRL
I3C master是怎么设置的,有sample code可以参考吗?
BR
Yvan
Hi @yvan_yan
SETXTIME (0x28h) 是 CCC 广播命令,用来设置 Target (Slave) 的 Time Control mode。
这个命令允许主机(I3C Controller)要求所有 Target 进入 Synchronous mode 或 Asynchronous mode (0/1)。
请问您是需要I3C master 发送0x28的广播命令的代码么?
BR
Harry
Hi @Harry_Zhang
是的
Target (Slave) 进入 Asynchronous mode 0后,Target 会发送IBI,I3C Controller会根据这个IBI的数据进行计算,这部分是硬件还是软件实现,有相关代码可以参考吗?
BR
Yvan
Hi @yvan_yan
“I3C Controller会根据这个IBI的数据进行计算,这部分是硬件还是软件实现?”
您好,我查了一下RM手册。
这部分是需要通过软件实现的。相关寄存器为STCCLOCK
Controller 必须用 STCCLOCK(由 Target 提供或在配置时告知)来做换算。
寄存器 STCCLOCK 提供:
FREQ:时钟频率
ACCURACY:时钟精度
Controller 用这两个参数就能把 Target 报告的 tick 转换为实际时间(ns/µs/ms)。
“有相关代码可以参考吗?”
很抱歉,目前没有相关demo,并且i3c driver也没有相关API,实现相关功能只能结合SDK demo配置相关寄存器。
BR
Harry
Hi @Harry_Zhang
进入Asynchronous mode 0模式后,I3C Controller 除了需要通过IBI payload获得Target 的数据外,还需要知道C_REF(IBI ACK)和C_C2(IBI MD Byte后T-Bit) I3C Controller的timestamp,这两个点应该怎么获得?
• C_REF: First SCL positive-going edge after the IBI ACK
• C_C2: First SCL positive-going edge after the T-Bit of the IBI’s Mandatory Byte
BR
Yvan
Hi @yvan_yan
您好,我看了一下Specification for I3C Basic
Timing Control
CREF是在ACK后面,C_C2是在MDB T bit后面。
我们可以使用软件中断来启动计时器进行计数,然后计算目标传感器采样发生的时间。
但是I3C的寄存器只支持在IBI 的ACK中有相关中断,但是T bit没有中断。
所以可以C_C2可以通过C_REF计算,通过IBI ACK的中断后计时加上 9*1/pushpull Baud rate。
BR
Harry
好的 谢谢