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.

[参考译文] RM44L520:使用 F021 API 访问闪存时出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1163594/rm44l520-issue-accessing-flash-with-f021-api

器件型号:RM44L520
主题中讨论的其他器件:HALCOGEN

使用 F021 API 访问闪存时遇到了一些问题。 我在项目中包含了 F021_API_CoretexR4_LE_V3D16.lib 文件、并在我的包含路径中添加了以下文件夹:

C:\ti\hercules\F021闪存 API\02.01.01\include

我按如下所示更新了 link.cmd 文件:

/*----------------------------------------------------------------------------*/
/* Memory Map                                                                 */

MEMORY
{
    VECTORS (X)  : origin=0x00000000 length=0x00000020
    KERNEL  (RX) : origin=0x00000020 length=0x00008000
    FLASH0  (RX) : origin=0x00008020 length=0x000B7FE0
    STACKS  (RW) : origin=0x08000000 length=0x00001000
    KRAM    (RW) : origin=0x08001000 length=0x00000800
    RAM     (RW) : origin=(0x08001000+0x00000800) length=(0x0001e400 - 0x00000800)
    FEE		(RW) : origin=0xF0200000 length=0x00004000 vfill=0xffffffff
    FEE1	(RW) : origin=0xF0204000 length=0x00004000 vfill=0xffffffff
    FEE2	(RW) : origin=0xF0208000 length=0x00004000 vfill=0xffffffff
    FEE3	(RW) : origin=0xF020C000 length=0x00004000 vfill=0xffffffff

/* USER CODE BEGIN (2) */
/* USER CODE END */
}

/* USER CODE BEGIN (3) */
/* USER CODE END */

/*----------------------------------------------------------------------------*/
/* Section Configuration                                                      */

SECTIONS
{
    .intvecs : {} > VECTORS
    /* FreeRTOS Kernel in protected region of Flash */
    .kernelTEXT   : {} > KERNEL
    .cinit        : {} > KERNEL
    .pinit        : {} > KERNEL
    /* Rest of code to user mode flash region */
    .text         : {} > FLASH0
    .const        : {} > FLASH0
    /* FreeRTOS Kernel data in protected region of RAM */
    .kernelBSS    : {} > KRAM
    .kernelHEAP   : {} > RAM
    .bss          : {} > RAM
    .data         : {} > RAM
    .sysmem  : {} > RAM

    FEE_TEXT_SECTION : {} > FLASH0
    FEE_CONST_SECTION : {} > FLASH0
    FEE_DATA_SECTION : {} > RAM


/* USER CODE BEGIN (4) */
/* USER CODE END */
}

编译和刷写电路板后、我单步使用调试器、在到达第一个 F021 API 调用时遇到以下错误:  

无法在"C:\Sid\work\GIT\catmcuauto-flashapi-f021-int\api\makefile/./Source/FlashStateMachine.InitializeFlashBanks.c "找到源文件
找到文件或编辑源查找路径以包括其位置。

我在下面链接了有关此错误的另一篇文章:

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/463257/tms570-fapi_initializeflashbanks-failure-with-linker-for-bootloader

根据其中一位评论者的建议、我检查了是否有几个内存位置可以使用下面显示的代码进行访问:

uint32 Read;

Read = *((volatile uint32_t *)0x000U);
Read = *((volatile uint32_t *)0x100U);
Read = *((volatile uint32_t *)0x200U);
Read = *((volatile uint32_t *)0x300U);

单步执行 这些代码行不会导致中止、因此我的问题似乎与原始海报不同。 如果有任何帮助,将不胜感激。  

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

    尊敬的 Andrew:

    您是否可以附上您的代码?

    --

    谢谢、此致、

    Jagadish。

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

    我无法提供整个项目、因为它包含专有代码、但我包含了应写入闪存的代码部分:

    m_newLogData.FaultID = eventID;
                m_newLogData.Day = g_SystemTime.Day;
                m_newLogData.Seconds = g_SystemTime.Seconds;
                m_newLogData.Params = m_eventHelp;
    
                /* Initialize the flash program  sequence for Bank7 */
                m_flashStatus = Fapi_initializeFlashBanks((uint32_t) HCLK_FREQ);
                m_flashStatus = Fapi_setActiveFlashBank(Fapi_FlashBank7);
                m_flashStatus = Fapi_enableEepromBankSectors(prgBANK7_ACTIVESECTORS, (uint32_t) Fapi_FlashSector0);
    
                /* Wait until Flash State Machine is ready */
                while (FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy) { ; /* Do Nothing */ }
                /*lint -e{740} Cast is OK */
                m_flashStatus = Fapi_issueProgrammingCommand((uint32_t*) m_pNewLog, (uint8_t*) (&m_newLogData), (uint8_t) prgBYTECNT_MAX, (uint8_t*) NULL, (uint8_t) NULL, Fapi_AutoEccGeneration);
                /* Wait until Flash State Machine is ready */
                while (FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy) { ; /* Do Nothing */ }
                while (FAPI_GET_FSM_STATUS != (uint32_t) Fapi_Status_Success) { ; /* Do Nothing */ }
    

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

    我已经附加了工程的旧调试版本、并更新了 F021元素以演示我遇到的问题。 如果您需要更多信息、请告诉我。

     e2e.ti.com/.../VM2_5F00_Code_5F00_FreeRTOS_5F00_Test.zip

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

    我只是跟进此事。  

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

    尊敬的 Andrew:

    我在下面的主题中看到了与我们的问题类似的问题、

    (5) TMS570LS3137:TI 闪存和 FEE API 函数问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    在 HALCoGen 中、该问题在他们禁用了 FEE 驱动器后得到了解决、但在我们的案例中、我想它已经被禁用。 是否可以确认相同?

    --

    谢谢、此致、

    Jagadish。

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

    感谢你的答复。 没错、我没有在 HALCoGen 中启用 FEE 驱动器。

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

    我现在已经尝试启用 FEE 驱动器、禁用 FEE 驱动器但保留创建的文件、禁用 FEE 驱动器并删除 FEE 文件、以及切换编译器版本。 需要注意的一件有趣的事情是、当我构建项目时、在以下步骤中花费了很长的时间:

     "C:/ti/ccs1110/ccs/utils/tiobj2bin/tiobj2bin.bat "VM2.out""VM2.bin""C:/ti/ccs1110/ccs/tools/compiler/ti-cgt-arm_20.2.6.LTS/bin/ofd470.exe "C:/ti/ccs1110/ccs/tools/compiler/ti-cgt-arm_20.2.6.LTS/bin/hex470.exe "C:/ti/ccs1110/ccs/utils/tiobj2bin/mkhex4bin.exe "

    我不确定这是否有很大的相关性、但可能会有所帮助。   

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

    闪存 API 函数仍然无法正常工作、但问题与我在上面描述的内容无关。 我收到上述错误消息的原因是 F021库文件中未包含源代码。 这会导致 CCS 提供有关无法单步执行该函数的错误消息。 如果您单步执行 API 调用、而不是进入函数、则看起来运行正常。 我会将其标记为已解决、并打开一个有关我遇到的实际问题的单独 TT。