微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将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一次,这样就能正常操作了。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐