当前位置:   article > 正文

A2B总线数据流_a2b/tdm/slot

a2b/tdm/slot

     在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之后。
 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号