Thread 中讨论的其他器件: C2000WARE
工具与软件:
您好!
我正在使用 TMS320F280049C MCU、并希望器件通过 SCI 实现 LDFU。 我一直在阅读相关文档:sprabv4、tiduey4d、spruiu8a、尤其是测试提供的设计示例
..\C2000Ware_5_00_00_00\driverlib\f28004x\examples\flash\flashapi_ex2_XXXX
该方法有效、但当代码已在闪存组0中运行时意外上传要用于闪存组0的固件时、该方法会发生故障(闪存组1也是如此)。 TIDUEY4D 第4节对此也进行了评论:"使用这种方法时、用户需要了解其固件可执行文件的目标闪存组。 因此、用户需要为其工程维护2个链接器命令文件(如果用户使用2个闪存组)。 这可能很麻烦、因此、此处提出并实施了一种替代解决方案。"
我的偏好是避免需要维护2个链接器命令文件、并且主机需要跟踪当前运行的固件(适用于组0或组1)。 TIDUEY4D 第4节描述了一个使用 F28003x 的示例、其中"固件可执行文件始终构建为加载到闪存组1中并从闪存组0运行。 这可以只用一个链接器命令文件来完成。 与应用程序中的函数加载到闪存中并从 RAM 运行以提高性能类似、此处也需要一个存储器副本。 这是在 LFU 引导加载程序(即闪存内核)中实现的。"
问题1:为什么要费心将固件传输到闪存组1来传输到闪存组0? 开始编写闪存组0难道不会更简单吗?
此帖子会评论"Bank0无法更新 Bank0 -这将违反闪存操作-您无法从正在执行(读取)的同一闪存组中擦除/编程。"
问题2:上面带下划线的陈述是否真的正确? 如果 LDFU 固件从扇区1运行(使用链接器命令文件和 CODE_SECTION pragma 将 liveDFU 函数分配给0x81000)、那么为什么它不能擦除和更新扇区2-15?
有一些使用 F28002x 的 LDFU 示例、其中只有一个闪存存储体。 在这些示例中、通过确保 LDFU 函数(ldfuLoad、ldfuCopyData、revInit 等…)可以实现 LDFU。 从 RAM 运行、而不是使用 TI.ramfunc 的闪存。
问题3:为什么并非总是如此? (即使有多个独立的闪存存储体可用…) 设置 DFU 以使其从 RAM 运行是否存在缺点?
Queston 4:使用 TI.ramfunc 进行进一步阅读的最佳信息来源是什么?
谢谢!
Laszlo