将PC上的数据导入到MCU的External Flash上续

在Keil和Segger Embeded Studio上实现Flashload不成功后,转到用Segger的JLink的CommanderScript的配合终于完成了将PC上的数据成功传到扩展Flash上了。

将实现方法以及碰见的坑整理一下:

  • 实现方法:
    • 在Apollo3 MCU上用Keil开发一个程序,将指定地址的Internal Flash的数据块Copy到External Flash上。
    • 由于Internal Flash的空间有限,通常是2MB,算上已经使用的,也就是能有1MB左右的空间可以做搬运的中转站,所以在MCU跑的的程序每次只能搬运1MB内容
    • 在PC上用C语言开发一个将大文件切割成1MB小文件的工具,将文件分割成数个1MB大小的文件。
    • 写JLink Command Script将1MB的文件从PC 搬到Internal Flash上
    • 写JLink Command Script通知MCU的程序,将数据搬到External Flash上。
    • JLink 与MCU的程序通过 JLink 命令(w4,m32命令)与MCU的程序访问同一内存数据空间,来通知MCU程序数据已经准备好了,JLink通过Sleep来确认MCU的搬运结果
  • 碰见的坑:
    • 每次Loadbin后,MCU的程序会Halt了。Jlink与MCU之间的内存通信空间就不正常了。
      • 刚开始的时候,操作顺序是在一个script中,调用loadbin将数据文件载入Internel Flash上,然后通过w4命令通知MCU去搬运,发现两边根本碰不上。
        • 解决方法:在Loadbin数据文件后,再次调用将MCU的运行程序Loadbin加载进入MCU上,调用reset/g两个命令才能正常执行。
    • 每次Loadbin,Jlink会检查Load的数据与MCU的Internal Flash的数据是否一致,如果没有变化,不会做loadbin操作。导致加载MCU的搬运程序不会被重置MCU运行环境,也不能正常进行搬运工作。
      • 解决方法:每次调用loadbin之前将对应的Internal Flash地址段Erase一次,这样就能正常操作了。

 

posted @   magicduan  阅读(215)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示