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校验中断向量表的大小。
NXP bootloader相关推荐
- NXP BootLoader源码分析并改写SD卡启动
1 官方资料 NXP官方提供了MCUBoot SDK:NXP_Kinetis_Bootloader_2.0.0 package,里面包含了各种型号芯片的的BootLoader. BootLoader参 ...
- 自己用C语言写NXP S32K116 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader) 欢迎咨询或定制bootloader(在线升级程序). 到目前为止," ...
- NXP Pico i.MX7D上安装Android Things系统疑难杂症汇总
Android Things在NXP Pico i.MX7D上刷机的正常步骤还是很简单的,不过也陆续有不少朋友碰到各种问题.这里把问题和解决方法做个汇总,有新问题再继续补充.碰到问题的朋友,也可以在文 ...
- S12(X)微控制器的Bootloader程序
需要实现远程升级单片机,正好在网上找到了官方提供的Bootloader程序及其对应的文档,赶快弄下来学习研究,这是对其文档的翻译. 翻译的资料是公开的,在这里下载https://www.nxp.com ...
- BootLoader 介绍 与 uboot 简介
1 BootLoader 的介绍 1.1 BootLoader 的概念 BootLoader 的引入 如果它 能将噪作系统内核复制到内存中运行,无论从本地[比如Fh)还是从远端(比如通过网络), Bo ...
- 操作系统bootloader是什么
在进行 Linux 驱动开发之前肯定需要先将 Linux 系统移植到开发板上去.如果学习过 UCOS/FreeRTOS 应该知道,UCOS/FreeRTOS 移植 就是在官方的 SDK 包里面找一个和 ...
- 【RT-Thread】nxp rt10xx SFUD和FAL组件搭建与使用
开发前准备 硬件平台:nxp rt10xx单片机 IDE: Keil spi设备驱动框架已经搭建完毕(本章使用spi2,flash挂载在该位置) SFUD 简介 SFUD 全称 Serial Flas ...
- [架构之路-26]:目标系统 - 系统软件 - bootloader uboot使用方法、常用命令
目录 第1章 uboot简介 1.1 uboot与Linux的关系 1.2 bootloader的类型 1.3 uboot的主要版本 1.4 uboot的作用与功能 1.5 SoC支持的启动方式 第2 ...
- S32Kxxx bootloader之CAN bootloader
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
最新文章
- druid+spring配置
- 第九课.深度学习常见内容补充
- 页面重新跳转到父类url
- NDK编译错误expected specifier-qualifier-list before...
- 深度学习之卷积神经网络 VGGNet
- 地址url的split()方法使用;
- python 字符串去重且相同字符最多出现2次_【Python】获取字符串中出现次数最多/少的字符...
- python字典统计排序 统计各省份大学数量_1641统计字典排序元音字符串的数量(递归,递归),数目,递推...
- Java复合函数循环_Java函数式编程(一)(示例代码)
- golang笔记14--go 语言爬虫实战项目介绍
- matlab画图时候图例混乱解决方法
- VS2017操做sql server数据库
- 转载:刚入职美团两个月,就想离职了,每天加班到吐
- AlexNet网络介绍
- (应用程序无法正常启动0xc0000142) 关于win10周年版更新后无法正常使用vc6.0问题的解决方法
- js以15分钟为单位分割间隔时间
- Nuitka打包教程
- 微信小程序关于内层view设置margin-top无效的解决方案
- 专访阿里云王伟民:一站式全链路,阿里云向云原生数据库2.0跃迁
- python如何清空excel表格_python 删除excel表格重复行,数据预处理操作