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.

[参考译文] CCS/TMS320F28035:尝试使用 F2803x_flash_kernel 示例将应用程序编程到闪存中

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/647755/ccs-tms320f28035-trying-to-program-application-into-flash-using-f2803x_flash_kernel-example

器件型号:TMS320F28035

工具/软件:Code Composer Studio

那么、这里是我要尝试执行的操作。

我有一位客户希望能够通过 CAN 将新的独立应用写入闪存。  我已获取 F2803x_flash_kernel 示例、并仅对其进行了一点修改以支持 CAN。  我还将评估板配置为引导至 CAN_BOOT 模式。

我能够引导至 CAN_BOOT 模式、并将修改后的闪存内核写入 RAM (我认为)。  我已经使用硬件断点验证了这一点。  但是、我无法将独立应用程序写入闪存。  我知道应用程序可以正常工作、因为它是我一直使用的一个、它通过 JTAG 对闪存进行编程。  从闪存中一个良好的应用程序开始(通过 JTAG 写入)、在通过 Code Composer 中的存储器浏览器观察闪存存储器时、闪存内核似乎正在正常擦除闪存存储器、 但是、随着 CAN 数据字节的发送、闪存存储器字节在0x0000和0xFFFF 之间来回循环、而不是像我所说的那样以错误的方式循环。  闪存永远不会写入任何有意义的数据。  当 CAN 传输结束时、所有 Flash 存储器为0xFFFF。  我的 CAN 数据传输是使用 hex2000与我编写的脚本相结合创建的、以构建2字节 CAN 消息的序列。  我非常确信我能够正确地执行此操作、因为我可以通过 CAN 成功地将闪存内核和为 RAM 构建的应用写入 RAM。  我似乎无法使用闪存内核写入闪存。

我能得到的任何帮助都很好。  我在修改后的闪存内核示例中找不到任何错误。  我已经注释掉 了闪存内核中的 InitPll 调用、因为我希望保持与引导 ROM 设置的所有内容相同。

编辑: 所以我现在有两个问题。

1) 1)我发现闪存擦除工作正常、但需要一段时间、并且 CopyData 似乎只是在擦除闪存时尝试对其进行编程。  如果我将 CAN 数据的第一个序列发送到第一个块大小、然后等待闪存存储器被擦除、然后发送剩余的 CAN 数据、那么写入闪存似乎就可以了。  这是已知的限制吗?  在您知道闪存被擦除之前、您无法通过 CAN 发送实际的写入数据?

2) 2)尽管我的应用程序似乎对闪存执行写操作、但当它引导至闪存时、它不会运行应用程序。  我无法判断它在做什么。  我比较了闪存存储器中内核写入后的前几十个字与 Code Composer 通过 JTAG 写入的字、它们匹配、因此我假设闪存存储器写入正确。  也许我需要检查一下所有内容?

EDIT2:另一个线索、当我通过 CAN 闪存内核进行编程时、闪存入口点(0x3F7FF6 - 0x3F 7FF7)包含0xFFFF。  但是、当我通过 code composer JTAG 进行编程时、该位置包含一个有效值(0x007E 和0x88B0)、这对我来说似乎很奇怪。  我想我不确定该值的含义。  我想它将包含我的闪存应用程序的入口点。

EDIT3:嗯,我的 CAN 流量似乎确实有写入该点的命令,它只是..... 我猜不是这样。

02 00
3F 00
F6 7F
7E 00
B0 88

EDIT4:因此、如果我更改 CAN 传输、使其 首先写入0x3F7FF6、那么写入操作就可以了。  但是、如果发送我的整个应用程序、它似乎在中间的某个位置"放弃"、因为最后要写入的一组地址只是0xFFFF。  我需要对 CopyData 函数进行故障排除、因为它在一段时间后似乎无法正常工作。

EDI5.5:它的工作原理!! 遗憾的是、为了使其正常工作、我必须将 CAN 传输从10ms 减慢至100ms。  我不知道为什么 RAM 之外的闪存内核无法跟上10ms 的速度。  此外、在100ms 时闪烁会花费太长的时间。  我需要弄清楚为什么它需要这么慢。  此外、还存在一个问题、即在发送实际数据进行写入之前、必须等待未知的闪存擦除时间。

我已附加修改后的闪存内核项目。

e2e.ti.com/.../f2803x_5F00_flash_5F00_kernel.zip

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

    我对通过 CAN 刷写器件具有相同的兴趣。 您上传的修改后的闪存内核项目也与我想解决该主题的方法类似。
    但是、我不理解以下几点:
    1.如何将器件配置为引导至 CAN_boot 模式? 是通过修改 OTP 来实现的? 到目前为止、我的理解是 OTP 可以编程一次、因此在将 OTP 配置为 CAN_BOOT 后无法从闪存引导。
    2.您用于加载应用程序的 PC 工具/软件是什么? 是 TI 的定制软件还是 serial_flash_programr.exe 的修改版本、还是第三方的软件?

    我希望 TI 的某个人能帮您找到解决方案。

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

    1) 1)是的、这就是我到目前为止所做的事情。  我已修改 OTP。  是的、它是一次性可编程的。  我仍处于研发阶段、因此我现在只想让一些东西发挥作用。

    2) 2)我一直通过 CAN 来加载应用、每次发送2个字节。  必须首先使用以下命令通过 hex2000将.out 文件转换为串行传输字节。   hex2000 -boot -gpio8 -a