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.

[参考译文] TMS570LS3137:TMS570 CRC 计算

Guru**** 2049780 points
Other Parts Discussed in Thread: TMS570LS3137
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1343596/tms570ls3137-tms570-crc-calculation

器件型号:TMS570LS3137

您好!

我写的代码按照流程图在这个链接 www.ti.com/.../spna235.pdf ,但我收到的 CRC 值是不同的所需的值。 我的代码如下:


#include "sys_common.h"
#include "crc.h"
#include "reg_crc.h"
#include "RTI.h"
#include "Gio.h"


/*用户代码开始(1)*/

#define PSA_SIGREGL1 ((crcbase_t *) 0xFE000070U)
uint64_t param1 [2]={1、2};

crcModConfig_t deneme ={
.mode = CRC_FULL_CPU、
.crc_channel = CRC_CH1、
.src_data_pat = param1、
.data_length = 2、

};
crcConfig_t deneme1 ={
.mode = CRC_FULL_CPU、
.crc_channel = CRC_CH1、
.pcount = 0u、
.WDG_PRELOAD = 0u、
.pcount = 1u、
.scount =1U、
};
/*用户代码结束*/

/**@fn void main (void)
*@简介应用程序主要功能
*@注意此功能默认为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实施应用程序。
*/

/*用户代码开始(2)*/
/*用户代码结束*/

uint8 emacAddress[6U]={0xFFU、0xFFU、0xFFU、0xFFU、0xFFU、 0xFFU};
UINT32 emacPhyAddress = 0u;
Uint64 malim = 0u;
UINT64 RESULT_CRC =0U;


int main (空)

{
/*用户代码开始(3)*/

crcInit();

while (1){


crcChannelReset (crcREG、CRC_CH1);
crcSetConfig (crcREG、&deneme1);
crcSignGen(crcREG,&deneme);
malim = crcGetPSASig (crcREG、crc_ch1);


/*用户代码结束*/

返回0;


我们需要获取的数据: 0x6C9E200000000000

我收到的数据: 0x0000000000000173

除此之外、哪些源可以获取有关 CRC 模块外设总线操作的数据? 《参考手册》对这一主题不是很详细。

此致、

ATA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 ATA:

    我现在正在处理您的线程、并会尽快为您提供我的更新。

    --
    谢谢。此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 ATA:

    [报价 userid="600175" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1343596/tms570ls3137-tms570-crc-calculation "]

    我们需要获取的数据: 0x6C9E200000000000

    我收到的数据: 0x0000000000000173

    [/报价]

    对于输入数据0x0000000000000001和0x0000000000000002、接收到的数据0x0000000000000173是正确的 。

    CRC 在线计算(lddgo.net)

    但是、我发现在大端字节序器件中、"crcSignGen"和"crcGetPSASig"函数有几个问题。  "crcGetPSASig"函数小端字节序器件还有一个问题。

    1.  big-endian 器件中 crcSignGen 函数存在问题:

    高字进入低 PSA 寄存器、低字进入高 PSA 寄存器。

    (6) crcSignGen 大端字节序错误-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    (6) TMS570LC4357:CRC 算法-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    例如、对于大端字节序器件(TMS570LS3137)、请参阅以下移入 PSA 寄存器的数据:

    在这里可以看到、我正在尝试将0xAABBCCDDEEFFAABB 值复制到 PSA 寄存器、结果是较高的32位数据0xAABBCCDD 被移动到较低的寄存器、较低的32位数据0xEEFFAABB 被移动到较高的寄存器。 但实际上、它应该是相反的、那么只有我们将为我们的输入数据获得正确的 CRC 值。

    对于我在小端字节序器件(RM57L8x)上测试的相同数据:

    现在数据被正确移动到 PSA 寄存器、我的意思是低32位被复制到低位寄存器、高32位被复制到高32位寄存器。 因此、在本例中、我们将获得正确的 CRC 值。

    大端设备的解决方案是、我们应该在复制到 PSA 寄存器之前交换较低和较高的32位数据。 有关解决方案的更多详细信息、请参阅我链接的第二个主题。

    2.  小端字节序和大端字节序器件中的 crcGetPSASig 函数出现问题:

    即使在生成适当的 CRC 后、  crcGetPSASig 函数未正确返回 CRC 值。

    例如、我将提供0xAABBCCDDEEFFAABB 和0x9988776655443322数据。

    对于此数据、我应该得到0xEB3741C214EFE6C3 CRC。

    如您所见、我获得了正确的 CRC、 将0xEB3741C2值放入较高的 PSA 寄存器、将0x14EFE6C3放入较低的 PSA 寄存器。 但是问题在于、在将总共64位数据复制到状态变量时、我们正在将较低的32位 PSA 寄存器值移位32倍、而不是较高的 PSA 寄存器值。

    请确保您的代码中存在这两个错误。

    --
    谢谢。此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Jagadish,

    我会评论这篇博客。

    此致、