如何实现简单的bootloader功能

电子说

1.3w人已加入

描述

介绍

考虑到瑞萨的MCUBoot的ROM占用和某些客户的需求,本篇主要讲述在不使用瑞萨MCUboot驱动下,如何实现简单的bootloader功能。

主要内容

在写代码之前,首先必须规划Boot和App的存放位置,如下图。我使用的是R7FA2L1AB2DFM,有256K的ROM。我把Boot从0x00开始存储,预计存储7K左右;App从0x4000开始存储。为了在仿真时区分Boot和App,这里选择了点亮LED的方式来区分,当只亮一个LED时表示当前是Boot在运行,当两个LED交替闪烁时代表App在运行。

mcu

BOOT工程:

1创建一个boot工程,添加UART和Flash驱动,Flash驱动只选Code Flash Programming,选择只亮一个LED灯来区别BOOT和APP。

mcu

mcu

2编写代码,实现串口接收串口助手发来的APP.bin

mcu

3当串口接收完后,用Flash驱动把接收到的数据写到APP存储的rom地址。这里我选择把APP存在0x4000

mcu

4调用下图函数,实现APP跳转。注意,跳转前先把所有运行的驱动关闭。

mcu

mcu

5编译,可对比得出,精简版bootloader只是用了7K左右的rom,比使用了MCUboot后的ROM占用少5K。

mcu

mcu

APP工程:

1实现APP的功能逻辑代码,这里我选择是使用GPT定时器,让开发板的两个LED灯交替闪烁。

mcu

2通过文本打开fsp.ld文件,添加红框位置的语句,地址与BOOT工程的跳转地址对应。这个步骤的目的是为了让APP工程以0x4000这个地址作为起始地址,它的向量表也会以这个地址作为基准来存储。

mcu

3编译并生成bin文件。

mcu

仿真调试:

仿真BOOT工程,在PC端用串口助手烧录APP.bin,可以看到开发板从一开始只亮一个LED到两个LED交替闪烁。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分