电子说
介绍
考虑到瑞萨的MCUBoot的ROM占用和某些客户的需求,本篇主要讲述在不使用瑞萨MCUboot驱动下,如何实现简单的bootloader功能。
主要内容
在写代码之前,首先必须规划Boot和App的存放位置,如下图。我使用的是R7FA2L1AB2DFM,有256K的ROM。我把Boot从0x00开始存储,预计存储7K左右;App从0x4000开始存储。为了在仿真时区分Boot和App,这里选择了点亮LED的方式来区分,当只亮一个LED时表示当前是Boot在运行,当两个LED交替闪烁时代表App在运行。
BOOT工程:
1创建一个boot工程,添加UART和Flash驱动,Flash驱动只选Code Flash Programming,选择只亮一个LED灯来区别BOOT和APP。
2编写代码,实现串口接收串口助手发来的APP.bin
3当串口接收完后,用Flash驱动把接收到的数据写到APP存储的rom地址。这里我选择把APP存在0x4000
4调用下图函数,实现APP跳转。注意,跳转前先把所有运行的驱动关闭。
5编译,可对比得出,精简版bootloader只是用了7K左右的rom,比使用了MCUboot后的ROM占用少5K。
APP工程:
1实现APP的功能逻辑代码,这里我选择是使用GPT定时器,让开发板的两个LED灯交替闪烁。
2通过文本打开fsp.ld文件,添加红框位置的语句,地址与BOOT工程的跳转地址对应。这个步骤的目的是为了让APP工程以0x4000这个地址作为起始地址,它的向量表也会以这个地址作为基准来存储。
3编译并生成bin文件。
仿真调试:
仿真BOOT工程,在PC端用串口助手烧录APP.bin,可以看到开发板从一开始只亮一个LED到两个LED交替闪烁。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !