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.

[参考译文] TMS320F2808:API 闪存擦除问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1076667/tms320f2808-api-flash-erase-issues

部件号:TMS320F2808

大家好,我的问题是 ,使用 RAM 中的 Flash2808_API_V302.lib 会产生闪存擦除问题-它挂起或跳到 Flash_API 版本十六进制()位置。

由于本机引导加载程序只将上载的十六进制文件写入 RAM,我需要开发一个从 RAM 运行的闪存引导加载程序,以便它可以上载下一个十六进制文件并将其写入闪存。

我使用 了 F28335_CAN_FLASH 内核作为基础,并为 F2808对其进行了修改。 我可以 在 CC 中从 RAM 运行新的 F2808_CAN_FLASH_kernel(),直到我进入 Flash_Erase 函数。  Flash_API 版本十六进制() 返回正确的版本。  

我尝试使用和不使用以下内容: #pragma code_section (<functions>,".TI.ramfunc");

我使用 的是2808_RAM_lnk.cmd,我尝试使用不同的 RAM 区域来实现“功能”      :> RAML1   page =0英寸

我的目标是使生产能够 启动 GPIO18,让 F2808进入引导加载程序模式,加载 F2808_CAN_FLASH 核心函数值。hex 文件以设置 F2808以便能够写入 Flash。 然后 ,在 F2808_CAN_FLASH 内核十六进制文件上载后,operational_code.hex 将上载并刻录到闪存中。

有什么想法阻止 Flash_Erase 完成?

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

    我认为图片可能会有所帮助。 Flash_Erase 位于0x009010时,执行 Step Over (F6)时,Flash_Erase 调用将跳至0x3fa60a -返回 Flash_API 版本十六进制()。

    我发现,如果我在  Flash_API 版本十六进制()调用下放置 Flash_Erase 的副本,它就像预期的那样工作-没有奇怪的跳跃。

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

    似乎问题 出在将 项目移植到 F2808时,我将 UINT16 progbuf[PROG_buffer_length]放在 CopyData()中,它正在杀死堆栈。