AD2428W手册解读之响应周期的公式
A2B_RESPCYCS寄存器用于设置从控制帧(SCF)开始到最后一个slave响应响应帧(SRF)的相对时间。寄存器设置定义了A2B网络中较早的节点在超帧的上游部分何时应该期望来自最后一个从节点的响应。如果最后一个节点没有响应,则在假定的最后一个节点之前的节点会响应。以下部分提供了关于如何对主节点和从节点A2B_RESPCYCS寄存器进行编程的信息。
1、配置主节点响应周期
主节点响应周期示意图描述了主响应周期值是如何确定的。
主节点响应周期示意图
在主节点响应周期图中:
1、主最小响应周期计数由下游数据的长度、最小总线周转时间和从节点的数量决定。
2、主最大响应周期计数由上游数据的长度和主响应周期偏移量决定。
3、主响应周期偏移确保从接收缓冲区的最后一个上游数据位到I2S/TDM数据输出点有足
够的内部处理时间(tIP),输出点开始同步到下一个SCF和SYNC引脚过渡。A2B主节点响应偏移(RESPOFFS)表定义了这个恒定的主响应周期偏移,它是A2B主节点的TDM模式
(A2B_I2SGCFG.TDMMODE)的一个函数。和I2S/TDM通道大小(A2B_I2SGCFG.TDMSS)。
A2B主节点响应偏移(RESPOFFS)
编写主节点A2B_RESPCYCS寄存器是上述主响应周期偏移(RESPOFFS)的函数,以及:
1、系统中从节点的数量。
2、在每个从属器(NUM_DNSLOTS)上从a端口接收的下游A2B总线数据槽的数量。
3、下游A2B总线数据槽的宽度(DNSLOT_SIZE)。
4、每个slave驱动到A-PORT的上游A2B总线数据槽的个数(NUM_UPSLOTS),以及上
游A2B总线数据槽的宽度(UPSLOT_SIZE)。
在系统中的任何给定节点上可能发生的上时隙和下时隙活动是第一个影响因素,确定必须编程到主节点A2B_RESPCYCS寄存器中的值。对于每个从节点n在A2B拓扑中,以下等式定义了下游(DNSLOT_ACTIVITY[n])和该节点的上游(UPSLOT_ACTIVITY[n])活动。
DNSLOT_ACTIVITY[n] = NUM_DNSLOTS * (DNSLOT_SIZE + 1) UPSLOT_ACTIVITY[n] = NUM_UPSLOTS * (UPSLOT_SIZE + 1)
注意:DNSLOT_SIZE和UPSLOT_SIZE槽位大小在上述计算中偏移1,因为默认槽位格式
(A2B_SLOTFMT)在A2B总线上的每个数据槽附加一个奇偶校验位,因此每个槽位在A2B
总线上增加1位。对于备用槽位格式,必须添加为所选用例附加的位数,而不是这里定义
的1,如A2B槽位格式表中的A2B总线位列所示。
一旦建立了每个从节点n的上时隙和下时隙活动,就可以计算每个从节点n的等效上游 (RE-SPCYCS_UP[n])和下游(RESPCYCS_DN[n])响应周期需求从属节点,由以下等式控制。
RESPCYCS_DN[n] = ((64 + DNSLOT_ACTIVITY[n])/4) + 4n + 2 // Round Up RESPCYCS_UP[n] = RESPOFFS - (((64 + UPSLOT_ACTIVITY[n])/4) + 1) // Round Up
1、RESPCYCS_DN[n]是考虑到从节点n的下游活动,主节点可能的最小响应周期寄存
器设置。其中RESPCYCS_DN[n]计算的最大值是最小主节点A2B_RESPCYCS设置
(MAX(RESPCYCS_DN[n]))。
2、其中,RESPCYCS_UP[n]是考虑到从节点n的上游活动,主节点可能的最大响应周期
寄存器设置。其中,RESPCYCS_UP[n]计算的最小值是主节点最大A2B_RESPCYCS设置
(MIN(RESPCYCS_UP[n]))。
注意:如果MAX(RESPCYCS_DN[n]) > MIN(RESPCYCS_UP[n]),则A2B总线带宽不能
容纳该配置。
必须编程到主节点的A2B_RESPCYCS寄存器中的值是这些最小值和最大值的平均值:
A2B_RESPCYCS = (MAX(RESPCYCS_DN[n]) + MIN(RESPCYCS_UP[n])) / 2 // Round Down
2、主A2B_RESPCYCS计算示例
具有三个节点(主节点和两个从节点(从0和从1))的系统配置如所示三节点A2B系统示例图:
三节点A2B系统示例图
对于超帧的下游部分:
1、主节点(32位TDM8模式下配置):发送14个槽位,槽位大小为24位。
2、Slave 0:消耗主节点的6个槽位,将剩下的8个槽位传给Slave 1,然后为下行流量贡
献8个额外的槽位(从Slave 0发送到Slave 1的16个槽位)。
3、Slave 1:消耗从0产生的所有16个槽位
对于超帧的上游部分:
1、Slave 1:发送10个槽位,槽位大小为16位。
2、Slave 0:消耗Slave -1的6个槽位,将剩下的4个槽位传递给主节点,然后为上游流量贡献8个额外的槽位(从Slave 0发送给主节点的槽位共12个)。
3、主节点(配置为32位TDM8模式):消耗所有从节点0的12个槽位。
响应周期通过以下步骤确定:
1、计算每个从属节点的上时隙和下时隙活动。
DNSLOT_ACTIVITY[n] = NUM_DNSLOTS * (DNSLOT_SIZE + 1) DNSLOT_ACTIVITY[0] = 14 * (24 + 1) = 350 DNSLOT_ACTIVITY[1] = 16 * (24 + 1) = 400 UPSLOT_ACTIVITY[n] = NUM_UPSLOTS * (UPSLOT_SIZE + 1) UPSLOT_ACTIVITY[0] = 12 * (16 + 1) = 204 UPSLOT_ACTIVITY[1] = 10 * (16 + 1) = 170
2、有了这些信息,计算每个从属机的响应周期需求。从A2B主节点响应偏移
(RESPOFFS)表中,TDM8模式和32位数据组合得到RESPOFFS = 248。
RESPCYCS_DN[n] = ((64 + DNSLOT_ACTIVITY[n])/4) + 4n + 2 // Round Up RESPCYCS_DN[0] = ((64 + 350)/4) + (4*0) + 2 = 103.5 + 0 + 2 = 105.5 = 106 RESPCYCS_DN[1] = ((64 + 400)/4) + (4*1) + 2 = 116.0 + 4 + 2 = 122.0 = 122 RESPCYCS_UP[n] = RESPOFFS - (((64 + UPSLOT_ACTIVITY[n])/4) + 1) // Round Up RESPCYCS_UP[0] = 248 - (((64 + 204)/4) + 1) = 248 - (67.0 + 1) = 180.0 = 180 RESPCYCS_UP[1] = 248 - (((64 + 170)/4) + 1) = 248 - (58.5 + 1) = 188.5 = 189
最小主节点A2B_RESPCYCS设置为RESPCYCS_DN[n]计算中的最大值,为122,
最大设置为RESPCYCS_UP[n]计算中的最小值,为180,最小值和最大值的平均值为:
(MAX(RESPCYCS_DN[n]) + MIN(RESPCYCS_UP[n])) / 2 // Round Down (122 + 180) / 2 = 302 / 2 = 151.0 = 151
3、配置从节点响应周期
在系统发现过程中,每个从节点都设置了自己的A2B_RESPCYCS寄存器。主收发器程序其A2B_DISCVRY寄存器与它试图发现的从收发器相关联的响应周期值。每个从节点(SLV_RESPCYCS[n])的适当值是由从节点在A2B拓扑中的位置和编程到主节点的A2B_RESPCYCS寄存器(MSTR_RESPCYCS)的值决定的。离主节点最近的从节点的节点号为0,节点号为每个下一个直连从节点递增,直到最后一个直连从节点n。发现过程中每个从节点使用的A2B_RESPCYCS值可以用以下公式计算:
SLV_RESPCYCS[n] = MSTR_RESPCYCS - 4n
使用上面的主A2B_RESPCYCS计算示例(与MSTR_RESPCYCS = 151),以下公式确定两个从节点的正确A2B_RESPCYCS值:
SLV_RESPCYCS[0] = MSTR_RESPCYCS - (4*0) = 151 - 0 = 151 (0x97) SLV_RESPCYCS[1] = MSTR_RESPCYCS - (4*1) = 151 - 4 = 147 (0x93)
下面的代码序列使用这些值在示例系统中进行发现过程:
Write MSTR_RESPCYCS to the A2B_RESPCYCS register in the master node Write 0x01 to the A2B_CONTROL register in the master node Write 0x01 to the A2B_SWCTL register in the master node Write 0x01 to the A2B_INTMSK2 register in the master node Write SLV_RESPCYCS[0] to the A2B_DISCVRY register in the master node <Wait for Interrupt> Write 0x00 to the A2B_NODEADR register in the master node Write 0x01 to the A2B_SWCTL register in slave node 0 Write SLV_RESPCYCS[1] to the A2B_DISCVRY register in the master node <Wait for Interrupt>
4、使用高级发现功能配置从节点响应周期
该收发器被设计为自动调整时间,当反应在总线上看到。这允许在不需要根据电缆长度更改从节点响应周期的情况下发现从节点。当使用高级发现流时,主节点发现新的从节点后,可能会立即报告暂时的数据奇偶性错误,该从节点通过长电缆(长度大于5m)连接。这些错误只在2到3个超级帧中存在。如果已知系统中的电缆长度,可以通过以下伪代码计算从节点响应周期来避免这些错误:
if (n = 0) SLV_RESPCYCS[n] = MSTR_RESPCYCS else if (cable_length > 12m) SLV_RESPCYCS[n] = SLV_RESPCYCS[n-1] - 6 else if (cable_length > 5m) SLV_RESPCYCS[n] = SLV_RESPCYCS[n-1] - 5 else SLV_RESPCYCS[n] = SLV_RESPCYCS[n-1] - 4