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.

[参考译文] 具有闪存 F021 API 的 TMS570LC0714

Guru**** 2609285 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/759336/tms570lc0714-with-flash-f021-api

您好!
 
我正在使用 TMS570LC0714控制器。 我想对一个可擦除和编程的引导加载程序软件进行编程
闪存组0。 但我在擦除闪存区域时遇到问题。
因此、我知道、如果我想擦除闪存组0的闪存部分、fapi 函数必须在 RAM 区域中运行。

以下几点显示了我所做的工作:

1) 我使用不带浮点单元的控制器、因此我使用了 Lib "F021_API_CortexR4_be.lib"。 希望这是正确的。
2) 我按照以下方式调整了链接器命令文件:

   引导程序   (X) :origin=0x00000000 length=0x00000020
   Flash_API (RX):origin=0x00000020 length=0x000014E0
   FLASH0    (RX):origin=0x00001500 length=0x0001EB00
   堆栈    (RW):origin=0x08000000 length=0x00001500
   RAM_API   (rwx):origin=0x08001500 length=0x0000EB00
   RAM       (RW):origin=0x08010000 length=0x00010000
   AJSM      (RX):origin=0xF0000000 length=0x00000010

   闪加匹:
   {
    --library= F021_API_CortexR4_be.lib (.text)
   }load = flash_API、run = RAM_API、load_start (FlashApi_LoadStart)、run_start (FlashApi_RunStart)、size (FlashApi_LoadSize)

3) 我在擦除闪存之前将所有闪存数据复制到 RAM 中、如下所示:

void CopyAppiFromFlashToRam (void){

   uint32大小;
   uint32 i;
   大小=(uint32)&FlashApi_LoadSize;

   for (i=0;<size;i++))
   {
       (((char *)&FlashApi_RunStart)[i]=((char *)&FlashApi_LoadStart)[i];
   }


4) 我擦除闪存的函数称为 Fapi_BlockErase (闪存区域)。
以下映射文件列表显示了具有相应闪存/RAM 地址的 Fapi 函数。

000086d0 Fapi_BlockErase

所有 fapi 函数都位于 RAM 区域、也是 Fapi_serviceWatchdogTimer 函数。                   
08001c49 fapi_calculateEcc                   
08001bc5 Fapi_calculateFletcherChecksum      
08001a55 Fapi_enableEpromBankSectors        
08001ad5 Fapi_enableMainBankSectors          
08001c5d Fapi_getNumberOfBankSectors         
08001501 Fapi_initializeFlashBanks           
08001bfd Fapi_issue19 CommandWithAddress   
080018dd Fapi_issueProgrammingCommand        
08001c8c Fapi_serviceWatchdogTimer           
08001761 Fapi_setActiveFlashBank             
00000794 FlashApi_LoadSize                   
00000020 FlashApi_LoadStart                  
08001500 FlashApi_RunStart

但它仍然不会擦除闪存。 有什么想法?

此致
布鲁诺

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

    您可以使用正确的 F021 API 库。 仅将 F021 API 复制到 RAM 是不够的。 以下函数也应复制到 RAM:

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

    您好!

    我使用 fash lib 02.01.01。

    我的程序代码中有错误。 在我的代码中、我尝试擦除组0、扇区7、并且我在枚举参数表中使用了以下代码:

    Number Status = Fapi_enableMainBankSecors (Fapi_FlashSector7);

    但它必须是这样

    Number Status = Fapi_enableMainBankSectors (0x0080u);

    现在、如果我使用调试器、我可以擦除闪存。 但是、如果我在没有获得"prefetchEntry"的情况下执行该操作、则会激活控制器的 nERROR 引脚。

    有什么想法?

    此致

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

    我解决了我的问题。 在文件"fapiFunctions.h"中、用户定义的函数仅为:
    extern Fapi_StatusType Fapi_serviceWatchdogTimer (void);

    因此、我不会对其他两个函数进行编程:
    Fapi_StatusType Fapi_setupEepromSectorEnable (void)和
    Fapi_StatusType Fapi_setupBankSectorEnable (空)

    因为我希望程序尽可能短。 但原因是需要该函数。

    谢谢、此致