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.

[参考译文] TMS570LS3137:SafetyMCU_Bootloader - Fapi_BlockEras()挂起

Guru**** 2477145 points
Other Parts Discussed in Thread: TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/686532/tms570ls3137-safetymcu_bootloader---fapi_blockerase-hangs

器件型号:TMS570LS3137

您好!

我正在使用  TMDS570LS31USB。 Code Composer Studio 8.0

F021闪存 API 版本  02.01.01。

我从    http://processors.wiki.ti.com/index.php/TMS570_Hercules_MCU_Bootloader 下载了 Hercules_MCU_Bootloader.zip

我正在运行此 zip 文件内 SafetyMCU_Bootloader\TMS570LS31x\boot_UART 中的 UART 引导加载程序。

引导加载程序会生成并运行。 我想测试下载一个小型示例应用、大约235KB。 我按"1"、选择.out 文件并通过 Teraterm 上的 Ymodem 发送。

我验证 Ymodem 是否传输了整个内容、因为字节数会影响文件大小。 到目前为止一切都很好。

 问题出在 fapi_BlockEras(),执行在该函数中永远挂起,在以下行: while (fapi_get_FSM_status!= fapi_Status_Success);

我已经执行了建议的第一和第二项修正,建议在以下员额中:

https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/680543?RM48L950-erasing-flash-sector-0-results-in-a-hang-in-Fapi-BlockErase-

但是执行仍然停留 在 while (fapi_get_FSM_status!= fapi_Status_Success);fapi_BlockErase ()内的行。

基本上、(1)我 将 Fapi_enableMainBankSecors (0xFFFE)替换为0xFFFF。 (2)  在 bl_link.cmd 中、我将 bl_flash.obj (.const)段添加到了 flashAPI 段中。

缺少什么?

我们是否需要通过 bl_link.cmd 文件将更多段添加到 flashAPI 中? 其他哪些部分?

提前感谢您、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为用0xFFFF 替换 Fapi_enableMainBankSectors (0xFFFE)在我的情况下不适用、因为我不关心擦除扇区0。
    下面是我添加的一行:

    部分

    .intvecs:{}>向量
    闪存 API:

    ..\Releases\Fapi_UserDefinedFunctions.obj (.text)
    ..\Release\BL_FLASH.obj (.text)

    //!!! 由我开始添加!!!
    ..\Release\BL_FLASH.obj (.const)
    //!!! 由我添加的结束!!!

    --library= F021_API_CortexR4_be.lib < FlashStateMachine.IssueFsmCommand.obj
    FlashStateMachine.SetActiveBank.obj
    FlashStateMachine.InitializeFlashBanks.obj
    FlashStateMachine.EnableMainSections.obj
    FlashStateMachine.IssueFsmCommand.obj
    FlashStateMachine.ScaleFclk.obj
    init.obj
    utilities.CalculateEcc.obj
    utilities.WaitDelay.obj
    utilities.CalculateFletcher.obj
    read.MarginByByByByByByByByByByByByByByBy
    Read.Common.obj
    read.FlushPipeline.obj
    read.wdService.obj
    ASYNC.WithAddress.obj
    program.obj >(.text)
    }load = flash_API、run = SRAM、load_start (api_load)、run_start (api_run)、size (api_size)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否替换:

    --library= F021_API_CortexR4_be.lib < FlashStateMachine.IssueFsmCommand.obj

    FlashStateMachine.SetActiveBank.obj

    FlashStateMachine.InitializeFlashBanks.obj

    FlashStateMachine.EnableMainSections.obj

    FlashStateMachine.IssueFsmCommand.obj

    FlashStateMachine.ScaleFclk.obj

    init.obj

    utilities.CalculateEcc.obj

    utilities.WaitDelay.obj

    utilities.CalculateFletcher.obj

    read.MarginByByByByByByByByByByByByByByBy

    Read.Common.obj

    read.FlushPipeline.obj

    read.wdService.obj

    ASYNC.WithAddress.obj

    program.obj >(.text)

    其中:

    --library= F021_API_CortexR4_be.lib (.text)

    在 linker.cmd 文件的 flashAPI 部分中

    您是否将 flashSPI 段复制到 SRAM 中? 正确、您不必将0xFFFE 更改为0xFFFF、因为您希望保护引导加载程序的第一个扇区。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。
    1-我根本没有修改原始的引导加载程序项目。 因此、_copyAPI 2RAM_();按照设计在_c_int00 ()内调用。 我在 RAM 中查看了存储器、并看到了与闪存 API 相关的函数名称、起始地址为0x08002000

    2-我按照您的建议尝试了连接器文件中的替换。 基本上--library= F021_API_CortexR4_be.lib (.text)而不是那个长列表。
    不幸的是、仍然存在相同的行为。 停留在 Fapi_BlockEras()。

    我正在尝试将 s/w 断点放在 Fapi_BlockEras()内。 无论调试是奇数、它都会跳转到奇数行。 不知道为什么? 这是因为 Fapi_BlockErase 正在 RAM 中运行吗?

    您是否能够使用此示例引导加载程序的下载功能?

    不确定要尝试或关注什么?

    是否有人能够执行此示例引导加载程序擦除并写入闪存?

    或者是否有任何擦除/写入闪存的示例应用? (适用于 TMS570LS3137系列)

    感谢您的帮助和指导、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 www.ti.com/.../spnu501h.pdf 上看到了这个
    ================================================================
    需要可读的存储器区域
    注意:F021闪存 API 库必须能够从地址0x000、0x100、0x200、
    0x300和 TI OTP 区域0xF008_0000 - 0xF00B_0000、以便 API 运行
    正确。
    ================================================================
    阅读此内容后、我为链接器文件中的 vectors 部分添加了 R 选项、如下所示:

    存储器

    //原始行:引导程序(X):origin=0x00000000 length=0x00000020
    引导程序(RX):origin=0x00000000 length=0x00000020
    Flash_API (RX):origin=0x00000020 length=0x000014E0
    FLASH0 (Rx):origin=0x00001500 length=0x002FEB00 //LS31x 闪存大小为0x300000
    SRAM (RW):origin=0x08002000 length=0x0002D000
    堆栈 (RW):origin=0x08000000 length=0x00002000


    这没有进行任何更改。
    不过、不确定这个0xF008_0000 - 0xF00B_0000区域。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 QJ、

    您的 TI 支持人员是否能够在 TMDS570LS31USB 开发板上通过 processors.wiki.ti.com/.../TMS570_Hercules_MCU_Bootloader 运行此 Hercules_MCU_Bootloader.zip?

    我最后尝试的是向 SRAM 添加"X"权限、因为 FLashAPI 在 SRAM 上运行。 但是、这也没有什么不同。
    我还根据上述注释添加了 OTP 区域行。 这也没有什么不同。

    存储器

    //原始行:引导程序(X):origin=0x00000000 length=0x00000020
    引导程序(RX):origin=0x00000000 length=0x00000020
    Flash_API (RX):origin=0x00000020 length=0x000014E0
    FLASH0 (RX):origin=0x00001500 length=0x002FEB00 //LS31x Flash size 是0x300000
    //原始行:SRAM (RW):origin=0x08002000 length=0x0002D000
    SRAM (rwx):origin=0x08002000 length=0x0002D000
    栈(RW):origin=0x08000000 length=0x00002000
    //由我添加
    OTP (RW):origin=0xF0080000 length=0x00030000


    我希望 TI 的各位可以在 TMDS570LS31USB 上测试这个 Hercules_MCU_Bootloader.zip。
    提前感谢您、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    应用程序映像的起始地址是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我注意到频率错误。 调用 Fapi_initiataleFlashBanks()时,我必须将频率减半,从160 MHz 降低到80 MHz。
    我不知道为什么80MHz 工作、而不是160。
    是否有关于每个闪存操作所需频率的任何文档或说明、例如擦除或编程?

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

    fapi_initializeFlashBanks()中的频率应为系统时钟。 如果您使用 USB 记忆棒、我们不建议在100MHz 以上运行器件、否则电路板会变得很热。