新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Bootloader技术在数字信号控制器中的应用

Bootloader技术在数字信号控制器中的应用

作者:时间:2012-09-03来源:网络收藏

摘 要: 介绍了Boot loader(引导加载)的原理, 着重讨论了M icroch ip公司的DSPIC30F系列( DSC)的Boo tloader程序的编写及F lash存储器运行时自编程( RTSP)的原理, 并实现了电子皮带秤控制仪表程序的在线自编程升级。

本文引用地址:http://www.eepw.com.cn/article/170924.htm

1 引 言

当前, 随着MCU、DSP等高性能集成电路的广泛, 大部分电子设备需要对用户程序进行升级以达到完善、丰富系统功能的目的。但目前对这类设备的程序升级大多采用开发人员携带编程工具到现场进行操作的方式, 这样做给系统的统一管理和维护造成很大困难。针对这一问题提出一种基于dsPIC30系列芯片实现用户程序在线自编程升级的方法, 从而达到了用户程序升级时无须下载器, 操作简单、快捷的目的。

2 Boo tloader的原理

相当于PC主板上的B IOS, 是最底层的引导软件。Boo tloader是一段固化在嵌入式系统目标系统ROM或者是诸如FLASH 等非易失存储器中的一段程序, 它的主要作用就是引导操作系统或用户程序的运行。系统上电后Boo tloader将首先接管系统, 在进行一些最基本的上电自检后, 将对系统的硬件进行初始化, 为引导操作系统作好准备, 接下来, Bootloader需要将操作系统的代码拷贝到主存储器的特定地址, 最后Boot loader将控制权交给操作系统, 由操作系统完成接下来的工作;在不含操作系统的系统中, Bootloader可以完成这样一些操作: 分配程序存储空间; 重新映射复位和中断向量; 将程序代码从片外加载到程序区, 执行时再将代码加载到RAM 中以便快速执行; 检测是否需要下载新的用户代码, 若需要则通过某种通信方式接收新代码并将其写入指定程序存储空间中, 若不需要, 则执行原有用户代码。

在嵌入式领域中, Bootloader是严重地依赖于硬件的, 因此想要建立一个通用的Bootloader 几乎是不可能的。以dsPIC30F系列为例,深入讨论在该系列芯片中编写Boot loader程序的方法, 这种方法同样适用于一些其它类型的微

3 Bootloader的操作模式

大多数Bootloader 都包含两种不同的操作模式: “启动加载 ”模式和“下载”模式, 这两种模式的定义如下:

启动加载( Boot Load ing)模式: 这种模式也称为 自主 ( AutONomous)模式。也即Bootloader从目标机上的某个固态存储设备上将用户程序加载到RAM 中运行, 整个过程并没有用户的介入。这种模式是Boo tloader的正常工作模式。

下载( Dow nloading) 模式: 在这种模式下, 目标机上的Bootloader将通过串口等通信手段从PC 机下载文件, 比如: 下载内核映像和根文件系统映像等。从PC机下载的文件通常首先被Bootloader保存到目标机的RAM中, 然后再被Bootloader写到目标机上的FLASH类固态存储设备中。Boo tloader的这种模式通常在系统程序更新时使用。工作于这种模式下的Boot loader通常都会向它的终端用户提供一个简单的接口。

4 dsPIC30F系列芯片简介

M icroch ip公司推出的dsPIC30F 系列控制器( DSC)可以灵活地运行一个常驻FLASH 的引导加载程序( Bootloader Prog ram )实现对用户程序的在线自编程升级。可以使用任何可用的数据接口和相关协议读取代码, 然后将代码写入(编程)到FLASH 存储器中, 从而实现电子设备在线自编程升级程序代码的目的。dsPIC30F系列数字信号控制器的Boo tloader程序需要自行编写, 并且可以通过SPI、UART等各种数据接口来接收PC 机发送的数据。显然, 采用了串口( RS232 方式) 与PC 机进行通信最为方便。

5 dsPIC30F系列芯片FLASH 存储器的运行时自编程( RTSP)

dsPIC30F系列数字信号控制器内部包含了用于执行用户代码的FLASH 存储器。用户可以使用两种方法对此存储器编程:a运行时自编程( Run-T ime Self Programm ing, RTSP ); b 在线串行编程( In- C ircu it Serial Programm ing, ICSP)。其中RTSP方式是由用户软件执行的, 允许用户代码修改闪存程序存储器的内容, 是实现用户程序在线自编程升级的基础。

dsPIC30F系列芯片对FLASH 存储器的运行时自编程是通过表指令TBLWT、TBLRD 和NVM 寄存器实现的。FLASH 存储器是由行和板构成的。每行由32 条指令( 96 字节) 组成。通常, 每个板由128行组成( 4K # 24条指令)。RTSP可以让用户每次擦除一行( 32条指令)以及一次编程32条指令。

程序存储器的每个板包括能够保存32条编程数据指令的写锁存器。这些锁存器不是存储器映射的。

用户访问写锁存器的惟一方法是使用写表指令。在实际编程操作前, 必须先用写表指令将待写数据装入板写锁存器。待编程入板的数据通常是按以下顺序装入写锁存器的: 指令0, 指令1, 依此类推。所有的32位写锁存器必须在编程操作期间写入, 以确保覆盖保存在锁存器中的旧数据。

RTSP编程的基本步骤是先建立一个表指针, 然后执行一系列TBLWT 指令以装入写锁存器。编程是通过将NVMCON 寄存器的特殊位置1 进行的。

需要将32条TBLWTL和32 条TBLWTH 指令装入四条指令。如果需要对多个不连续的程序存储器区进行编程, 应该为每个区域和下一个要写入的一组写锁存器修改表指针。


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭