基于飞思卡尔MC9S12XDP512在线升级(Bootloader)

本文详细介绍了基于MC9S12XDP512单片机的软件在线升级技术,包括bootloader的作用、内存地址映射、IAP和APP的操作、中断重映射以及S19文件格式解析。通过理解这些内容,可以实现单片机的高效和便捷升级。
摘要由CSDN通过智能技术生成

基于MC9S12XDP512的软件在线升级技术

Abstract

  1. 绪论

嵌入式领域的在线升级又称作嵌入式bootloader,这里提到的bootloader和带有操作系统如Linux、Windows是有所不同的。大型操作系统的bootloader主要是为操作系统初始化硬件环境,最终引导操作系统。嵌入式的bootloader主要作用是为烧写程序提供一种新的方式,可以通过串口、CAN、网口、GSM等方式更新存储在Flash的程序达到升级应用的目的。省去了专用的程序烧录器,也为产品批量升级、远程升级带来极大的便利。

本文主要讲述基于MC9S12XDP512的软件在线升级技术。以单片机为核心控制单元的嵌入式产品考虑到实用性、易用性、美观程度、经济等方面因素往往不会预留产品软件升级用的专用接口,也不会为每套产品配备专门的升级设备来进行后期的升级维护。为了既能兼顾为用户提供产品的持续升级也能减少企业的投入,可以在单片机中开发一款在线升级工具软件又称bootloader来解决这一问题。本文将以NXP的MC9S12XDP512单片机为例讲解bootloader的开发,以及针对CodeWarrior IDE编译生成的S19文件在MC9S12XDP512上开发bootloader的特点。

  1. MC9S12XDP512存储器地址映射

MC9S12XDP512单片机采用的哈佛结构及程序存储器和数据存储器是两个物理独立的设备。(IO统一编址,将RAM ROM 寄存器等看成外设IO,统一进行编址)。MC9S12XDP512是16位单片机,可以访问的地址是64kB,然而MC9S12XDP512的flash是512KB,RAM是32KB还有4KB的EEPROM。MC9S12XDP512通过内存映射控制模块(MMC)将地址线扩充到23位。示意图如图1所示:

 

图1  MMC模块地址翻译过程

在HCS12(X)家族中,CPU可以通过它的指令集直接访问的64KB本地地址称作CPU本地地址。相对的,23位地址称作全局地址。本节着重阐述HCS12(X)家族的CPU本地址映射以及全局地址的使用。HCS12(X)CPU本地地址映射图如图2所示:

 

图2  CPU本地地址映射

上图展示了整个64KB空间的分布情况,其中xxxWindow代表此区域的地址可以指向不同的物理位置,这些特殊的区域被称为分页窗口。这里的分页窗口地址仍然是16位的,无法访问超过64KB的实际设备位置,MMC模块还需要另外一个信息来组合成一个全局地址,此信息存储在分页寄存器内(page register)。关于分页的寄存器有:PPAGE、RPAGE、EPAGE。通过改变相应寄存器的值来改变对应分页窗口映射的内容。

  1. 在线升级之IAP、APP的操作

IAP(Bootloader)用来做程序升级时的工具软件需要下载到单片机中。APP是产品的应用程序。在开始IAP和APP编写之前,首先要明确几个问题:

  1. IAP和APP在flash应该以相互独立的形式还是融合到一起的模式存储。
  2. 内存区间如何合理的划分。
  3. 为了便于程序开发和后续产品的生产,如何保证编写好的IAP和APP同时下载到单片机中。
  4. 如何完成IAP和APP之间的相互跳转。
  5. 中断的重映射

首先,为了保证在线升级的鲁棒性提高程序的健壮性,需要将IAP和APP分别存储在独立的flash区间,也就是IAP和APP是两个不同的工程。

关于内存的划分需要在CodeWarrior IDE环境下找到xxx.prm文件,合理划分整个存储空间。将IAP和APP分别独立的开辟一段存储空间。同时为了后续读写flash需要将一部分操作flash的代码拷贝到RAM中运行,原因是flash不能同时读和写,RAM区需要开辟一段区域用于存储操作flash代码的空间。

为了将编写好的IAP和APP同时下载到单片机中,需要在APP的bin文件中添加IAP编译好的xxx.S19文件,同时在APP工程的xxx.prm文件开始添加HEXFILE xxx.s19。

IAP和APP之间的相互跳转关键需要找到各自程序的初始化的头指针,可以再xxx.map文件中查找STARTUP SECTION,找到Entry point,即程序的入口地址。其实在内存划分时已经规定好了入口地址。

中断映射

  1. 基于十所ICD协议的S19文件算法设计
  1. S19文件格式解析

S-record格式文件是CodeWarrior编译器生成的后缀名为.S19的程序文件,是一段直接烧写进MCU的ASCII码,英文全称问Motorola format for EEPROM programming。S-record每行最大是78个字节,156个字符。S-record格式如图

 

                               

 

 

type(类型)2个字符。用来描述记录的类型 (S0,S1,S2,S3,S5,S7,S8,S9)。S0:S格式文件的第一个记录,表示文件名(含路径),存储地址部分没有使用,以0000置位。此记录表示记录的开始,无需下载到MCU。S1: 地址为2字节(4个字符)的记录。S2: 地址为3字节的记录。S3: 地址为4字节的记录。S5: 标记本文件的S1、S2、S3记录的个数(此记录不是一个S文件所必须的)。S7: 地为4字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。S8: 地为3字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。S9: 地为2字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。

count(计数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值