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.
您好!
我写的代码按照流程图在这个链接 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是正确的 。
但是、我发现在大端字节序器件中、"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,
我会评论这篇博客。
此致、