【A2B协议之管理A2B系统数据流】

在一个完整的A2B系统中,每个主从收发器必须为任意两个收发器之间A2B总线上的上行和下行流正确配置所需的slot管理方案和格式。
每个收发器有两个内部的帧buffer:
TX帧buffer—由A2B总线填充并输出到DTX0/DTX1 pin
RX帧buffer—由I2S/TDM端口通过使能的DRXn pin填充并输出到A2B总线
这些帧buffer在每个超帧期间被填充或消耗,下行slot内容占据buffer的低阶位置,上行slot内容在高阶位置。帧buffer有32个位置深,32位宽,因为任何给定的收发器可以占用A2B总线上最多32个slot,并支持最多32位数据。

一、A2B slot格式

上行和下行数据slots的正常格式是数据后跟一个奇偶校验位。然而,也支持浮点压缩和ECC保护。上游和下游数据slots的大小和格式都通过A2B_SLOTFMT寄存器配置。

二、下行数据slots

从节点可以选择性地接收下游总线slots输出到DTXn引脚。
A2B_DNMASK0到A2B_DNMASK3寄存器为每个可能的下行数据slot提供一个位。这些下行掩码位选择哪些下行slots被收发器消耗,并放置在其TX帧buffer中通过I2S/TDM端口输出,由下行掩码使能位(A2B_LDNSLOTS.DNMASKEN)控制。

当A2B_LDNSLOTS.DNMASKEN=0,A2B_LDNSLOTS寄存器定义了在超帧的下行期间由本地节点捕获的数据slots数量,这些数据slots被本地节点使用,不会向下传播到下一个节点。(在A端消耗数据)
对于一个从节点,A2B_DNSLOTS寄存器定义了该收发器在捕获数据slots之后向下游传递的slots数量。
A2B_BCDNSLOTS寄存器定义了被本地节点捕获的数据slots数量,这些数据slots也作为广播数据传递到下游(B端)的下一个节点。
因此:一个从收发器在A侧接收到“A2B_BCDNSLOTS+A2B_DNSLOTS+A2B_LDNSLOTS"下行数据slots,在B侧发送"A2B_BCDNSLOTS + "A2B_DNSLOTS”下行数据slots。

当A2B_LDNSLOTS.DNMASKEN=1,A2B_LDNSLOTS寄存器定义了在收发器向下游传递A2B_DNSLOTS.DNSLOTS数据slots之后,在超帧的下行期间由本地节点增加的数据slots数量。(在B端增加数据)
A2B_DNMASK0到A2B_DNMASK3寄存器中设置的最高有效位决定了收发器(dnmaskrx)必须接收的slots数量,以便收发器识别哪些单独的slots被放置在其TX帧buffer中通过I2S/TDM端口输出。
因此:一个从收发器在A侧接收到MAX(A2B_DNSLOTS, dnmaskrx)下行数据slots,在B侧发送"A2B_DNSLOTS + A2B_LDNSLOTS"下行数据slots。
注意:当A2B_LDNSLOTS.DNMASKEN = 1时,A2B_BCDNSLOTS寄存器被忽略。

简单来说:一个从节点的A端会从上一个节点接收到数据,该节点会增加数据和消耗数据,除消耗掉的数据外,其余数据会向下传递到B端的下一个节点。

当A2B_LDNSLOTS.DNMASKEN=1并且A2B_LDNSLOTS值非零时,数据是从RX帧buffer开始被放置在启用的下行slots中,若A2B_DNOFFSET寄存器被编程为在RX帧buffer中应用一个偏移量,则从这个偏移量开始填充数据到启用的下行slots中。
在这里插入图片描述
寄存器定义如下:
Broadcast Downstream Slots Register(Slave only)
在这里插入图片描述
Local Downstream Slots Register(Slave only)
在这里插入图片描述
Downstream Slots Register
在这里插入图片描述

三、上行数据slots

A2B_UPSLOTS寄存器定义了上游数据slots的数量。对一个主收发器,该寄存器定义了从第一个从收发器向上游传播到达主收发器的数据slots数量。对一个从收发器,该寄存器定义了上行数据slots的数量,在SRF之后以slot 0立即开始通过从收发器向上传输,无论从收发器是否使用这些slots中包含的信息。
A2B_LUPSLOTS寄存器定义了从收发器向上游传递数据slots后,从收发器附加到超帧上游部分的数据slots数量。这些slots中的数据来自收发器的内部RX帧buffer,由其I2S/TDM/PDM端口填充。

从节点选择性地将上游A2B总线数据slots接收到其TX帧buffer中,以便给到从节点的DTXn引脚上使用。在从收发器中,A2B_UPMASK0到A2B_UPMASK3寄存器为每个可能的上游数据slot提供1个位。当这些寄存器中任何一个位被设置时,从收发器从相应的slot中取上游数据,并将其放在任何接收到的下游数据slots之后的TX帧buffer中,通过I2S/TDM端口输出到适当的DTXn引脚。

A2B_UPMASK0到A2B_UPMASK3寄存器中设置的最高有效位定义了收发器必须接收的slots数量(upmaskrx),以便将启用的slots放入TX帧buffer中输出到I2S/TDM端口。
因此,一个从收发器在B侧接收" MAX (A2B_UPSLOTS, upmaskrx)"上游数据slots,在A侧发送"A2B_UPSLOTS + A2B_LUPSLOTS"上游数据slots。(B端消耗,A端增加)

缺省情况下,从节点用RX帧buffer中的第一个数据填充已启用的上行slots。可以设置A2B_UPOFFSET寄存器去定义一个偏移量,以便RX帧buffer从该偏移量开始填充启用的上游slots。
在这里插入图片描述

总结

以上讲述了A2B总线上游和下游的数据流是如何管理的。具体的参考资料和寄存器配置还需查阅A2B总线的参考文档。
添加链接描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值