我正在使用 TMS320F2.8377万D处理器。 我修改了双闪存应用程序示例,以便在CPU1-2上实现闪存擦除/写入。
两个处理器上的应用程序都启用了监视程序,并在闪存操作之间为其提供服务。
CPU1上的应用程序擦除多个闪存扇区(C,H,I,J),然后使用USB中的数据写入它们。 然后将IPC标记设置为允许CPU2执行相同操作。
启动时,CPU2等待设置IPC标志。 然后擦除多个扇区(C,H,I,J),为CPU1设置IPC标志并进入无限循环。
CPU2设置IPC标记后,CPU1将擦除一个闪存扇区(A),并进入无限循环,而不维修看门狗。 这将触发系统重新引导和操作重新启动。
单独运行此应用程序会导致多个扇区被擦除,并在引导之间进行编程。
大多数时间操作正常。 但是,有时在擦除操作期间,系统会挂起,并在监视程序过期时重新引导。
令人不安的是,在崩溃和重新启动之间,设置为输出的多个GPIO会改变其状态(一些以前的低GPIO会变为高电平,而一些高电平的GPIO会变为低电平)。
这种现象可在下图中看到。 某些GPIO线路在代码操作期间设置,以可视化何时发生的情况。
图像顶部的完整时间线波形显示了重启之间的多个操作。
当黄线变低时,操作开始,当变高时,CPU1将变为无限循环,并停止对看门狗进行维护。 当线条变低时,程序被重置并重新启动。
可以看到两个完整的操作-重新引导循环,其中一个循环失败。
屏幕截图的放大部分显示更改其状态的GPIO行。 这些更改都不会在代码中执行。
蓝色和黄色GPIO在闪存擦除之前设置为高电压,其余切换在系统崩溃时进行。
我已确保已擦除的闪存未分配给命令链接程序文件中的系统资源。
FAPI函数是从RAMLS3-4加载和运行的。
运行此程序一段时间并在不应写入的GPIO上触发,表明在闪存擦除期间发生此崩溃和GPIO故障。
有时是在应用程序中间,有时是在应用程序结束时。
任何关于可能导致这种情况的想法都很有帮助。
谢谢Ugnius。