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.

[参考译文] TM4C1231H6PZ:BL_CRC32.c 中的 CheckImageCRC32

Guru**** 2481465 points
Other Parts Discussed in Thread: TM4C1231H6PZ

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/701789/tm4c1231h6pz-checkimagecrc32-in-bl_crc32-c

器件型号:TM4C1231H6PZ
主题中讨论的其他器件: TM4C123

大家好、

我们希望 在设计中使用 TM4C1231H6PZ。 我们将查看 boot_USB 示例以及 CheckImageCRC32函数的 BL_CRC32.c 文件中的内容。 根据 Class_IS_TM4C129的定义、似乎这将被定义为0、我们将输入 if-else 语句的 else 部分。 由于 APP_START_ADDRESS 大于0x800、因此我们得到一个负数。 此0x800来自哪里? 这里是否有拼写错误?

uint32_t
CheckImageCRC32 (uint32_t * pui32Image)
{
uint32_t ui32Loop、ui32FlashSize、ui32CRC;

//
//确定闪存的大小(给出图像的上限)
//大小)。
//
if (class_in_TM4C129)
{
//
//从 FLASH_PP 寄存器获取闪存大小。
//
ui32FlashSize =((2048 *((HWREG (FLASH_PP)& FLASH_PP_SIZE)+ 1))-
app_start_address);
}
其他
{
//
//计算闪存的大小。
//
ui32FlashSize =(((HWREG (FLASH_FSIZE)& FLASH_FSIZE_SIZE_M)<< 11)+
0x800 - APP_START_ADDRESS);
}

//...

} 

此致、

Akash Patel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Akash、
    我不认为它是(0x800 - APP_START_ADDRESS)、而是(((HWREG (FLASH_FSIZE)& FLASH_FSIZE_SIZE_M)<< 11)+ 0x800 - APP_START_ADDRESS)。 我认为0x800可能来自 CRC 值存储在矢量表的末尾这一事实。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Akash Patel">此0x800来自哪里? 我认为这是因为闪存大小(FSIZE)寄存器的值是闪存的大小、单位为0x800字节减1。

    即、大小为0x7f 的 FSIZE 值表示闪存大小为((0x7f +1)* 0x800)、为256KB。

    根据 TM4C129的情况、可以将 TM4C123闪存大小的计算重新编写为以下等效表达式:

    其他
    {
    //
    //计算闪存的大小。
    //
    ui32FlashSize =((2048 *(HWREG (FLASH_FSIZE)& FLASH_FSIZE + 1))-
    app_start_address);
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    切斯特、您好!
    感谢您澄清疑问!