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.

C6455的TCP2的CRC校验设置问题



从网站找的例子tcp2_standalone_mode。。

关于TCP2的CRC校验是不是紧紧需要设置:configBase.crcLen、configBase.crcPoly 和configBase.numCrcPass ?

比如CRC是24位,多项式为(0, 1, 3, 4, 5, 6, 7, 10, 11, 14, 17, 18, 23, 24),根据TCP2文档说明,configBase.crcLen=24,configBase.crcPoly =0xC3267D,configBase.numCrcPass   = 1?

可是为什么CRC校验结果为什么不是返回1?尽管译码正确,迭代次数依旧要达到所设置的最大次数呢?

  • Huiyan,

                 您好,CRC的启动还有另外一个条件,请查看min_iter的配置值是多少。

    The CRC unit will not be enabled until the decoder iteration count is equal or greater than the min_iter parameter.

  • min_iter的配置值,我设置为1.。。感觉这个应该是最普遍的设置吧?

    我个人理解是在min_iter和max_iter之间,如果符合CRC校验后就自动退出迭代。。。不知道我的个人理解对不对?

    btw:之前关于VCP的两个帖子,很感谢Jane的回答。只是目前我还没有搞定,从您提供的例子上倒是看到了相关信息,只是年底事情多还没有专门的时间去整这块,待年后我好好看看。等我搞定后我会去网站回复“是否是答案”。谢谢

  • Huiyan,

                 您的理解是正确的,在min_iter和max_iter之间,如果满足CRC校验并达到设定的次数,应该自动退出迭代。

                  如果您的工程还是不能实现提前退出的功能,建议查一下寄存器看一下配置的值是否正确。 我也研究一下是否还有其他限制。

                  谢谢!

  • 我调用了计算迭代次数的函数和是否通过CRC校验的函数,迭代次数的那个函数总是还回max_iter-1,而CRC校验的函数总是还回0.。。。可是我看了,译码后的信息通过本地计算是符合CRC的。。。谢谢了。。

    想请您帮我看看我上面提到的那个例子,对应的那个CRC多项式对不对?还有您说的寄存器是指哪个?

  • Huiyan,

                根据您提供的信息(0, 1, 3, 4, 5, 6, 7, 10, 11, 14, 17, 18, 23, 24),对应的二进制码为(0位不计入)1100 0011 0010 0110 0111 1101, 也就是0xC3267D, 您的配置值是正确的。

                寄存器是指查一下TCP2的寄存器0x50000000~0x5000003c的内容和如上述参数值一致。

  • Jane 我看了下,所有的15个寄存器显示都是0。。。这是我工程内什么配置有问题啊?谢谢!
  • Huiyan,

                   抱歉,0x50000000是EDMA访问的地址,请观察02BA 0000开始的空间。 具体寄存器的地址信息可以查询datasheet手册的TCP2章节。

  • Jane,您好。附件是02BA0000地址的信息。请帮我看看。
  • 根据你的描述,译码输出硬比特是正确的,但是输出的CRC状态是0-CRC NOT PASS,我觉得有可能还是硬比特译码就错误,请确认你是怎么验证这个硬比特是正确的呢?

    你给的附件只有几个状态寄存器的数值,请给出0x02BA 0000~0x02BA 004C区间的15个输入及输出寄存器的数值。

  • 我送去译码器的数,经译码后和我编码前的数比较过,是完全一样的。同时我还把译码后的数据通过我本地crc检验函数检验过也是通过检验的。 您提到的这几个寄存器,我通过ccs软件查看寄存器时显示全是0。。。也不知道为什么写不进去。 同时我的tcp是参考从贵网站下载的例程dsk6455_v2\boards\dsk6455_v2\csl_c6455\example\tcp2。。
  • 看看地址0x50000000~0x500000FF的数值,如果在CCS中观察的数据问0,试试添加代码调用函数TCP2_getIcConfig读取IC 寄存器,

    并增加读取TCPOUT0,TCPOUT1,TCPOUT2.

  • 我刚搞错了。 02ba0000 是0x00021101,其余地址全为0。。 50000000这个系列的地址在ccs上看不了。
  • 调用TCP2_genIc后,configIc有值,且是我配置进入的。 再用您提到的函数TCP2_getIcConfig后,工程内的configIc就变成全为0了。 您能否帮我看看是不是我用的这个TCP2例程本身有什么缺陷?或者我在对C6455的硬件初始化和配置有缺陷?
  •  调用TCP2_genIc只是根据配置生成参数存于configIc,之后会启动EDMA及TCP将生成的参数搬到TCP内部寄存器,所以确认TCP2_getIcConfig是在译码完成后调用读取相应的数值。

  • 附件是调用TCP2_getIcConfig前后,我工程中configIc内数的变化。。 还有程序特别容易死在while(0xA!=TCP2_statTcpState)内,出不来?这是为什么?是不是哪配置的问题导致的??
  • 对于TCP2的译码完成建议使用EDMA REVT中断来同步以确保硬比特及状态信息输出。

    TCP2生成配置参数时,需要输入tail data,TCP2_genIc (&configParams, tailData, &configIc);确认一下输入的tail data。

     把TCPOUT0~3也存下来看看。

  • 目前是使用EDMA的中断IPR的TCC位来判断TCP的译码结束,可是CRC的校验还是不行。

    关于TCPOT0~3这三个寄存器,怎么看呢?好像也不能直接通过CCS来看,是不是还是EDMA?

    同时,我输入进去的taildata是全0.。。。。

  • 关于在CCS下查看VCP寄存器,在CCS memory browser中输入地址0x50000000~0x500000FF,如果显示的都是"-------"这样的无效字符,则需要修改gel中的memory map将VCP地址映射出来才能在CCS下观察。

    也可以类似函数TCP2_getIcConfig读取IC 寄存器,增加代码读取TCPOUT0,TCPOUT1,TCPOUT2存放到全局变量中观察。

    例程中TCP2_genIc的第二个参数是tail data,在编码后每个流都有相应的tail bit,如1/3 turbo 编码,则一个系统流、两个校验流后面会各自有4个tail bit,请确认一下tail data输入数值。可以使用例程中自带的测试数据测试,看看输出CRC是否pass,然后修改将自带的tail data全部清零看看此时对译码输出硬比特及CRC的影响,以此来确定是否tail data的影响。