NXP bootloader

简介:

本文介绍如何使用NXP官方提供的bootloader,以及踩坑的过程。

名词解释:
MCU boot:NXP官方提供了一个bootloader,具备一些基础的功能
app:application,应用程序,一个程序由bootloader+application组成。
平台:硬件焊接,开发板。

使用过程

首先去官方下载bootloader, 地址如下:
https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools/mcuboot-mcu-bootloader-for-nxp-microcontrollers:MCUBOOT

进去以后点击download,然后点击SDK。
在这里插入图片描述然后接下来需要生成一个带MCU boot的SDK,如果你英语比较好,应该可以直接搞定,注意勾上如下图所示的这一个选项。如果你的英语不太好,可以参照我的上一篇博客:
NXP freescale 开发环境搭建
中的第三节 MDK Keil + MCUXpresso Config Tools 环境搭建 - ③ 下载MCUXpresso SDK
在这里插入图片描述
生成好之后点击下载,值得一提的是,SDK代码和文档是分开的,记住下文档,里面有很多东西比较有用。
在这里插入图片描述下载完成之后,在这个目录下有很多文档,记得看看:
*\SDK_2.7.0_MK66FX1M0xxx18_doc\docs\mcu-boot*

接下来分为两个部分开始讲解:
1.烧写bootloader:
2.官方的demoapp:
3.烧写自己的app:

烧写bootloader:

打开这个工程
\SDK_2.7.0_MK66FX1M0xxx18\boards\frdmk66f\bootloader_examples\freedom_bootloader

什么?你问我为什么是这个工程,那我只能说对不起我也不知道,我只是一只按照这篇文档操作的小猫咪:
\SDK_2.7.0_MK66FX1M0xxx18_doc\docs\mcu-boot\MCU Bootloader Demo Application User’s Guide

然后你需要改一个参数,在 bootloader_config.h 94行。
这个参数的意思是指定app程序的代码位于flash上的哪一个地址,你不要看官方说的0xa000,官方这里搞错了,bootloader的大小已经超过了0xa000(40960byte 40KB),应该改成0xc000。 NXP的工程师已经在这里讨论了这个错误,但是不知道他会不会修复:https://community.nxp.com/thread/492991

在这里插入图片描述

然后点击编译、debug或者下载,bootloader程序会自动下载进flash的 0x00000000 - 0x0000c000区域。

修改串口(非必须),本平台需要

一般来说,bootloader都要提供交互的功能,例如通过串口或者USB,控制一些启动命令,NXP官方的MCU bootloader提供了串口和USB做虚拟串口两种交互方式,并且实现了一套自己的交互协议。

由于我使用的开发平台,只引出了uart3和uart4,而MCUboot 默认使用的是uart0,所以需要修改一下:
删除这个定义,
在这里插入图片描述
然后会报一个未定义,这个简单,复制粘贴一下。
在这里插入图片描述
修改一下串口4的引脚:
在这里插入图片描述

把串口0连接上,然后确认一下bootloader运行情况

SDK_2.7.0_MK66FX1M0xxx18\middleware\mcu-boot\bin\Tools\KinetisFlashTool\win\KinetisFlashTool
点击connect,可以看到红框处提示已经连接上了。
在这里插入图片描述
还可以用这个工具进行人机交互
SDK_2.7.0_MK66FX1M0xxx18\middleware\mcu-boot\bin\Tools\blhost\win\blhost.exe
注意 : 需要使用CMD打开这个工具,可以看到下图打印了bootloader的版本号。
在这里插入图片描述

烧写官方的demoapp

打开这个工程
\SDK_2.7.0_MK66FX1M0xxx18\boards\frdmk66f\bootloader_examples\demo_apps\led_demo_freedom_a000

注意这里的a00,上文:https://community.nxp.com/thread/492991已经说过了,官方出错了,应该是c00,所以下面要修改一点参数,将a000,修改成c000.

打开工程后,先按照下图打开链接文件,我们要修改里面的a000:
在这里插入图片描述在这里插入图片描述
修改一下blink的灯引脚
在这里插入图片描述

烧写自己的app

在烧写自己的app之前先来看看MCU-boot的启动逻辑
在这里插入图片描述这段代码中可以看到,会先检查是不是直接引导模式,如果不是,则计算延时引导时间,在延时N秒后进行引导。

而 直接引导模式、延时引导时间的计算都来自于这个变量
在这里插入图片描述
这个变量就需要特别注意了,是来自于app的flash上,你敢信!
也就是说,bootloader会去app的flash区域的0x3c0地址读取值,然后根据这个值,进行特殊的引导操作。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
所以,我们必须在app的特定flash位置,增加一组值。这组值实际上位于startup.s文件中,所以我们参考上述的 led_demo_freedom_a000 中的startup.s文件,直接复制copy过来即可,然后需要在keil中增加编译参数。
在这里插入图片描述
在这里插入图片描述
最后更改分散加载文件,将程序的起始地址修改为0x0000c000。建议直接复制上述的分散加载文件

在这里插入图片描述在这里插入图片描述








备注

在测试的时候,中断向量表的size默认时0x00000400,如果随意修改中断向量表的大小,会造成jlink下载失败。必须要把jlink的verify取消掉,因为jlink会根据device校验中断向量表的大小。
在这里插入图片描述在这里插入图片描述

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值