This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6670 使用AIF2模块在接收中会出现数据丢失,求解释



我的环境是 C6670, 使用AIF2,模式是 LTE FDD 20MHZ,CPRI,2AxC。接收使用的是pdsp, pdsp每14个symbol出1个中断,正好是1ms数据量。

正常情况下收发都没有问题,但是系统会不定时的出现 rx 丢失符号,本来应该是 0-13, 14-27,126-139...   但会出现丢若干个,1个中断内接收的变成了 126--133, 135-0, 丢失了134 symbol(这只是例子,并不每次丢的一样)。 打断点后可以看到 pdsp 的ping/pong buf内就已经丢了。

这个问题困扰很久了,求答疑,谢谢

  • 可以先查一下丢符号时AIF2 EE模块有没有什么错误的记录

  • 重点关注ee_cd_irs错误状态寄存器:

    1 cd_ee_mop_desc_starve_err (Error) PKTDMA MOP Descriptor Starvation

    0 cd_ee_sop_desc_starve_err (Error) PKTDMA SOP Descriptor Starvation

  • 不好意思,底下的测试好像不太对,我选择的版本好像有点问题, 我先多测测再来写详细点,抱歉。

    ---------------------------       下面结论好像不对,我先多试试                   -------------------------------------------------------

    你好, Lin Feng1,我最近还在查这个问题,参考你的建议发现一些情况:

    我代码中使用的是PDK中的AIF驱动, 以前未打开 AIF_enableException(), 所以也看不到EE,这次我使用AIF_enableException(),并且每次出错的时候调用AIF_getException()函数获取EE,这里我先没有打开EE的exception ISR而是自己在符合丢失时调用一次,  这时我发现每次RX 符号丢失时会有一个ee 错误:在EE DB Raw status Register中,如下图:

    db_ee_i_fifo_ovfl_err.

    我使用 AIF_ConfigObj.aif2EeCount.hEeDbIntCnt->db_ee_i_fifo_ovfl_err 可以看到每次出错这个值也是递增的,递增幅度也和丢失数目一样.

    这个是指接收端DB 出现问题吗,如果是这个的话应该怎么修改呢。我这个接收符号丢失的问题不定时丢失,有时候改了其他代码可能就会出现次数少些或多些,

    找不到其他的规律。

    然后我又改了下程序,想看看是不是每次这个ee就会导致出错,我导出了EE的中断到 HWI 中并打开,不再手动调用AIF_getException(),代码运行了2个小时都没有出现接收符号丢失的现象,不导出的话大约 1分钟就会丢失1次,程序中也没有其他会读写内存什么的在运行。很奇怪的现象。

    谢谢你的答复。

  • 你好, Brighton Feng:

    我暂时还没有确切的定位问题原因,好像好几个情形下都会出现该问题。但参考你的回复,我发现在一次出错时

    cd_ee_sop_desc_starve_err    这个确实出现了, 这个寄存器是什么意思呢, 是我的txq starve还是rx fdq starve呢? 会是什么原因导致的呢?


    还有我发现在负载重的情况下 pe_ee_db_starve_err 经常会出现, 但也没有发现其他问题,这个严重吗?

    谢谢你的回复


  • cd_ee_sop_desc_starve_err是RX FDQ starve,往往是因为接收中断没有及时处理。这往往是软件处理或调度方面的问题。

     pe_ee_db_starve_err表示PktDMA没有及时把发送数据送给AIF,AIF发送的数据会用0代替。这往往由DMA总线冲突造成,可以尝试:

    1)提高AIF PktDMA优先级,或降低其它传输优先级

    2)把AIF的Packet Buffer放到LL2中(访问LL2的总线冲突比较少)

     

  • 你好,

    对于“ 提高AIF PktDMA优先级,或降低其它传输优先级“ 这个,是不是修改PKTDMA的Priority Control Register的RX_PRIORITY 和 TX_PRIORITY.  我使用了

    PDK,  直接修改 cppi_device.c 文件的 Cppi_GlobalConfigParams cppiGblCfgParams[CPPI_MAX_CPDMA]  中AIF2对应 rxPriority 和 txPriority是吗?

    这个寄存器是3-bit 的,对应的是 0优先级最高还是 7优先级最高呢, 我看cppi_device.c 中默认都是 0.

    谢谢你的答复.

  • 系统中主要Master优先级配置寄存器。0表示最高,7表示最大

    System bus arbitration
    Master Register comments reset value
    CorePac CGEM_regs->MDMAARBU priority of the request from core 7
    XMC_regs->MDMAARBX priority of the request from prefetch buffer 7
    EDMA TC gEDMACCRegs[n]->TPCC_QUEPRI 0
    Packet DMA (QMSS, AIF2, BCP, SRIO, PA, SA, FFTC) pktDmaCfgRegs->PRIORITY_CONTROL_REG AIF2 DIO is channel 128 of AIF2 packet DMA, so it uses the AIF2 PktDMA priority configuration 0
    RAC CSL_Rac2_cfgRegs->HP_FD_CTL_PRIO RAC output: (128 bit VBUSP) FD Control Symbols Priority 7
    CSL_Rac2_cfgRegs starts at CSL_RAC_A_FEI_CONTROL_REGS CSL_Rac2_cfgRegs->HP_FPE_PRIO RAC output: (128 bit VBUSP) FPE results Priority  7
    reset value =7 CSL_Rac2_cfgRegs->LP_FD_CTL_PRIO RAC output: (64 bit VBUSP) FD Control Symbols Priority 7
    CSL_Rac2_cfgRegs->LP_FD_DATA_PRIO RAC output: (64 bit VBUSP) FD data Symbols Priority  7
    CSL_Rac2_cfgRegs->LP_FPE_PRIO RAC output: (64 bit VBUSP) FPE results Priority  7
    CSL_Rac2_cfgRegs->LP_FT_PRIO RAC output: (64 bit VBUSP) FT results Priority 7
    CSL_Rac2_cfgRegs->LP_PM_PRIO RAC output: (64 bit VBUSP) PM results Priority  7
    CSL_Rac2_cfgRegs->LP_PD_PRIO RAC output: (64 bit VBUSP) PD results Priority  7
    CSL_Rac2_cfgRegs->LP_SPE_PRIO RAC output: (64 bit VBUSP) SPE results Priority  7
    CSL_Rac2_cfgRegs->LP_SIP_PRIO RAC output: (64 bit VBUSP) SIP results Priority   7
    TAC CSL_Tac_cfgRegs->FE_HEAD_PRIO priotiry of the data packet header read from TAC 7
    CSL_Tac_cfgRegs start at CSL_TAC_FEI_CONTROL_REGS CSL_Tac_cfgRegs->FE_DATA_PRIO priotiry of the data packet payload read from TAC 7
    reset value =7 CSL_Tac_cfgRegs->FE_WARN_PRIO priority of the warning write from TAC 7
    CSL_Tac_cfgRegs->FE_CPM_PRIO priority of the code power write from TAC 7
    BCP DIO DIO VBUSM PRIORITY Register->PRIORITY 0 = highest, 7 = lowest
    reset value = 0 (highest)
    0
    PCIE pciess_appRegs->PRIORITY
    SRIO DIO srioRegs->RIO_PER_SET_CNTL
    HyperLink K1: Use the priority of remote master which access local memory through HyperLink
    K2: configureable through the Rx Priority Control register

    Local L2 Arbitration
    Master Register
    core CGEM_regs->CPUARBU
    core (User cache coherency operation) CGEM_regs->UCARBU
    IDMA CGEM_regs->IDMAARBU
    external master CGEM_regs->SDMAARBU
  • 优先级0表示最高,7表示最低

  • 你好 , Brighton Feng.

    我最近又遇到了这个问题,还请你帮我看下,谢谢。

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/67279.aspx

  • 你好, Lin Feng1 .

    现在还是有这个问题,希望能帮我看下这个帖子的描述,谢谢。

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/67279.aspx

  • 您好!我在做AIF测试的时候打印的 error/status interrupt log如下:

    0 error/status interrupt EE_LK_STS_A4  happens at frame 0, slot/symbol 0, clock 499

      0 rm_ee_sync_status_change_err: Per Link (Information): Indicates that the RX state machine changed state

      1 rm_ee_num_los_det_err: Per Link (Error): los detection error

    1 error/status interrupt EE_LK_STS_B4  happens at frame 0, slot/symbol 0, clock 499

      20 pe_ee_db_starve_err: Link-by-Link (Error), DB did not have antenna data for a AxC channel. Likely to occur if DMA was late.

    2 error/status interrupt EE_LK_STS_A4  happens at frame 1, slot/symbol 0, clock 689

      0 rm_ee_sync_status_change_err: Per Link (Information): Indicates that the RX state machine changed state

    3 error/status interrupt EE_LK_STS_B4  happens at frame 1, slot/symbol 0, clock 689

      20 pe_ee_db_starve_err: Link-by-Link (Error), DB did not have antenna data for a AxC channel. Likely to occur if DMA was late.

    4 error/status interrupt EE_LK_STS_A4  happens at frame 2, slot/symbol 0, clock 17036

      0 rm_ee_sync_status_change_err: Per Link (Information): Indicates that the RX state machine changed state

      16 rm_ee_hfnsync_state_err: Per Link, CPRI only (Error): Indicates RX FSM in the hyperframe state that is, state ST3. (as defined by CPRI)

    这些错误是怎么造成的?有什么解决方法没?谢谢!

  • 您好 serdes自环测试没问题 外环测试DSP发完数据后在serdes出来的数据就是发送数据本身吗?捕捉到的数据跟我发的数据不一样,而且还没有超帧结构,有点不明白,你遇到过这种问题吗 谢谢!

  • 自环没问题应该没问题啊, 你这个我没遇到过