MSP430 BootLoader移植

发布者:hxcp18最新更新时间:2020-05-17 来源: eefocus关键字:MSP430  BootLoader  移植 手机看文章 扫描二维码
随时随地手机看文章

一、 什么是bootlloader?

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。因此整个系统的加载启动任务就完全由BootLoader来完成。


以上是百度百科上对bootloader的描述,但是我们这里所说的bootloader是为了实现单片机IAP功能,所编写的一段引导程序,从而实现我们APP的程序数据能够通过串口等通信方式写进Flash程序空间最终实现自编程和程序更新的目的,这就是我们这里说的bootloader。


二、 程序架构

具有bootloader的一个完整的应用系统程序分为两大部分:1、APP程序:应用系统功能实现层(通俗的讲就是我们自己要写的程序);2、bootloader引导程序:就是系统启动或复位时的入口程序,主要的功能包括时钟初始化、Uart通信初始化、判断是执行boot串口升级程序还是跳转执行APP程序。Bootloader的程序架构如下图所示:

这里写图片描述

三、 bootloader串口升级协议

主机发送数据格式:头码(80H)+长度码+负载消息+校验和(CRC8),其中:

头码固定为80H,用于界定数据帧开始;

长度码:值为负载消息的总字节数;

负载消息的格式为:CMD+ADDR_L+ADDR_H+data;其中,CMD为一个字节的主机命令码;ADDR_L和ADDR_H为data写入目标机Flash地址的高低字节值;data为需要写入Flash程序空间的数据;检验和为所有负载消息按发送顺序先后对其CRC8(x8+x2+x+1)计算所得的校验值。


表1:主机命令表

命令描述 命令码 Byte-1 Byte-2 Byte-3 …… Byte-n

擦除段 12H ADDR_L ADDR_H X X X

擦除APP 15H X X X X X

接收编程数据块 10H ADDR_L ADDR_H Data-0 …… Data-n

读取版本号 19H X X X X X

跳转至APP 1CH X X X X X

注:X表示没有该字段数据;……表示连续的数据。


1、 擦除段:由指定的地址开始擦除目标机Flash连续的512字节的程序空间。

2、 擦除APP:擦除目标机的APP程序空间

3、 接收编程数据块:将接收到的数据写入目标机指定地址的程序空间

4、 读取版本号:读取目标机当前的bootloader的版本号

5、 跳转至APP:一般用于APP程序更新完成后,指示目标机跳转到APP程序运行


目标机(从机)回应为单字节回应码,具体含义如下:

表2:目标机回应码

回应名称 回应码 具体描述

OK 0x01 命令执行成功

头码错误 0x51 数据帧头码错误

校验错误 0x52 数据帧校验错误

数据帧长度为0 0x53 数据长度码为0

负载消息长度超限 0x54 数据帧消息长度超过所允许的最大长度值

未知错误 0x55 协议未知错误

参数错误 0x5C 命令参数错误

命令错误 0x6C 根据协议无法解析该命令

Bootloader版本号 0至255 版本号,不建议存在与以上回应码相重叠的版本号


四、 Bootloader程序内存空间分布

为实现单片机的IAP功能和合理的使用单片机的存储空间,我们需要对单片机的内存(这里的内存指的是单片机上所有可利用的存储资源,包括RAM、Flash)资源进行的合理的规划。以MSP430G2553为例,该Bootloader对其内存空间规划分布大致分为三个部分:RAM空间、Flash中的APP程序空间、Flash中的Bootloader程序空间。


RAM空间主要贮存着单片外设模块的寄存器(不可改变)、程序运行空间;

Flash中的APP程序空间存储着APP的代码数据和APP程序中的常量数据、APP层中断服务程序向量表、APP程序校验值等


Flash中的Bootloader程序空间存储着Bootloader程序代码数据和Boot层中断向量表等

具体内存空间分配如下表所示:

这里写图片描述

五、 单片机IAP升级实例

现在假定单片机正在跑Bootloader升级引导程序,主机通过串口更新APP程序的基本流程如下:

读取Bootloader版本号 擦除APP程序空间 发送APP程序代码数据1

发送APP程序代码数据2(中断向量映射表代码) APP程序代码数据CRC校验

APP程序更新完成发送跳转至APP命令

现假定APP程序编译完成后的16进制代码数据如下:

@C000

92 DD

@c004

A2 D2 60 01 F2 F0 EF 00 29 00 0D 12 0E 12 3D 40

3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23

3E 41 3D 41 00 3C 0D 12 0E 12 3D 40 3C 82 3E 40

0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41

00 3C F2 D0 10 00 29 00 0D 12 0E 12 3D 40 3C 82

3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41

3D 41 00 3C 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00

1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C

00 13 A2 D2 60 01 F2 D0 20 00 29 00 F2 E0 10 00

29 00 D2 E3 20 02 0D 12 0E 12 3D 40 3C 82 3E 40

0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41

00 3C 92 C3 62 01 00 13 0F 12 0E 12 0D 12 0C 12

0B 12 B1 C0 10 00 0A 00 C2 43 2B 00 B0 12 E0 C0

3B 41 3C 41 3D 41 3E 41 3F 41 00 13 B2 40 DE C0

00 02 D2 D3 02 02 32 C2 03 43 B2 40 0B 5A 20 01

FF 3F D2 B3 03 00 07 24 D2 C3 03 00 D2 42 66 00

21 02 D2 43 22 02 00 13 1F 4C 01 00 0F 93 05 24

1D 53 CD 43 FF FF 1F 83 FB 23 30 41 F2 F0 DF 00

29 00 00 13 00 00 03 00 0C C1 28 C1 20 02

@fbce

30 40 26 C1 30 40 BC C0 30 40 04 C0 30 40 04 C0

30 40 F6 C0 30 40 04 C0 30 40 86 C0 30 40 04 C0

30 40 04 C0 30 40 04 C0 30 40 04 C0 30 40 04 C0

20 C1

q

该段数据分为三个部分:校验值、程序数据代码、中断向量映射表

校验值的地址位置为:0xC000,值为:92DD(LSB,92为地址空间中的低字节,DD为地址空间高字节)


该段数据分为三个部分:校验值、程序数据代码、中断向量映射表

校验值的地址位置为:0xC000,值为:92DD(LSB,92为地址空间中的低字节,DD为地址空间高字节)


同样依次将程序代码数据从地址0xC004开始写目标机对应的地址空间,中断向量表程序数据从0xFBCE开始写入目标机对应的程序空间。写入成功后发送APP跳转命令,程序跳转至APP层执行,此时APP更新成功。


通信举例:

1、 读取目标机版本号

主机发送:8001194F

目标机回复:A1(版本号)


2、 擦除APP程序空间

主机发送:8001156B

目标机回复:01(OK)


3、 发送程序代码数据

主机发送:801310DEFB3040F6C0304004C0304086C0304004C029

目标机回复:10(写入Flash的字节数);55(写入失败)


4、 发送程序跳转命令

主机发送:80011C54

目标机回复:01(OK)

关键字:MSP430  BootLoader  移植 引用地址:MSP430 BootLoader移植

上一篇:关于msp430系列单片机的一些入门心得(新手向)
下一篇:MSP430的升级引导程序编写以及升级固件制作

推荐阅读最新更新时间:2024-11-10 08:52

MSP430时钟设置及应用总结
在MSP430单片机中,一个时钟周期 = MCLK晶振的倒数。如果MCLK是8MHz,则一个时钟周期为1/8us。 一个机器周期 = 一个时钟周期,即430每个动作都能完成一个基本操作。 一个指令周期 = 1~6个机器周期,具体根据具体指令而定。 另外,指令长度只是一个存储单位,与时间没有必然的关系。 MSP430单片机的时钟模块主要包括: 三个时钟:辅助时钟ACLK 、主时钟MCLK 、子系统时钟SMCLK 三个振荡器:低频时钟源LFXT1 、高频时钟源XT2 、数字控制RC振荡器DCO 而MSP430单片机工作所需时钟就是由这些振荡器振荡后经处理产生的。 (1)ACLK:是LFXT1CLK信号经1/2/4/8分频后得到的,
[单片机]
Win用户有福了!锤子手机重磅功能将移植PC平台
  “大爆炸(BigBang)”、OneStep,“闪念胶囊”(ideapills)是 锤子 Smartisan OS最有特色的三个功能,大大提升了智能手机的工作效率,深得锤粉喜爱。下面就随手机便携小编一起来了解一下相关内容吧。   有没有一种可能,将这些功能转移到PC平台呢?        今日,有锤粉@罗永浩称:“肯定将big bang、one step、闪念胶囊扩展到PC平台,用惯了坚果手机 ,在电脑上操作,真心一点都不习惯,工作效率都降低了。 ”   罗永浩的回答直截了当:“我们正在做一些比你希望的这个还要好的多的东西。”   事实上,今年6月份,罗永浩就曾在微博上证实,PC版和Mac版“闪念胶囊”正在开发中。   该
[手机便携]
linux驱动移植的数据结构
对于嵌入式 Linux 系统来说,有各种体系结构的处理器和硬件平台,并且用户需要根据需求自己定制硬件板。只要是硬件平台有些变化,即使非常小,可能也需要做一些移植工作。内核移植是嵌入式Linux系统中最常见的一项工作。 内核移植工作主要是修改跟硬件平台相关的代码,一般不涉及 Linux 内核通用的程序。移植的难度也取决于两种硬件平台的差异。Linux 对于特定的硬件平台的软件就叫作 BSP(Board Support Package)。 由于 Linux 内核具备可移植性的特点,并且已经支持了各种体系结构的很多种目标板,我们很容易从中找到跟自己硬件类似的目标板。参考内核已经支持的目标板来移植 BSP,就如同使用模板开发程序。 因此
[单片机]
将一款单片机程序移植到另一款单片机
引言 在一些特殊情况下,如成品需要降本,原来的芯片买不到货,需要将已经做好的产品应用程序有一款单片机移植到另一款单片机。本系列文章列出从现有的 STM32F1 器件移植到 STM32F0 器件所需的步骤,旨在帮助开发工程师节省更多开发时间。 3.7 GPIO 接口 与 F1 系列相比, STM32F0 GPIO 外设内置了多个新特性,主要包括: GPIO 映射到 AHB 总线上,可以获得更佳的性能。 I/O 引脚复用器和映射:引脚通过多路复用器连接到片上外设 / 模块,该复用器一次只允许一个外设复用功能 (AF) 连接到 I/O 引脚。这样便可确保共用同一个 I/O 引脚的外设之间不会发生冲突。 I/O 配置的方式和特性更加丰
[单片机]
将一款单片机程序<font color='red'>移植</font>到另一款单片机
MSP430F5438A Timer_A 操作实验
简介: 1,学会在比较和捕获模式下操作 Timer_A,熟练对寄存器进行配置 2,编程实现 Timer_A 定时 3,功能:Timer_A 在 TAR 计数相同间隔定时,当每次定时到来 LED1 亮(灭) 4,现象:LED1 相同频率闪烁 1,定时器 A 介绍: 定时器 A是一个十六位的定时/计数器,其捕获/比较寄存器多达七个。定时器 A 支持支持多重捕获/比较,PWM 输出和内部定时。定时器还有扩展中断功能,中断可以由定时器溢出产生或由捕获/比较寄存器产生。 定时器 A的特性包括: ○四种运行模式的异步 16 位定时/计数器 ○可选择配置的的时钟源 ○多达七个可配置的捕获/比较寄存器 ○可配置的 PW
[单片机]
<font color='red'>MSP430</font>F5438A Timer_A 操作实验
MSP430Ware & TI Resource Explorer
一、描述 MSPWare 是一组适用于所有 MSP 器件的用户指南、代码示例、培训以及其他设计资源集合,方便地打包在一起供用户使用,它基本上包含了开发人员要成为 MSP430 和 MSP432 专家所需的一切!除了提供完整的现有 MSP430 和 MSP432 设计资源,MSPWare 还提供多种高度抽象化的软件库,范围涵盖 MSP 驱动程序库或 USB 等特定于器件和外设的库,以及图形库或电容式触控库等特定于应用的库。MSP 驱动程序库是一个尤为重要的库,它可以帮助软件开发人员利用高级别 API 来控制复杂的低级别软件和外设。当前,MSP 驱动程序库支持 MSP430F5x/6x 和 MSP432P4x 系列器件。 如何获得
[单片机]
<font color='red'>MSP430</font>Ware & TI Resource Explorer
MSP430读写DS1302程序
#include #define DS1302_DIR P1DIR #define DS1302_IN P1IN #define DS1302_OUT P1OUT #define DS1302_RST BIT7 #define DS1302_SCLK BIT5 #define DS1302_SDI BIT6 //定义MSP320的端口 #define DS1302_RST_LO DS1302_OUT &= ~DS1302_RST #define DS1302_RST_HI DS1302_OUT |= DS1302_RST #define DS1302_SCLK_LO DS1302_OUT &= ~DS1302_SCLK
[单片机]
stm32 usb hid 移植时出现的问题及解决办法
由于项目需要,使用了stm32f107的芯片,移植了STM32_USB-Host-Device_Lib_V2.2.0 官方usb固件库,在UCOSII上运行,刚开始使用的是STM32_USB-FS-Device_Lib_V2.3.0的库,这个库网上资源较多,但是在使用的时候发现这个库和UCOSII的延时函数有冲突,导致ucos操作系统不能正常运行,经过调试没有发现原因,调试期间在st官网找到了最新的固件库STM32_USB-Host-Device_Lib_V2.2.0,于是移植过来使用,发现UCOS操作系统正常运行,官方提供的例程使用了端点1作为数据输入输出,我想改成端点1输入,端点2输出,通过查看 官网的库用户文档CD00289
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved