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.
工具/软件:Code Composer Studio
我使用的是 TMS570LC4357芯片和安全 TI 库。 我对使用 CRC 模块和安全 TI 库有一些问题。
我想使用 CRC 模块。 但是、不会生成 hL_crc.c 文件。 我想知道如何生成 hL_crc.c 文件。
2. CRC 模块 在自我诊断之前执行。 我在 2个位置运行 CRC 模块。
(1)在初始化自诊断之前(绿线)-没有问题
(2)初始化自诊断后(红线)-自诊断失败
-> 我想知道在自 诊断初始化结束后 CRC 模块运行后自检失败的原因。
-使用代码-
crcInit();
sl_flash_test_in_boot(); /* CRC 模块运行代码*/
/*通过 Vic 控制器启用 IRQ 偏移*/
_coreEnableIrqVicOffset_();
/*初始化 VIM 表*/
vimInit();
/*配置系统对发送给 ESM 组1的错误条件的响应*/
/*可以从 HALCoGen 的"ESM"选项卡配置此函数*/
esmInit();
/*用户代码结束*/
_mpuInit_();
/*用户代码开始(23)*/
/*用户代码结束*/
_cacheEnable_();
/*用户代码开始(24)*/
/*用户代码结束*/
/*用户代码开始(25)*/
if (resetResason = reset_error){
systemREG1->SYSECR |=((uint32) 0x03u<<14);
}
/*用户代码结束*/
/*初始化全局变量和构造函数*/
__TI_auto_init();
/*用户代码开始(26)*/
/*初始化 EPC */
epcInit();
/*启用 DMA ECC */
sl_dmaREG->DMAPCR |=(uint32) 0xAU;
/*初始化 DMA RAM */
SL_Init_Memory (RAMTYPE_DMA_RAM);
/*初始化 ADC */
adcInit();
debug_printf ("adc init\n\n"r);
/*初始化 ADC SRAM */
SL_Init_Memory (RAMTYPE_MIBADC1_RAM);
SL_Init_Memory (RAMTYPE_MIBADC2_RAM);
/*初始化 MIBSPI */
mibspiInit();
/*初始化 MIBSPI SRAM */
SL_Init_Memory (RAMTYPE_MIBSPI1_RAM);
/*初始化 SCI */
sciInit();
gioInit();/* thchung add */
dmInit();
gioSetBit (gioPORTB、1U、0); /*待办事项:移至 HL.gio.h */
/*初始化 CAN */
canInit();
/*初始化 CAN SRAM */
SL_Init_Memory (RAMTYPE_DCAN1_RAM);
SL_Init_Memory (RAMTYPE_DCAN2_RAM);
gioInit();
rtpInit();
SL_ESM_Init (ESM_ApplicationCallback);
_enable_interrupt_();
uint32 i;
uint32 size=(uint32)&ulHighHandlerSize;
for (i=0;<size;i++))
{
(((char *)&ulHighHandlerStartAddr)[i]=((char *)&ulHighHandlerLoadStart)[i];
}
crcInit();
sl_flash_test_in_boot(); /* CRC 模块运行代码*/
SafetyBootMachine();/*自我诊断功能-在安全的 TI 库中*/
此致、
MInwoo
sl_flash_test_in_boot 不是我们在安全诊断库中提供的函数。 函数名称建议在引导时运行。 您能否确认该函数调用 我们在安全诊断库中提供的 sl_CRC_Calculate。
您能不能通过单步进入 sl_flash_test_in_boot 提供见解、这是故障的性质。 这是签名检查失败还是 CRC 计算失败。 是否有故障扇区? 闪存地址和 CRC 参数初始化是否正确? 您能否将它们与初始化时成功运行的代码进行比较。
以下有关 Hercules 中 CRC 模块的应用手册提供了详细信息和示例:
此致、
Rahul
您好 Rahul、
sl_flash_test_in_boot 是我使该函数检查预定义的 CRC 以检查二进制完整性。
代码如下所示、它只是检查预定义 CRC 和 CRC 模块校准 CRC 之间的 CRC。
void sl_flash_test_in_boot (void)
{
crcConfig_t sCrcParams;
sCrcParams.crc_channel = CRC_CH1;
sCrcParams.mode = CRC_FULL_CPU;
sCrcParams.pcount = 0U;//所有计数器在完全 CPU 模式下被禁用*/
sCrcParams.scount = 0U;//所有计数器在完全 CPU 模式下被禁用*/
sCrcParams.WDG_PRELOAD = 0U;//所有计数器在完全 CPU 模式下被禁用*/
sCrcParams.block_PRELOAD = 0U;//所有计数器在完全 CPU 模式下被禁用*/
crcSetConfig (crcREG、&sCrcParams);
int i = 0ul;
对于(i = 0ul;i <_my_crc_table.num_recs;i++)
{
volatile uint64 u64Signature = 0ULL;
crcModConfig_t sCrcModConfig;
sCrcModConfig.CRC_CHANNEL = CRC_CH1;
sCrcModConfig.mode = CRC_FULL_CPU;
sCrcModConfig.data_length =(_my_crc_table.recs[i].size + 7ul)/ 8ul;
sCrcModConfig.src_data_pat =(uint64*)_my_crc_table.recs[i].addr;
/*具有硬件模块、全 CPU 模式的计算 CRC */
crcChannelReset (crcREG、CRC_CH1);
crcSignGen (crcREG、&sCrcModConfig);
u64Signature = crcGetPSASig (crcREG、CRC_CH1);
/*检查 CRC */
if (u64Signature!=_my_crc_table.recs[i].crc_value)
{
while (1);//失败*/
}
其他
{
/*通过*/
}
}
}
我想知道、当 CRC 模块 在初始 化代码和自检代码之间执行时、它会对自我诊断测试产生影响。
此致、
米尼宇