九,附录 B:响应周期公式
九附录 B响应周期公式九附录 B响应周期公式九附录 B响应周期公式A2B_RESPCYCS 寄存器用于设置从控制帧SCF开始到最后一个从节点用响应帧SRF进行响应的时刻之间的相对时间。寄存器设置定义了在超帧的上行部分期间A2B 网络中的较早节点应该何时期望来自最后一个从节点的响应。如果最后一个节点未能响应则假定的最后一个节点之前的那个节点会进行响应。以下部分提供有关如何对主节点和从节点的 A2B_RESPCYCS 寄存器进行编程的信息。配置主节点响应周期“主节点响应周期”图描绘了如何确定主节点响应周期值。在“主节点响应周期”图中• 主节点最小响应周期计数由下行数据的长度、最小总线周转时间以及从节点的数量决定。• 主节点最大响应周期计数由上行数据的长度和主节点响应周期偏移量决定。• 主节点响应周期偏移量确保从接收缓冲区中接收到最后一个上行数据位到输出此 I2S/TDM 数据的点之间有足够的内部处理时间tIP该输出与下一个控制帧SCF和同步引脚SYNC转换同步开始。A2B 主节点响应偏移量RESPOFFS表定义了这个恒定的主节点响应周期偏移量它是 A2B 主节点的时分复用TDM模式A2B_I2SGCFG.TDMMODE和 I2S/TDM 通道大小A2B_I2SGCFG.TDMSS的函数。对主节点的 A2B_RESPCYCS 寄存器进行编程是上述主节点响应周期偏移量RESPOFFS的函数同时还取决于• 系统中的从节点数量• 在每个从节点的 A 端口接收的下行 A2B 总线数据时隙数量NUM_DNSLOTS• 下行 A2B 总线数据时隙的宽度DNSLOT_SIZE• 每个从节点驱动到 A 端口的上行 A2B 总线数据时隙数量NUM_UPSLOTS以及• 上行 A2B 总线数据时隙的宽度UPSLOT_SIZE。 系统中任何给定节点可能的上行时隙和下行时隙活动是有助于确定必须编程到主节点的 A2B_RESPCYCS 寄存器中的值的第一个因素。对于 A2B 拓扑中的每个从节点 n以下等式定义了该节点的下行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 的上行时隙和下行时隙活动就可以根据以下等式计算每个从节点的等效上行RESPCYCS_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• RESPCYCS_DN[n]是在考虑从节点 n 的下行活动时主节点可能的最小响应周期寄存器设置。在为 RESPCYCS_DN[n]计算出的值中最大值是主节点 A2B_RESPCYCS 的最小设置MAX(RESPCYCS_DN[n])。• 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主节点 A2B_RESPCYCS 计算示例一个具有三个节点主节点以及两个从节点从节点 0 和从节点 1的系统配置如图“三节点 A2B 系统示例”所示对于超帧的下行部分• 主节点配置为 32 位 TDM8 模式发送 14 个时隙时隙大小为 24 位。• 从节点 0从主节点消耗 6 个时隙并将剩余的 8 个时隙传递给从节点 1然后为下行流量贡献 8 个额外的时隙从从节点 0 发送到从节点 1 的总共有 16 个时隙。• 从节点 1消耗来自从节点 0 的所有 16 个时隙。对于超帧的上行部分• 从节点 1发送 10 个时隙时隙大小为 16 位。• 从节点 0从从节点 1 消耗 6 个时隙并将剩余的 4 个时隙传递给主节点然后为上行流量贡献 8 个额外的时隙从从节点 0 发送到主节点的总共有 12 个时隙。• 主节点配置为 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) 1702. 利用这些信息计算每个从节点的响应周期要求。从 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 1513. 对于此系统配置将主节点的 A2B_RESPCYCS 值编程为 1510x97。配置从节点响应周期在系统发现过程中每个从节点都设置其 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使用高级发现配置从节点响应周期收发器被设计为自动调整到在总线上看到响应的时间。这使得从节点能够被发现而无需根据电缆长度更改从节点响应周期。当使用高级发现流程时在发现通过长电缆长度大于 5 米连接的新从节点后主节点可能立即报告瞬态数据奇偶校验错误。 这些错误仅持续两到三个超帧。如果系统中的电缆长度是已知的可以使用以下伪代码计算从节点响应周期以避免这些错误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