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.

[参考译文] TM4C1294NCPDT:引导加载程序 CRC32

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1434578/tm4c1294ncpdt-bootloader-crc32

器件型号:TM4C1294NCPDT

工具与软件:

大家好、我已经在引导加载程序中启用了 CRC32检查、之后我 注意到了我的问题。

我已经添加了16字节标头并添加了标记字、计算了 CRC32值 binpack 可执行文件。

我注意到的第一个问题是这个

    pui32App = (uint32_t *)APP_START_ADDRESS;
    if((pui32App[0] == 0xffffffff) ||
       ((pui32App[0] & 0xfff00000) != 0x20000000) ||
       (pui32App[1] == 0xffffffff) ||
       ((pui32App[1] & 0xfff00001) != 0x00000001))
    {
        return(1);
    }


由于标头位于二进制的顶部,因此该代码将始终返回1 (标记字: 0xFF01FF02和 0xFF03FF04 )。

在我更改此代码后  

    pui32App = (uint32_t *)APP_START_ADDRESS;
    if((pui32App[4] == 0xffffffff) ||
       ((pui32App[4] & 0xfff00000) != 0x20000000) ||
       (pui32App[5] == 0xffffffff) ||
       ((pui32App[5] & 0xfff00001) != 0x00000001))
    {
        return(1);
    }






它已通过 CRC32检查、但我的代码未启动。

是否需要更改调用应用值


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价用户 id="591762" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1434578/tm4c1294ncpdt-bootloader-crc32 "]我已经添加了16字节标头并添加了标记字、计算了 CRC32值 二进制包可执行文件。
    [报价]

    您如何调用 binpack?

    [报价用户 id="591762" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1434578/tm4c1294ncpdt-bootloader-crc32 "]

    我注意到的第一个问题是这个

    全屏
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    pu32App =(uint32_t *) app_start_address
    if (((pui32App[0]= 0xffffffff)||
    ((pui32App[0]0xfff00000)!= 0x20000000)||
    (pui32App[1]= 0xffffffff)||
    ((pui32App[1]和0xfff00001)!= 0x00000001))
    返回(1)
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    由于标头位于二进制文件的顶部、因此该代码将始终返回1 (标记字:0xFF01FF02和 0xFF03FF04)。

    此代码正在检查 从 APP_START_ADDRESS 开始的固件是否存在堆栈指针和 ResetISR。 如果 APP_START_ADDRESS 为0x4000、则它会检查地址0x4000和0x4004是否为0xFFFFFFFF。 如果这两个位置不是0xFFFFFFFF、则表示存在有效的程序映像。 如果存在有效的固件映像、引导加载程序会分支到应用固件以供执行。 如果它们为0xFFFFFFFF、则引导加载程序将启动。 执行 binpack 后、请参阅以下程序图像。 如果您查看地址0x4210、这是映像的长度。 在0x4214处、这是 CRC 值。  

    我不确定您为什么要修改代码。  

    下面的这篇文章将提供帮助。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/537681/crc32-binpack-utility-image-info-header-how-to-add-image-info-header-for-binpack-to-store-length-and-crc-of-image-at-that-location/1958739#1958739

    下面的另一个帖子、由 Peter 回复关于移位向量表。 您可以使用 "向量表偏移量"寄存器更改为新的向量表地址。

    https://e2e.ti.com/support/microcontrollers/other/f/908/p/688988/2541680?tisearch=e2e-sitesearch&keymatch=binpack#2541680

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

    哦、谢谢您、我会尝试更改标题放置位置