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-EP:F021 API 函数调用失败

Guru**** 2595805 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/1030259/tms570ls3137-ep-f021-api-fails-with-function-call

器件型号:TMS570LS3137-EP
主题中讨论的其他器件:TMS570LS3137

您好!

我们遇到了 TMS570LS3137上的 F021闪存 API 问题。 我们将按照 spnu501h 中概述的过程通过以下示例擦除闪存:

(笑声)

FlashStatus = Fapi_issue19OPedCommandAddress (Fapi_EraseSector、
(uint32_t*)(Bank_0_SEC_7_ADDR +
(bytes_per_erase_sector * numSecors));

//等待闪存完成
while (FAPI_CHECK_FSM_READY_BUSY!= Fapi_Status_FsmReady)
//不执行任何操作

//检查闪存擦除的状态
if ((fapi_get_FSM_status!= 0U)||
(flashStatus!= fapi_Status_Success)
//如果闪存发生故障并从擦除循环中断,则将返回状态设置为失败
RetVal = ST_FAIL;
中断;
问题是、此代码在 while 循环中不是可测试的单位。 因此、我们将其更改为使用以下函数:
bol_t isFlashReady (空)
   返回 FAPI_CHECK_FSM_READY_BUSY!= Fapi_Status_FsmReady;
//等待闪存完成
while (!isFlashReady())
//不执行任何操作
这种类型的更改失败、闪存驱动程序不再工作。 闪存擦除失败。
我们将在过程开始时将闪存 API 复制到 RAM、因此我想知道问题是否与此新函数的运行位置有关。
对此有什么想法吗?
非常感谢您的观看。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Justin、

    TMS570LS3137有两个闪存组。 如果您的代码可以擦除闪存组1、但无法擦除组0、则某些与 API 相关的函数和变量不会复制到 SRAM、并从 SRAM 执行。

     是否从 SRAM 执行 bol_t isFlashReady (void)函数?

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

    它应该从 SRAM 中执行、因为它与其他 API 相关函数位于同一文件中、并且我们确实将该目标文件添加到复制到 SRAM 的闪存 API 中。 以下是链接器文件中的内容、该文件将这些内容包含在闪存 API 中、然后在初始化期间将其复制到 SRAM 中。

    部分

    .intvecs:{}> boot_vectors
    boot_version:{}> boot_version
    闪存 API:

    ..\Debug_TI\Fapi_UserDefinedFunctions.obj (.text)
    ..\Debug__TI\flashdrv.obj (.text)
    ..\Debug__TI\external_watchdog.obj (.text)

    --library=./ext/F021_Flash_API_02.01.01/F021_API_CortexR4_BE_V3D16.lib (.text)
    }load = flash_API、run = SRAM、load_start (api_load)、run_start (api_run)、size (api_size)

    是否有办法告知 isFlashReady 正在从 SRAM 运行?

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

    我们确实调用  _copyAPI 2RAM_();在初始化期间将 FLASH_API 中的所有内容移动到 SRAM。

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

    映射文件将告诉您  isFlashReady (void) 的位置