当前位置:   article > 正文

AD2428W手册解读之事件控制_a2b协议

a2b协议

        A2B协议引擎包含一组寄存器,为向主机提供中断提供支持。这些记录包括:

                1、A2B_INTSTAT。

                2、 A2B_INTSRC。

                3、A2B_INTTYPE。

                4、 A2B_INTPND0 through A2B_INTPND2。

                5、 A2B_INTMSK0 through A2B_INTMSK2。

        要在主节点上注册从属中断请求,需要在A2B_INTMSK0和A2B_INTMSK1寄存器中打开从属中断的掩码。仅在主节点中,也要在A2B_INTMSK2寄存器中取消中断掩码。

        A2B_IRQ引脚的活动极性是使用A2B_PINCFG寄存器设置的。默认情况下,中断请求在A2B_IRQ引脚和A2B_INTSTAT设置上以高电平表示。硬中断请求优先级别。主收发器中的活动中断请求在主机读取主收发器A2B_INTTYPE寄存器时被清除和修改。这个过程也适用于从节点接收中断请求的主节点。

        主收发器寄存器(A2B_INTSRC)表示活动中断是由主节点产生的还是由从节点产生的(它还提供从节点的ID)。主收发器中的A2B_INTTYPE寄存器包含主机用来确定中断原因的信息。优先级逻辑自动确定A2B_INTSRC和A2B_INTTYPE寄存器的值。其他挂起的中断请求可以在读取A2B_INTTYPE寄存器之后出现。当读取A2B_INTTYPE寄存器时,A2B_IRQ引脚在一个fSYSBCLK周期(~20 ns)内低电平。如果有挂起的中断请求,引脚立即转换到高电平。

        当屏蔽中断发生时,它们会通过A2B_INTPND2寄存器注册为A2B_INTPND0中的sticky位,但不会触发中断请求。一旦被揭露,任何挂起的中断都会触发中断请求,其优先级顺序如下:

                1、主中断优先于从节点中断。

                2、从节点ID编号越低的优先级越高。

                3、较低的数字A2B_INTTYPE优先于较高的数字。

                4、A2B_INTPND0优先级高于A2B_INTPND1, A2B_INTPND1优先级高于
        A2B_INTPND2。

                5、挂起寄存器A2B_INTPND0到A2B_INTPND2中编号较低的位优先于编号较高的位。

        当主收发器从从站接收到中断请求时,IRQ信号立即被断言。

1、主机对中断请求的响应

        当主机接收到来自主节点的中断请求时(由IRQ信号变高表示),主机可以读取A2B_INTSRC寄存器和A2B_INTTYPE寄存器,分别获得产生中断请求的从节点ID和中断请求的类型。这可以通过执行一个2字节的读取来完成,从A2B_INTSRC地址开始,它读取两个寄存器。在A2B_INTTYPE寄存器读取完成时,活动中断被清除,如果没有其他挂起的中断,IRQ就会降低。

2、中断延迟

        在同步响应帧(SRF)内,从收发器上游发送中断信号到主收发器。在SRF开始之后(在从节点开始驱动AP和AN引脚之后)中断会被通知给下一个超级帧的SRF中的主节点。假设没有其他具有更高优先级的中断来屏蔽IO引脚中断,从节点IO引脚和主节点IRQ之间的延迟为:

                1、4个SYSBCLK周期用于引脚中断产生(81.4 ns) +。

                2、一个超帧延迟进入SRF (20833.3 μ s) +。

                3、64个SYSBCLK周期,长度为SRF (1,302.1 ns) +

                4、主Rx延迟(101.7 ns) + 5个SYSBCLK周期。

                5、两个SYSBCLK周期用于主节点中的IRQ逻辑(40.7 ns)。

        除了22.36 μ s的总延迟之外,SRF必须通过的每个slave还有另外9个SYSBCLK延迟周期(N × 183.1 ns)。例如,在一个有三个slave的系统中,从slave 2到master的GPIO中断的最大延迟为“22.36µs + (2 x 0.183) μs= 22.73µs”。

3、错误管理

        以下部分提供了关于错误管理的信息。通过A2B总线传输的所有数据都在接收端检查是否违反了线路代码(DDERR)。此外,SCF和SRF使用循环冗余码(CRC),每个同步数据槽使用一个奇偶校验位来额外的错误检测确定性,如帧结构细节图所示。

框架结构的细节

3.1、下行数据错误检测

        16位循环冗余码(CRC)是SCF内任何下游控制数据的一部分。该CRC在接收端确定SCF数据在传输期间是否损坏。

        SCF有一个序言来指示超帧的开始。它提供了一种比特模式,奴隶们使用它来进行时钟和帧同步。如果这个帧同步没有被从站检测到,这个错误被当作CRC错误处理。

3.2、上游数据错误检测

        SRF中任何上游响应数据都包含一个16位循环冗余代码。接收端CRC判断SRF数据在传输过程中是否损坏。中断请求字段在SCF内部有一个额外的CRC (ICRC),以防止错误中断被触发。

        SRF有一个序言来指示响应框架的开始。它提供了用于时钟和帧同步的位模式。如果这个帧同步没有被上游节点检测到,这个错误会在从节点中以SRFCRCERR的形式被捕获,因为这个CRCERR是主节点。

3.3、数据槽错误纠正

        节点接收到的数据槽位可能自动修正的情况如下:

                1、如果没有看到帧同步前导,所有从总线接收到的数据槽将自动替换为之前的良好值。

                2、如果从站在SCF中检测到CRC错误(A2B_INTPND0. CRCERR =1),所有从总线接收
        到的下游数据槽都被替换为之前的正确值。

                3、如果主服务器在SRF中检测到CRC错误(A2B_INTPND0.CRCERR =1),所有从总线
        接收的上游数据槽都被替换为之前的正确值。

                4、如果数据解码错误(A2B_INTPND0.DDERR =1)或在一个数据槽内检测到数据校验错
        误(A2B_INTPND0. DDERR =1)。接收到的错误数据槽将自动替换为之前的正确槽值。

3.4、控制和响应错误处理

        当主机通过I2C和A2B(例如I2C通过距离)访问寄存器时,同步控制帧(SCF)和同步响应帧(SRF)携带该数据交换。如果在控制帧或响应帧中出现通信错误,主节点会自动发起对寄存器访问的重试。主节点会多次重试,直到访问成功或发生I2C超时。在重试时间内,应用I2C时钟扩展,这向主机发出事务未完成的信号。如果有一个I2C超时(I2C超时发生在30个超级帧之后),主机标记一个I2CERR中断,主机可以对此做出响应。

        在主机中接收到的已损坏的中断请求将被忽略。如果一个真正的中断事件发生,由于中断没有被清除,从机会自动重新生成中断。

3.5、错误信号

        在A2B_INTPND0或A2B_INTPND2寄存器中标记的任何通信错误,在分别在A2B_INTMSK0或A2B_INTMSK2寄存器中启用相应的中断时,都会触发中断请求。这些中断请求使用A2B_IRQ引脚或A2B_INTSTAT。发送请求给主机的IRQ位。然后,主机可以读取A2B_INTSRC和A2B_INTTYPE寄存器,以确定错误是什么以及它发生在哪里。

        A2B_BECCTL寄存器选择要统计哪些通信错误,以及要生成中断请求必须超过哪些计数器阈值。使用该特性,某些单比特通信错误不必产生中断,除非它们在上次清除A2B_BECNT寄存器之后的一段时间内显著累积。此外,可以使用A2B_ERRMGMT寄存器选择三种通过I2S/TDM接口发送数据槽错误的方法(详细信息请参见错误管理寄存器)。

3.6、A2B通信和位错误

        A2B通信及误码如下:

                1、HDCNTERR ( A2B_INTTYPE = 0):SCF和SRF字段包含一个2位字段CNT。在SCF
        中,CNT字段从上一个超帧中使用的值取4模加1。在SRF中,SCF中CNT字段的接收值被传
        输回主节点。HDCNTERR表示当前节点检测到报头计数错误。对于主节点,这意味着同步响
        应帧具有与预期不同的CNT值。对于从节点,这意味着同步控制帧与预期值不同。

                2、DDERR ( A2B_INTTYPE = 1):DDERR错误表示在A2B总线上差分曼彻斯特数据流
        中缺少时钟边缘。仅在特定节点正在使用的数据槽上报告数据解码错误。SCF/SRF中的数据
        解码错误会导致CRC误,并且不会引发数据解码错误。

                3、CRCERR ( A2B_INTTYPE = 2):CRCERR错误表示从节点在接收到的SCF字段中
        检测到CRC错误。对于主节点,该错误表示接收到的SRF字段CRC错误。

                4、DPERR ( A2B_INTTYPE = 3):A2B总线上的数据槽由奇偶校验位保护。DPERR错
        误只在特定节点使用的数据槽上报告。节点不检查刚刚通过它的槽位的奇偶校验。

                5、BECOVF ( A2B_INTTYPE = 4):A2B_BECCTL.THRESHLD字段配置误码数
        (HDCNTERR、DDERR、CRCERR、DPERR和ICRCERR)在A2B_INTPND0之前计数。
        BECOVF位已设置。如果不希望为每一个比特错误发送中断信号,这个阈值是有用的。阈值
        可以基于可接受的噪声和在特定时期内的鲁棒性来设置。应定期清除误码计数器。过多的误
        码设置A2B_INTPND0。BECOVF位和信号中断。误码阈值可以在主节点和从节点上独立设
        置。

                6、SRFERR ( A2B_INTTYPE = 5):SRFERR错误表示在本地定时窗口过期之前没有收
        到后面节点的SRF,受影响的节点生成自己的SRF,并将其上传到前面的节点。该错误对主
        节点和从节点都有效。

                7、SRFCRCERR ( A2B_INTTYPE = 6):SRFCRCERR 错误表示当前从节点在SRF字
        段检测到CRC错误。通常,当从节点检测到SRF中的CRC错误时,它会标记该节点的
        SRFCRCERR错误位。从站不会试图纠正错误,而是按照原样向上传递SRF。但例外的是,
        在响应命令的情况下,从节点插入自己的SRF,包括CRC。在主节点中,CRCERR字段用于
        表示SRF中的CRC错误。

                8、 PWRERR ( A2B_INTTYPE = 9-15):PWRERR是来自DLPS(数字线路电源开关)块
        的错误掩码位,LDO2在内部用于驱动DLPS块。

3.7、从中断处理

        本节描述主节点如何在内部处理从节点中断。当一个中断发生在一个从节点上时,下面的事件序列会响应:

                1、从机中断后,从机收发器的A2B_INTPND0、A2B_INTPND1和A2B_MBOX0STAT寄
        存器的相关位被设置。

                2、如果A2B_INTSTAT.IRQ位低,它就会被设置。然后将优先级最高的暂挂中断类型写
        入A2B_INTTYPE寄存器。

                3、从节点开始在SRF的中断域中发出IRQ信号。任何没有活动中断的上游从机都将此字
        段传递给上游。

                4、当主节点接收到一个具有有效CRC和IRQ字段的中断字段时,主节点设置它的
        A2B_INTSTAT.IRQ位,如果该位尚未设置。然后,主服务器用从服务器号更新A2B_INTSRC
        寄存器,并将A2B_INTTYPE寄存器设置为0x80。此时,主节点的IRQ引脚被驱动为活动的。
                5、主服务器自动从相应的从服务器读取A2B_INTTYPE寄存器,并更新它的
        A2B_INTTYPE寄存器。如果应用了一个新的结构(A2B_CONTROLNEWSTRCT设置在最近5
        个超级帧内),或者如果需要发送远程I2C停止命令。

                6、一旦读取A2B_INTTYPE,主机自动执行写入到适当的从机以清除中断。如果应用了
        一个新的结构,或者需要发送远程I2C停止命令,则会延迟。此时,从站停止在SRF中发送中
        断信号。

                7、当主节点的IRQ引脚作为从节点中断的结果被断言时,主机处理器读取
        A2B_INTSTAT和A2B_INTTYPE寄存器以确定中断类型并确定哪个从节点引发了中断。

        如果主机在步骤4之后,但在步骤5完成之前从主机读取A2B_INTTYPE,主机可能从A2B_INTTYPE读取0x80。如果从节点不退出总线,A2B_INTTYPE字段最终会更新。

        当主机读取A2B_INTTYPE = 0x80时,建议对A2B_INTTYPE寄存器进行额外的读取,以确认中断类型。如果一个从属机发出中断信号,然后从总线上掉下来(可能是由于交换机故障),下一个上游从属机在错过32帧srf后最终转换为最后一个从属机。此时,如果主节点(不是主处理器)仍然在内部尝试从丢失的从节点读取A2B_INTTYPE,最新的从节点会发送一个特殊的SRF,向主节点表明读取无法通过。这会导致A2B_INTTYPE被设置为0xFD,中断识别进程终止。由于错过的SRF超时是32超级帧(在此之后上游节点成为最后一个节点),错误类型0xFD是不可能的。

        换句话说,从机A2B_INTTYPE读错误(0xFD)发生在当主机试图根据接收到的中断从从机读取A2B_INTTYPE时,但是收到了上游从机的响应,表明从机现在是最后一个从机。A2B_INTTYPE = 0xFD和A2B_INTTYPE = 0x80之间的主要区别是,当主机仍然试图读取A2B_INTTYPE时,
A2B_INTTYPE = 0x80可以看到,因此它可能随后解析,而A2B_INTTYPE 0xFD无法解析。

        如果一个从站只是向主站报告一个中断,而在那之后没有任何附加的线路故障。如果在第4步之后,主机读取A2B_INTTYPE的速度过快,它会读取A2B_INTTYPE = 0x80,导致IRQ被清除。如果在从服务器更新寄存器值之前读取了A2B_INTTYPE寄存器,那么主服务器不会重新声明IRQ。

        如果主机读取A2B_INTSRC寄存器,那么在看到IRQ之后A2B_INTTYPE寄存器(这是推荐的),那么A2B_INTTYPE值是有效的(除非有行错误)。

        如果没有挂起中断的从站从总线的其余部分断开连接,上游从站将在32个连续的超级帧中生成SRFERR。

3.8、错误管理登记

        当A2B数据槽不能被正确接收(通过校验错误或数据解码错误检测槽中的任何位),该槽的最后一个良好样本被重复接收。A2B_ERRMGMT寄存器还控制在I2S/TDM接口上指示坏数据槽的三种方式。

        当设置A2B_ERRMGMT.ERRLSB位后,每个数据槽位的LSB表示该数据槽位是否正确接收。例如,在上行槽位大小为24位的主节点上,通过DTX0或DTX1发送的第24位数据有效时为低,无效时为高。这种方法改变了接收到的I2S/TDM数据字中LSB的含义。

        当设置A2B_ERRMGMT.ERRSIG位后,每个数据槽的LSB以下的所有位都用来表示该槽位是否被正确接收。当槽位大小为24位时,每个32周期的数据槽中,有效数据后8位为低,无效数据后8位为高。如果没有设置A2B_ERRMGMT.ERRSIG位,额外的8位总是低的。该方法保留了接收到的I2S/TDM数据字中LSB的含义,但数据字的大小必须小于数据通道的大小。数据通道宽度通常为32位,但也可以编程为16位。

        当设置A2B_ERRMGMT.ERRSLOT位后,A2B总线上生成的槽位数加1。在主节点中,协议引擎通常在每个超帧中将A2B_UPSLOTS写入帧缓冲区。从节点写入的槽位数通常为A2B_LDNSLOTS+ A2B_BCDNSLOTS。使用这种方法启用的附加数据槽被附加到配置的A2B通信量的末尾,并包含该超帧中前面每个数据槽的一个比特错误信息。多余槽位MSB表示数据槽位0出错。下一位表示数据槽1有错误,依此类推。例如,0x80000000表示0号槽位有错误,而0xffffff00表示0到23号槽位都有错误。如果设置A2B_I2SGCFG.TDMSS位为通道大小为16位,只有前16个数据通道可以被报告。如果A2B_I2SGCFG.TDMSS位设置为通道大小为32位,最多可报告32个数据通道的错误。

3.9、误码控制寄存器

        A2B_BECNT寄存器控制误码计数,包括2n的中断阈值,其中n的范围是1到8。它选择哪些通信错误进入计数器,以及在哪个计数器阈值产生中断请求。使用此特性,某些单比特通信错误不必产生中断,除非它们在A2B_BECNT寄存器最后一次清除时显著累积。

4、测试与调试

        为了测试和调试,收发器允许使用A2B_RAISE和产生错误A2B_GENERR寄存器产生中断和误码。

 4.1、A2B_RAISE

        A2B_RAISE寄存器允许主机通过软件在系统的任何节点上产生中断。寄存器必须通过A2B总线写入,因为从本地I2C端口写入寄存器是无效的。

4.2、生成错误寄存器(A2B_GENERR)

        1、0x01 报头计数错误(A2B_GENERR.GENHCERR)

                1)、当主节点产生报头计数错误时:

                        主节点仅为一帧改变SCF中的2位CNT字段。在随后的帧中,它发送正确的CNT字
                段。

                        因为每个从节点都接收到SCF,所以所有从节点都检测到
                (A2B_INTPND0.HDCNTERR)错误。

                2)、当从节点产生报头计数错误时:

                        从节点改变SRF中2位的CNT字段。一般情况下,从节点将接收到的来自下游从节
                点的SRF按原样传递。在这种情况下(因为从节点正在帧中接收对A2B_GENERR命令的
                写入),它已经用自己的SRF生成了一个响应,但是用了错误的CNT字段,正如命令所指
                出的那样。

                        虽然上游从节点收到了SRF,但不检查CNT字段是否正确。从节点只生成
                A2B_INTPND0.HDCNTERR检查SCF。因此,当从节点产生此错误时,只有主节点能检
                测到。

        2、0x02 数据解码错误(A2B_GENERR.GENDDERR)

                产生数据解码错误需要将曼彻斯特编码违例应用于数据槽,而不是应用于SCF和SRF字
        段。

                1)、当主节点产生数据解码错误时:

                        主节点诱导下游第一个数据槽(仅0号槽)出现曼彻斯特编码错误。它不会在任何其他
                数据槽上注入错误。由于节点仅在使用的数据槽上报告数据解码错误,所以只有使用槽0
                的从节点在主节点生成错误时检测到错误。当一个从节点通过(不消耗)下行数据时,它发
                送与它接收到的相同的位流,并且没有检测到错误。

                2)、当从节点产生数据解码错误时:

                        从节点在它贡献的第一个上游数据槽上诱导曼彻斯特编码错误,而不是在任何通过
                的数据槽上。如果从器贡献了一个以上的上游槽,它只在第一个槽上引起误差。从节点
                不会诱导下游数据的编码错误。

                        由于数据解码错误只在被消费的数据槽上报告,只有消费第一个贡献的upslot的上
                游节点检测到错误。如果上游从节点或主节点不使用第一个贡献的数据槽,那么它不会
                检测到错误。

        3、0x04 CRC错误(A2B_GENERR.GENCRCERR)

                1)、当主节点生成CRC错误时:

                        主节点导致SCF的CRC域仅对一帧产生误差。因为每个从节点都接收到SCF,所以
                所有从节点都检测到CRC中的错误。

                2)、当从节点生成CRC错误时:

                        从节点仅对一帧的SRF的CRC域产生错误。因为所有的上游从节点都收到了SRF并
                检查了CRC,所以当任何下游从节点产生这个错误时,所有的上游从节点都检测到这个
                错误。从节点报告A2B_INTPND0.SRFCRCERR字段中的SRF CRC错误。但这些错误
                不被误码计数器计算。如果启用,主节点检测到错误为A2B_INTPND0.CRCERR和增加
                误码计数器。

        4、0x08 数据奇偶校验错误(A2B_GENERR.GENDPERR)

                1)、当主节点产生数据解码错误时:

                        主节点诱导下游第一个数据槽位(槽位0)的数据校验错误,不诱导其他数据槽位的数
                据校验错误。当主节点产生数据奇偶校验错误时,只有使用0号槽位的从节点会检测到
                它。没有消耗0号槽位的从节点不会检测到0号槽位。

                2)、当从节点产生数据解码错误时:

                        从节点只在它贡献的第一个上游数据槽上诱发数据奇偶校验错误。它不会在超框架
                的下游部分引起误差。当从节点生成错误时,所有使用第一个贡献槽位的上游节点都将
                检测到它。如果上游从节点或主节点没有使用第一个贡献的数据槽位,它就不会检测到
                它。

        5、0x10 中断帧CRC错误(A2B_GENERR.GENICRCERR)

                1)、主节点无法产生中断帧CRC错误。

                2)、当从节点产生中断帧CRC错误时,只有主节点能够检测到该错误。其他上游从节

                点不检查中断帧中的CRC。

5、惟一的ID

        每个收发器包含一个48位的唯一ID。通过A2B_CHIPID5寄存器读取A2B_CHIPID0以获得唯一的ID。如果读取唯一ID失败,会产生一个中断(A2B_INTTYPE = 0xFC),该唯一ID无法恢复。如果发生这种情况,请将收发器返回到模拟设备。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/105278
推荐阅读
相关标签
  

闽ICP备14008679号