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.

[参考译文] TMS570LC4357:TMS570LC4357

Guru**** 2448780 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/993691/tms570lc4357-tms570lc4357

器件型号:TMS570LC4357
您好!
我需要编写一个代码、以防止二进制映像写入存储器后覆盖它。
您能给我们一个有关如何执行此操作的想法吗?
我想在写入二进制映像后翻转变量、但变量值在复位后将恢复为原始值。 如何在复位后保留变量值?
我知道  您已将0x5A5A5A5A 值保存到复位后保留的存储器位置。   您如何将该值保存在特定位置、并在重置后使其不正常?  
谢谢、此致、
法罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以使用 F021闪存 API 向闪存写入密钥或标志。 在写入闪存之前、需要首先擦除闪存扇区。 您不能向内容不是0xFFFFFFFF 的闪存位置写入值。

    请参阅 DCAN 引导加载程序:

    http://software-dl.ti.com/hercules/hercules_docs/latest/hercules/Examples/Examples.html#bootloader

    bl_flash.c:调用闪存 API 以擦除闪存并将数据写入闪存的函数

    FLASH_defines.h:闪存扇区定义

    BL_DCAN.c 的第629行是将状态写入闪存:

    oReturnCheck = Fapi_UpdateStatusProgram (g_ulUpdateStatusAddr、(uint32_t)&g_pulUpdateSuccesss[0]、g_ulUpdateBufferSize);

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

    谢谢。 按照您的命令、我将尝试向闪存写入一个标志。 如何读取标志以防止覆盖二进制映像?

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

    您可以参阅引导加载程序代码中使用的示例。 如果标志不是魔术词、则图像将被覆盖。 如果已对魔术字进行编程、则可以跳过图像编程、或者可以将图像编程到其他位置:

    例如:

    //检查是否需要更新
    if (0 = CheckGPIOForceUpdate()&&(*(uint32_t *) app_status_address)= 0x5A5A5A5A)

       //跳过覆盖,跳转到应用程序

       G_ulTransferAddress =(uint32_t) APP_START_ADDRESS;
       ((void (*)(void)) g_ulTransferAddress)();
    }否则{

      //对图像进行编程  

      一