赞
踩
在a2b数据传输过程中,由于其独特的链式结构,a2b总线上的数据无法像其余通讯方式一样实现完整的点对点通讯。因此,a2b总线的数据传输过程存在数据的消耗与透传。在一个完整的A2B系统中,每个主节点和从节点必须针对节点的上下行数据slot配置合理的数据slot管理。
a2b总线中的每个节点都存在两个内部buffer:
1.TX frame buffer:数据发送buffer,该buffer由A2B总线数据填充,最后通过DTX0,DTX1引脚 进行数据发送
2.RX frame buffer:数据接收buffer,该buffer由DTX0,DTX1引脚数据填充,并最终添加到 A2B总线上进行节点间的数据通讯。
这些数据buffer在A2B通讯的每个superframe期间被消耗或者添加,并且上行数据占据buffer的高位,下行数据占据buffer的低位数据。
对于一个节点而言,RXbuffer的数据由I2S/TDM/PDM引脚所接收的slot数据,节点根据mask使能位在superframe期间填充特定的slot。TXbuffer的数据由A2B总线填充,节点根据mask使能位在superframe期间将数据进行特定slot的填充。
在理清楚A2B总线的数据流之前,需要了解几类寄存器:
1.Local Downstream Slots Register:在从节点中,该寄存器的定义取决于DNMASKEN位, DNMASKEN=0时,LDNSLOTS表示本地节点捕获的slot数,该slot属于消耗性slot,在节点传 输过程中被本地节点消耗并且不会继续向下传递。当DNMASKEN=1时,LDNSLOTS表示本地节 点在原有的数据上添加的slot数。
2.Downstream Slots Register:在节点中,该寄存器定义的是本地节点透传的slot数,该数据slot 不包括广播的slot数据。在主节点中,该寄存器定义的是所有下行slot的数量,包括广播是slot数 据。
3.Local Downstream Channel Offset Register:从节点中,该寄存器表示在数据下行传递到A2B总 线之前被偏置的slot数,通俗的讲,我们的从节点通过音频数据总线接收的slot中并不是所有的 slot都需要被接受,该寄存器定义的就是需要偏置的slot数。
4.Downstream Data RX Mask0-3 register:该寄存器定义的是节点从A2B总线上接受的下行data slot数,包括四个寄存器共包括slot0-31。该寄存器的每一位对应的是接收的下行数据的每一个 channel,寄存器为1 的位的slot将会通过I2S/TDM音频总线向本地节点的TX发送。还有一点, 如果该寄存器的位未被定义,则由Local Downstream Slots Register决定本地节点消耗的data slot数。
5.Broadcast Downstream Slots Register:从节点中,该寄存器表示节点捕获并下传到B端的slot 数。该寄存器与Downstream Data RX Mask0-3 register寄存器有关,如果Downstream Data RX Mask0-3 register寄存器有定义,则该寄存器的参数将会被忽略。
下面是与上行数据有关的寄存器,与下行数据控制寄存器基本相同:
6.Local Upstream Slots Register:从节点中,该寄存器定义的是在超帧的上行数据部分,本地 节点所添加的slot数,与下行数据控制对应寄存器不同。
7.Upstream Slots Register:从节点中,该寄存器本地节点上行透传的slot数,这部分slot数据会 在本地节点添加本地slot之前。在主节点中,该寄存器定义的是全部上行slot的数量。
以上寄存器定义大部分是在系统设置A2B_CONTROL.NEWSTRCT之后开始生效。
上行数据:
当A2B_LDNSLOTS.DNMASKEN=0时,A2B_DNSLOTS定义的是从节点透传到下一个节点的slot,这部分slot在从节点中不包括广播slot,该slot在同步控制帧SCF之后立即响应开始启动。A2B_LDNSLOTS定义的是本地节点消耗的slot数,因此,本地节点在A端接收到的slot数:A2B_BCDNSLOTS + A2B_DNSLOTS + A2B_LDNSLOTS。本地节点在B端传输的slot数:A2B_BCDNSLOTS + A2B_DNSLOTS。
值得注意的是,Downstream Data RX Mask0-3 register在A2B_LDNSLOTS.DNMASKEN位被清除时便失效。
当A2B_LDNSLOTS.DNMASKEN=1时,A2B_LDNSLOTS寄存器定义的是本地节点添加的slot数,这部分在slot被添加在A2B_DNSLOTS定义的透传slot后。A2B_LDNSLOTS.DNMASKEN位被置位时,Downstream Data RX Mask0-3 register寄存器有效,其最高被置位决定本地节点接收的slot数。因此,此种情形下,本地节点A端能接收的数据为:MAX (A2B_DNSLOTS, dnmaskrx),dnmaskrx表示Downstream Data RX Mask0-3 register寄存器定义的接收节点数。其基本定义如下:
本地节点B端发送的数据:A2B_DNSLOTS + A2B_LDNSLOTS。
值得注意的是,A2B_LDNSLOTS.DNMASKEN位被置位时,A2B_BCDNSLOTS寄存器失效,因此,A2B_LDNSLOTS.DNMASKEN=1时,下行的数据中并不包括A2B_BCDNSLOTS寄存器参数值。
同时,A2B_DNOFFSET寄存器的设置值只有在本地节点配置A2B_LDNSLOTS.DNMASKEN为1且A2B_LDNSLOTS寄存器非零时起作用。
下行基本的数据流形式如下:
上行数据:
A2B_UPSLOTS寄存器定义的是上行数据slot。主节点中,该寄存器定义的slot表示主节点下的第一个从节点上行的slot数。在从节点中,上行透传的slot在SRF后立即开始slo传递,该寄存器定义的是节点透传的slot数。A2B_LUPSLOTS寄存器定义在超帧上行期间添加在透传数据后的slot数。这部分数据来自节点音频总线的RX frame buffer。
与下行数据控制流相似,上行数据控制有A2B_UPMASK0-3控制上行数据,当该寄存器的某位置位,则相应的上行slot会被置于TX frame buffer后通过I2S/TDM输出消耗。则节点B端接收的slot数:MAX (A2B_UPSLOTS, upmaskrx),本地节点在A端上行数据流中上行发送的slot数:A2B_UPSLOTS + A2B_LUPSLOTS。
上行基本的数据流形式如下:
A2B_UPOFFSET寄存器定义在上行超帧数据中,节点从音频接口接收的音频数据slot偏移量,A2B_LUPSLOTS寄存器定义的所添加的音频slot与上行一样,紧跟在透传slot之后。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。