jankey2020 发表于 2021-8-4 11:36:12

求助MIMXRT1010-EVK FlashLoader APP跳转问题

本帖最后由 jankey2020 于 2021-8-4 11:45 编辑

背景需求:
1、通过移植flashloader跳转函数部分,实现APP的跳转,直接在flash上运行APP
2、实现第一步后,实现使用USB-HID更新APP
目前试验情况:
1、APP程序
参考SDK led_blinky例程(见附件led_blinky.zip),修改了scf文件里的地址信息,对应的修改了keil编译器的Target中ROM的烧录地址,main函数屏蔽systemtick相关内容,上电后仅初始化LED相关IO及时钟,随后点亮LED。此程序作为跳转后运行的APP程序。
2、引导程序(实现跳转的程序)
2.1基于SDK flexspi----polling_transfer例程(见附件polling_transfer.zip),参考flashloader例程中的jump_to_application函数(见下图),把它移植到polling_transfer中
http://mail.163.com/js6/s?func=mbox:getMessageData&mid=462:xtbBzgDkp1QHNgSuGQAAsb&part=3

2.2 屏蔽例程中main中擦写flash的操作函数,防止擦掉APP的内容。随后调用jump函数将APP入口地址传进去,如jump_to_application(0x60080004,0x60080000);借此实现跳转

主要思路:
查看flexspi的scf文件,如下
http://mail.163.com/js6/s?func=mbox:getMessageData&mid=462:xtbBzgDkp1QHNgSuGQAAsb&part=4
由此可见它是把flash操作函数加载到ram运行的,通过keil仿真也验证了。因此我将flashloader的函数也移植到该文件中,运行时也在ram调用,随后再跳转到APP地址,直接在flash上运行(XIP)

遇到的问题:
1、跳转前是否需要关中断,关时钟等操作,是否还需要其他配置,程序的配置及编译器的配置?
2、APP里的scf文件修改后的地址是否有误,加载区和运行区的配置是否正确,堆栈的设置?(最主要的问题)
3、如何确定是否跳转成功,是否有工具测试







jankey2020 发表于 2021-8-4 11:39:22

添加附件
ps:这种思路是否正确,有没有可参考的资料

eric2013 发表于 2021-8-7 10:09:29

帮顶。

jankey2020 发表于 2021-8-13 17:44:57

已实现以下功能,记录一下成功的喜悦
1、通过串口/USB对APP进行更新,完成后自动跳转至APP运行
2、在APP运行时,需要更新时可按下按键跳回BootLoader进行更新

总结分享一下心得:
1、正确加载APP入口堆栈实现跳转;
2、Flash地址空间的规划,就是BootLoader多大,app多大;
3、Flexspi读写操作flash,这部分内容要加载到ram操作;
4、与上位机的通讯,接收数据烧写时要注意关系统中断
5、利用keil仿真查看memory地址的数据是否有异常,数据是否写到了目的地址
6、用抓包工具看是否有丢包

页: [1]
查看完整版本: 求助MIMXRT1010-EVK FlashLoader APP跳转问题