简介:

本文介绍如何使用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校验中断向量表的大小。

NXP bootloader相关推荐

  1. NXP BootLoader源码分析并改写SD卡启动

    1 官方资料 NXP官方提供了MCUBoot SDK:NXP_Kinetis_Bootloader_2.0.0 package,里面包含了各种型号芯片的的BootLoader. BootLoader参 ...

  2. 自己用C语言写NXP S32K116 serial bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader) 欢迎咨询或定制bootloader(在线升级程序). 到目前为止," ...

  3. NXP Pico i.MX7D上安装Android Things系统疑难杂症汇总

    Android Things在NXP Pico i.MX7D上刷机的正常步骤还是很简单的,不过也陆续有不少朋友碰到各种问题.这里把问题和解决方法做个汇总,有新问题再继续补充.碰到问题的朋友,也可以在文 ...

  4. S12(X)微控制器的Bootloader程序

    需要实现远程升级单片机,正好在网上找到了官方提供的Bootloader程序及其对应的文档,赶快弄下来学习研究,这是对其文档的翻译. 翻译的资料是公开的,在这里下载https://www.nxp.com ...

  5. BootLoader 介绍 与 uboot 简介

    1 BootLoader 的介绍 1.1 BootLoader 的概念 BootLoader 的引入 如果它 能将噪作系统内核复制到内存中运行,无论从本地[比如Fh)还是从远端(比如通过网络), Bo ...

  6. 操作系统bootloader是什么

    在进行 Linux 驱动开发之前肯定需要先将 Linux 系统移植到开发板上去.如果学习过 UCOS/FreeRTOS 应该知道,UCOS/FreeRTOS 移植 就是在官方的 SDK 包里面找一个和 ...

  7. 【RT-Thread】nxp rt10xx SFUD和FAL组件搭建与使用

    开发前准备 硬件平台:nxp rt10xx单片机 IDE: Keil spi设备驱动框架已经搭建完毕(本章使用spi2,flash挂载在该位置) SFUD 简介 SFUD 全称 Serial Flas ...

  8. [架构之路-26]:目标系统 - 系统软件 - bootloader uboot使用方法、常用命令

    目录 第1章 uboot简介 1.1 uboot与Linux的关系 1.2 bootloader的类型 1.3 uboot的主要版本 1.4 uboot的作用与功能 1.5 SoC支持的启动方式 第2 ...

  9. S32Kxxx bootloader之CAN bootloader

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

最新文章

  1. druid+spring配置
  2. 第九课.深度学习常见内容补充
  3. 页面重新跳转到父类url
  4. NDK编译错误expected specifier-qualifier-list before...
  5. 深度学习之卷积神经网络 VGGNet
  6. 地址url的split()方法使用;
  7. python 字符串去重且相同字符最多出现2次_【Python】获取字符串中出现次数最多/少的字符...
  8. python字典统计排序 统计各省份大学数量_1641统计字典排序元音字符串的数量(递归,递归),数目,递推...
  9. Java复合函数循环_Java函数式编程(一)(示例代码)
  10. golang笔记14--go 语言爬虫实战项目介绍
  11. matlab画图时候图例混乱解决方法
  12. VS2017操做sql server数据库
  13. 转载:刚入职美团两个月,就想离职了,每天加班到吐
  14. AlexNet网络介绍
  15. (应用程序无法正常启动0xc0000142) 关于win10周年版更新后无法正常使用vc6.0问题的解决方法
  16. js以15分钟为单位分割间隔时间
  17. Nuitka打包教程
  18. 微信小程序关于内层view设置margin-top无效的解决方案
  19. 专访阿里云王伟民:一站式全链路,阿里云向云原生数据库2.0跃迁
  20. python如何清空excel表格_python 删除excel表格重复行,数据预处理操作

热门文章

  1. c语言程序由什么开头和结尾,一个完整的C程序由什么组成?
  2. margin重叠问题
  3. 产品经理学习-加分技能
  4. 基于微信小程序的驾校报名管理系统
  5. git上传代码和下载代码
  6. OSPF 多区域原理与配置
  7. SecureCRT中常用linux命令
  8. 小程序setData动态传递key
  9. vue路由文件相关配置
  10. 虚实交融的元宇宙图景中社会科学的跃升