发布时间:2023-01-13 23:30
以下部分提供了关于系统诊断的信息,用于故障隔离和纠正。除了A2B线路故障检测外,还提供了回环测试模式来验证主、从节点的I2S/TDM连接。
介绍A2B线路故障的诊断方法。它提供了对不同故障的描述和如何对软件中的线路故障事件作出反应的编程说明。线路故障在发现过程中被检测到,但也可能在发现后出现(延迟故障)。
注意:只有在定位故障时A2B_SWCTL.DIAGMODE位才需要设置为1。在所有其他条件下,该位必须设置为0,以确保设备的正常运行。
线路故障列表列出了线路故障的不同类型以及受故障影响的引脚。在发现总线期间,可以检测和定位所有故障。当发现过程中检测到故障时,使偏置电流进入下一个线路节点的开关将自动断开。
断开连接由0x0C的A2B_INTTYPE寄存器值表示。
意外连接到下一个节点的错误端口(端口B而不是端口A)也会对A2B_INTTYPE寄存器创建相同的响应或0x0D标志。
当一个节点的正接线意外连接到下一个线路节点的负输入时,就会发生反向接线故障。该事件标记为A2B_INTTYPE寄存器值0x0D,或通过等待发现完成响应时的超时表示(A2B_INTTYPE = 0x18)。
当向编程A2B_DISCVRY.DRESPCYC无效值时,也会发生发现过程中的超时,或者如果行中的下一个节点有物理缺陷,阻止节点响应。
需要特定软件流程进行检测和定位的故障在表中以阴影显示。
注意:当线路故障打开偏置开关时,A2B_SWCTL.ENSW位不自动清除;这必须在软件中完成。在紧急线路故障断开总线偏置到任何总线段的情况下,主收发器中的A2B_SWCTL.ENSW位应设置为0。
线路故障
注意:对地短路和对VBAT短路故障是会导致整个总线关闭的严重故障。正常的A2B总线操作应始终停止,包括主节点拆除总线虚功率(与线路故障位置无关)。将A2B_SWCTL.ENSW设置为0到主收发器,直到故障消除。
对于以下故障,线路故障位置上游的主从节点之间可以继续部分A2B总线操作。
1、开路。
2、端口错误。
3、反向连接。
4、有缺陷的节点。
5、下一个直连节点发现参数错误。
6、线路短接在一块。
以下寄存器用于诊断A2B总线的线路故障。详细信息请参考注册描述部分。
1、A2B_SWCTL寄存器控制偏置电压,为下一个线路节点切换到b端A2B总线链路。该
寄存器还提供特殊的线路故障感知模式。
2、A2B_SWSTAT寄存器提供线路诊断状态信息。
3、A2B_INTSRC寄存器包含有关活动中断来源的信息,它是由哪个slave产生的,或者
该中断是否是由Master产生的。行错误可以用这个寄存器来定位。
4、A2B_INTTYPE寄存器存储有关当前中断请求类型的信息。读取该寄存器将清除相应
的中断。
开路故障图显示了“SLAVE0”和“SLAVE1”之间的开线故障。当“SLAVE0”和“SLAVE1”之间发生故障时,“MASTER”和“SLAVE0”之间的通信将继续。
开路故障图
线路短路故障图显示了“SLAVE0”和“SLAVE1”之间的线路故障。当“SLAVE0”和“SLAVE1”之间发生故障时,“MASTER”和“SLAVE0”之间的通信将继续。
线路短路故障图
BP短至GND图显示了“SLAVE0”和“SLAVE1”之间的BP线接地短接。当发生在'SLAVE0'和'SLAVE1'之间的故障时,所有总线通信停止。
BP短地示意图
BN短到VBAT的图显示了在'SLAVE0'和'SLAVE1'之间短到VBAT的BN线。当发生在'SLAVE0'和'SLAVE1'之间的故障时,所有总线通信停止。
BN短到VBAT示意图
BN短地示意图显示的是“SLAVE0”和“SLAVE1”之间的BN线接地短接。当“SLAVE0”和“SLAVE1”之间发生故障时,总线通信可以继续,而不会立即出现故障。
注意:这个线路故障是一个特殊的诊断案例,因为它传播到较早的节点,因为FET开关有反向二极管。在发现或重新发现总线期间,该错误被标识为没有本地化特定的A2B_INTTYPE代码(0x29)。为了定位故障,设置A2B_SWCTL.DIAGMODE位= 1。请参阅诊断软件流程部分和定位隐藏故障表,了解故障诊断软件流程。
BN短地示意图
BP短到VBAT示意图显示了在'SLAVE0'和'SLAVE1'之间短到VBAT的BP线。当“SLAVE0”和“SLAVE1”之间发生短至VBAT BP故障时,总线通信可以继续,而不会立即发生故障。
注意:这个线路故障是一个特殊的诊断案例,因为它传播到较早的节点,因为FET开关有反向二极管。在发现或重新发现总线期间,该错误被标识为没有本地化特定的A2B_INTTYPE代码(0x2A)。为了定位故障,设置A2B_SWCTL.DIAGMODE位= 1。有关故障诊断软件流程的详细信息,请参见诊断软件流程和定位隐藏故障图。
BP短到VBAT示意图
全线诊断只在发现过程中执行。但是,发现后的某些中断(如果启用)可能表明运行过程中的线路故障。重新发现可以检测任何可能的故障的原因和位置。
在发现之后,下列任何中断类型(A2B_INTTYPE)表明有线路故障:
1、0x0A (10: PWRERR)
2、0x0F (15: PWRERR)
3、0x2A (42: PWRERR)
4、0x80 (128: 中断消息错误)
当从节点连续32帧检测到SRF 丢失错误 (SRFERR)时,该节点假定下行总线被丢弃,并设置其最后一个节点位(A2B_NODE.LAST = 1)成为系统中的最后一个节点。在最后一个节点(A2B_NODE.LAST = 1)中可以检测到发现后线路故障导致的总线丢弃条件。将SRFERR锁存。
如果节点之间的槽位配置不匹配,就会产生过多的误码积累。当A2B_BP短线到有噪声的VBAT或BN短线到有噪声的GND时,就会发生这种情况。巴士可以在这些条件下运行,但更容易受到损伤(例如电磁干扰)。
使用A2B_BECNT寄存器按如下方式计数累积的错误:
1、设置A2B_BECCTL寄存器为0xE4 (256 CRC错误后中断)。可接受的音频噪声和鲁棒
性是主观的,需要在车辆试验中确定。请根据实际情况调整阈值。
2、定期向A2B_BECNT寄存器写入0(每秒一次)以重置错误计数器。可接受的音频噪声和
鲁棒性是主观的,需要在车辆试验中确定,相应地调整A2B_BECNT寄存器的时间。
3、误码率计数器溢出(0x04: BECOVF)中断表示总线问题。
使用以下软件流程和诊断软件流程图进行节点发现和诊断。
1、为诊断模式0设置A2B_SWCTL寄存器为0x00。
2、在主节点上使能电源错误中断和A2B_INTPND2.DSCDONE中断,设置A2B_SWCTL
寄存器为0x01以启用电源切换。
3、A2B_INTPND2.DSCDONE(节点发现成功的设备)将A2B_INTTYPE设置为0x18,
如果触发中断则执行第七步操作。
4、在主节点如果A2B_INTTYPE是0x29或0x2A,将A2B_SWCTL.ENSW位设置为0,并
等待50~100ms,在本地化隐藏故障部分(步骤8)将 A2B_SWCTL.DIAGMODE位设置为1重
新发现本地隐藏的节点。
附加信息:如果A2B_INTTYPE寄存器是任何其他A2B_INTPND0.PWRERR类型,如果
发现超时,请继续步骤5。
5、如果A2B_INTTYPE寄存器值为0x0B、0x0C或0x0D,可以读取A2B_INTSRC寄存器
来确定位置。如果操作超时,则通过消除过程,将最有可能逆转到被发现节点的总线连接。
执行步骤6。
6、如果A2B_INTTYPE寄存器= 0x09或0x0A,在A2B_INTSRC和A2B_INTTYPE寄存器
值与主机通信后,通过在主节点设置A2B_SWCTL寄存器值为0x00来禁用整个总线。
附加信息:一旦检测到任何其他局部故障,停止发现过程。通过软件定时重试发现进
程,确认故障是否清除。收发信机内没有自动重试机制。
7、如果这不是最后一个节点,将A2B_SWCTLMODE位设置为2。该设置忽略由于下游
电流吸取造成的VIN波动,并防止发生在下游节点上的错误定位错误。对下游节点寄存器设置
编程,在下一个节点上重复步骤1。
附加信息:继续这个循环,直到发现所有节点。发现所有节点后,将所有节点的
A2B_SWCTL.MODE位设置为0,同时保持A2B_SWCTL.ENSW位为1。完整的A2B总线发现
过程现在已经完成。
软件诊断流程
8、如果发现从节点超时,可以通过设置A2B_CONTROL.ENDDSC停止发现进程.
本节介绍确定VBAT或GND可能隐藏故障的位置的过程。
虽然总线不应该在存在此类故障的情况下长期运行,但在主节点禁用总线之前,在短期基础上运行以下过程,以确定隐藏故障的位置。这个过程在“隐藏故障定位”图中显示。
1、从诊断软件流程中的步骤4开始,在Master中的A2B_SWCTL.ENSW位= 0,设置变
量来跟踪当前节点的位置和最后一个已知的好节点。还要设置一个变量,例如PriorFault =
0。这将跟踪在以前的节点发现中是否报告了故障。等待至少100毫秒以使总线的电气稳定状
态稳定下来后,进行步骤2。
2、在当前节点中,设置A2B_INTMSK0寄存器为0x10和A2B_SWCTL寄存器为0x09。在
诊断模式下设置A2B_SWCTL.ENSW位将启动重新发现过程。定义两个变量,用于跟踪在当
前发现尝试中是否完成了错误和/或发现;如“Disc”和“Fault”。在此步骤中清除两个变量。
额外信息:等待从这个操作中断,允许100毫秒的超时。此超时为总线诊断提供了足够的
时间,并可能为完成完整的发现提供了足够的时间。当存在故障时,当A2B_SWCTL.ENSW
= 1时,这个过程可能需要比平常更长的时间。
3、如果在超时之前没有收到中断,则故障位于当前节点的下游。“GoodNode”设置为当
前节点。执行步骤9。
4、如果A2B_INTTYPE寄存器值为0x29或0x2A,那么在当前节点的下游发生了一个错
误。这意味着检测到故障,因此设置fault = 1。如果DISC = 0,返回步骤3,超时100毫秒,等
待发现是否完成。如果DISC = 1,并且之前报告的发现过程已经完成(A2B_INTTYPE寄存器
值为 0x18),则继续步骤6。
5、如果A2B_INTTYPE寄存器值为0x18,则下游节点发现成功,通信已经建立。在诊断
模式下,即使检测到A2B_INTTYPE = 0x29或0x2A的故障,也可能发生这种情况。当物理故
障只存在于两个节点之间的一条线路上时,就会发生这些故障。执行步骤6。
6、检查其他挂起中断的A2B_INTSTAT寄存器的值。如果A2B_INTSTAT寄存器非零,则
故障和发现完成都比中断服务例程响应发生得更快。在这种情况下,0x18 DSCDONE中断的
优先级更高。设置DISC = 1,返回步骤3。如果A2B_INTSTAT寄存器= 0,则不再有挂起的中
断。执行步骤7。
7、为了达到这一步,发现必须成功完成。如果还检测到故障,则fault = 1,并且有必要
继续总线发现以定位故障。设置GoodNode = Node, PriorFault = Fault, Node = n,增加n为发
现下一个节点做准备,返回步骤2。Fault = 0(未检测到故障),执行步骤8。
8、要达到这一步,发现必须已经完成,并且没有检测到故障。出现这种情况有两个原
因。要么当前节点距离故障上游太远,无法检测到故障,要么节点已经位于故障下游,故障
已经不存在。如果PriorFault = 1,则是后一种情况,因此继续步骤9。如果PriorFault = 0,则
故障尚未检测到。在这种情况下,继续发现总线以定位故障。设置GoodNode = Node,
PriorFault = Fault, Node = n,增加n为发现下一个节点做准备,返回步骤2。
9、报告故障位置在最近记录的GoodNode的下游。除非在步骤8中检测到线路故障在当
前节点之前,否则错误的位置是在当前节点之后。在这种情况下,最后一个GoodNode在上一
个节点。隐伏故障定位完成。
定位隐蔽故障
诊断软件流程图描述了A2B系统总线掉电检测的流程。
软件诊断流程
I2S环回发生在收发器内部。驱动到DTX0 pad的数据采样为A2B接收数据,而不是DRX0引脚上的数据。DTX1 pad驱动的数据采样为A2B接收数据,而不是DRX1引脚上的数据。
A2B_I2STEST.BUSLOOPBK位启用从DTX0引脚到串行RX块的环回。A2B_I2STEST.SELRX1,A2B_I2STEST.RX2LOOPBK,A2B_I2STEST.LOOPBK2TX位如果设置了位,则忽略该位。如果设置A2B_I2STEST.PATTRN2TX位,在DTX0和DTX1引脚上驱动固定模式(0xB38F0E32),而不是从A2B总线传输数据。
如果使能了“I2S环回模式”,则对“A2B_I2SCFG.RX0EN位”的值进行编程,以匹配A2B_I2SCFG.TX0EN位的值;对A2B_I2SCFG.RX1EN位的值进行编程,以匹配A2B_I2SCFG.TX1EN的值。
每个节点在A2B总线上接收和传输的数据槽数由若干寄存器控制。
如果A2B_SLOTFMT.UPSIZE和A2B_SLOTFMT.DNSIZE位域值不同,在总线上改变方向的回圈数据要么被截断为更小的位宽,要么被零填充为更大的位宽。
当启用该模式时,程序负责确保从A2B总线接收到的数据和通过串行块回送的数据能够在A2B总线上传输。
串行TX块到串行RX块示意图
提供了模式生成和环回测试模式,方便地验证主节点和从节点的I2S TDM连通性。传输模式生成器在所有通道上使用默认的位模式1011_0011_1000_1111__0000_1110_0011_0010,其中1011是最重要的半字节,0010是最不重要的半字节。
请按照以下步骤进行I2S TDM测试:
1、对于Master到Host的链路验证,设置A2B_I2STEST.PATTRN2TX位,并验证具有默
认位模式的TX接口与预期的时间匹配(可能使用范围、逻辑分析仪或其他设备)。
2、用于主机到主链路验证。设置A2B_I2STEST.RX2LOOPBK和主机上的
A2B_I2STEST.LOOPBK2TX,等待一个周期,并验证主机接收到的DTX数据与上一帧发送的
DRX数据相匹配。
附加信息:当主节点也从总线接收TX数据时,RX到TX环回不能正确工作A2B_DATCTL
寄存器必须是0x00当从RX循环回TX。
3、对于从机到外设的链路验证,如果从机连接到DAC(例如发送到扬声器),在从机上设
置A2B_I2STEST.PATTRN2TX位,并验证预期的DTX定时。
4、用于从外设链路验证。如果从节点有外设通过I2S TDM接口提供输入信号,则需要设
置A2B_I2STEST.RX2LOOPBK和A2B_I2STEST.LOOPBK2TX位。验证DTX接口与DRX接口
是否匹配一帧延迟。或者(不使用A2B_I2STEST寄存器)在先前验证过的主I2S/TDM DTX接口
上检查RX数据。
5、使用外部环回验证系统。DTX0/DTX1引脚与从节点的DRX0/DRX1引脚连接,产生数
字环回。当A2B_I2STEST时,可以在主DTX引脚上验证默认位模式。在从节点设置
PATTRN2TX位。
附加信息:当设置A2B_I2STEST.LOOPBK2TX位是如果A2B_I2STEST.A2B_I2STEST
被清除。设置LOOPBK2TX位,然后最后接收的帧在TX引脚上重复。这种行为一直持续到设
置A2B_I2STEST.RX2LOOPBK位或A2B_I2STEST.LOOPBK2TX位被清除。如果
A2B_I2STEST.LOOPBK2TX位在重置后启用,生成默认模式直A2B_I2STEST.RX2LOOPBK
位被设置。
附加信息:帧缓冲区图显示用于环回测试的TX帧缓冲区。
帧缓冲示意图