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.

[参考译文] TMS320F28384D:从 f28375s 到 f28384d 的 EEPROM 仿真闪存迁移

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1062191/tms320f28384d-eeprom-emulation-flash-migration-from-f28375s-to-f28384d

器件型号:TMS320F28384D
主题中讨论的其他器件: C2000WARETMS320F28375S

尊敬的 Vamsi 先生:

              我们更新了用 TMS320F28384D 替代的定制板版本并成功执行示例程序,  使用 驱动程序库中的示例闪存程序将数据加载到 CPU1-FLASH 存储器 sector6 (0x98000)中。 C:\ti\c2000Ware_3_04_00_00\driverlib\f2838x\examples\C28x\FLASH (它使用闪存 API 成功存储数据)。

但是在 f28375s(EEPROM emulation)中,我们开发了将数据存储在0x82000和0x84000位置。 在  f28384d 的0x82000和0x84000位置读写数据时,加载程序时显示错误。

我们 的闪存相关的先前查询。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/988539/tms320f28375s-eeprom-read-process/3655289?tisearch=e2e-sitesearch&keymatch=%252525252520user%25252525253A441251#3655289

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/977652/tms320f28375s-flash-sector--erase-operation/3615375?tisearch=e2e-sitesearch&keymatch=%25252525252525252520user%2525252525252525253A441251#3615375

自定义电路板 版本1.0, 我们已成功使用 tms320f28375s 并存储、擦除数据。

我们当前的要求已取代 f28384d、并为  闪存移植了 EEPROM.c 和 EEPROM.h、但它不存储数据。

我们已将75s 移植到84d、并在此处附加文件供您参考。请确认 f28384d 的 EEPROM 文件中的更改、以便读取闪存中的 wirte 数据。

以下功能更改:

f28375s 工作代码

EEPROM_ProgramSingleByte1 (UINT16 DATA[]、UINT16 A、UINT16 WRITE_ADDRESS)

   内部参考;
   for (ref=0;ref<255;ref++)
   Write_Buffer1[ref]=0;
   uint16 i=0;
   uint16 sec=0;
   uint32 u32Index=0;
   EALLOW;
   PUMPREQUEST = 0x5A5A0002;
   将 eFlashPump_BANK0();
   Flash0EccRegs.ecc_enable.bit.enable = 0x0;
   for (i=0;<a;i++))
   WRITE_Buffer1[i]= DATA[i];                //准备要编程的数据
   Flash0EccRegs.ecc_enable.bit.enable = 0x0;//设置编程长度

   for (sec=0、u32Index=WRITE_ADDRESS;(u32Index <(WRITE_ADDRES+A))&&
   (oReturnCheck = Fapi_Status_Success);sec+=8、u32Index+=8)
   {
   oReturnCheck=Fapi_issueProgrammingCommand ((UINT32 *)(u32Index)、Write_Buffer1+sec、
                                                   8、
                                                   0、
                                                   0、
                                                   Fapi_DataOnly);
   }
   ReleaseFlashPump();
   EDIS;

f28384d-不工作


void EEPROM_ProgramSingleByte1 (uint16 data[]、uint16 a、uint16 write_address)

   内部参考;
   for (ref=0;ref<255;ref++)
   Write_Buffer1[ref]=0;
   uint16 i=0;
   uint16 sec=0;
   uint32 u32Index=0;
   EALLOW;
   PUMPREQUEST = 0x5A5A0002;
   FLASH_MPREMPumpSemaphore (FLASH_CPU1_WRAPMPER_);
   FLASH_enableECC (FLASH0ECC_BASE);
   for (i=0;<a;i++))
   WRITE_Buffer1[i]= DATA[i];                //准备要编程的数据
 // Flash0EccRegs.ecc_enable.bit.enable = 0x0;//设置编程长度
   FLASH_enableECC (FLASH0ECC_BASE);
   for (sec=0、u32Index=WRITE_ADDRESS;(u32Index <(WRITE_ADDRES+A))&&
   (oReturnCheck = Fapi_Status_Success);sec+=8、u32Index+=8)
   {
   oReturnCheck=Fapi_issueProgrammingCommand ((UINT32 *)(u32Index)、Write_Buffer1+sec、
                                                   8、
                                                   0、
                                                   0、
                                                   Fapi_DataOnly);
   }
   flash_releasePumpSemaphore();
   EDIS;

两个项目文件之间的差异是

(f28375s-it 是双头文件,函数具有位字段和 driverlib)

   PUMPREQUEST = 0x5A5A0002;
   将 eFlashPump_BANK0();

   Flash0EccRegs.ecc_enable.bit.enable = 0x0;

    ReleaseFlashPump();

(f28384d-我们使用 driverlib 移植了相同的函数、请指导我们解决问题。

   PUMPREQUEST = 0x5A5A0002;
   FLASH_MPREMPumpSemaphore (FLASH_CPU1_WRAPMPER_);
   FLASH_enableECC (FLASH0ECC_BASE);

   flash_releasePumpSemaphore();

我们使用了相同的闪存示例"2838x_flash_api_lnk.cmd 文件"

谢谢、此致、

Shriram J

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

    Shriram、您好!

    您是否将 F2837xS 闪存 API 替换为 F2838x 闪存 API?

    您是否在 F2838x 的 C28x 内核上看到此问题? 还是在 F2838x 的 CM 侧?

    当您说闪存 API 无法编程时、您从该 API 中得到了什么错误?  请提供更多详细信息。

    谢谢、此致、
    Vamsi

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

    尊敬的 Vamsi 先生:

    您是否将 F2837xS 闪存 API 替换为 F2838x 闪存 API?

         是的、在示例项目(C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f2838x\examples\C28x\flash\"flashapi_ex1_programming")中。我们包含了用于 f28384d 的 EEPROM 仿真文件 EEPROM.c 和 EEPROM.h。

    但对于 f28375s 项目 闪存、我们使用了双头文件(位字段和 driverlib)。

    我们使用驱动程序库函数从(f28375s-emmulation)移植到 f28384d。 请找到以下示例代码

    (f28375s-it 是双头文件,函数具有位字段和 driverlib)

       PUMPREQUEST = 0x5A5A0002;
       将 eFlashPump_BANK0();

       Flash0EccRegs.ecc_enable.bit.enable = 0x0;

        ReleaseFlashPump();

    (f28384d -我们使用 driverlib 移植了相同的函数。

       PUMPREQUEST = 0x5A5A0002;
       FLASH_MPREMPumpSemaphore (FLASH_CPU1_WRAPMPER_);
       FLASH_enableECC (FLASH0ECC_BASE);

       flash_releasePumpSemaphore();



        您是否在 F2838x 的 C28x 内核上看到此问题?

        我们面临 C28x 内核 CPU1的问题、

    我们能够使用 C28x 内核中的 driverlib 示例程序(C:\ti\c2000Ware_3_04_00_00\driverlib\f2838x\examples\C28x\FLASH)写入数据。

     但 epprom 仿真 EEPROM .c 和 eeporm.h、我们无法在 C28x 内核中执行相同的读取写入操作。


    还是在 F2838x 的 CM 侧?
    我们目前没有使用 CM 内核。

    当您说闪存 API 无法编程时、您从该 API 中得到了什么错误?  请提供更多详细信息

       项目文件编译成功无错误、只有一个警告#70-D 整数转换导致截断       

       请检查将 f28375s 表单移植到 f28384d (之前随附)的 EEPROM.c 和 EEPROM.h 文件

    我们正在使用 flashapi_ex1_programming 示例项目文件处理单个和多个字节存储并从 f28384d 闪存中检索... 请指导我们使用我们之前上传的 EEPROM.c 文件执行单字节读取写入函数的步骤。

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

    Shriram、

    我建议您调试移植的软件、并提出您可能遇到的任何特定问题。   

    我可能无法查看整个代码/项目。

    请使用步骤执行进行调试、并了解哪些工作正常/不工作。  我们可以根据这种情况帮助进行分析。

    谢谢、此致、

    Vamsi

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

    尊敬的 Vamshi 先生:

    感谢您的支持,我们的问题得到了解决,我们在调试时发现了数据类型错误,现在我们能够从84D 闪存读取和写入....

    我们提前举办圣诞节和新年、祝愿 TI 成员一切顺利。

    Rgds

    Shriram