微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Bootloader技术在数字信号控制器中的应用

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

时间:09-03 来源:互联网 点击:

将待写数据装入板写锁存器。待编程入板的数据通常是按以下顺序装入写锁存器的: 指令0, 指令1, 依此类推。所有的32位写锁存器必须在编程操作期间写入, 以确保覆盖保存在锁存器中的旧数据。

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

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

6 Bootloader程序编写

6. 1 dsPIC30F系列器件存储空间的分配

在编写Bootloader程序之前, 我们必须首先了解芯片的程序存储空间分配情况。dsPIC30F 系列芯片包含144K字节的FLASH 程序存储空间, 寻址范围为0x0000100~ 0x017FFE, 图1 ( a)为dsPIC30F系列芯片的程序存储器地址映射情况。

0x00~ 0x03地址单元是复位向量; 0x04~ 0xFE地址单元是中断向量表和后备中断向量表( IVT /A IVT) ; 在其后的0x100~ 0x17FFE单元为48K指令字的用户闪存程序存储器。原则上, Boot loader程序可以放在整个程序空间中的任何位置, 但是为了简单方便、具有通用性和尽量减少对用户程序的影响,本设计使用了0x100 ~ 0x4FE 的一段程序存储器( Boo tloader程序与用户程序的代码总量不能超过144KB)。Bootloader程序后面便可存放用户程序,但是受到FLASH 存储器页的限制, 用户程序不可紧跟在Boo tloader程序之后, 它必须从下一个FLASH存储器页的开始处(如0x500) 存放, 如图1 ( b) 所示。


图1 程序存储器地址映射

6. 2 . hex文件的解析

当dsPIC30F系列数字信号控制器的程序编写完成之后, 利用开发平台MPLAB IDE编译后会生成一个. hex 文件, 将这个. hex 文件烧写到FLASH 存储器中系统才能运行, 因此要完成的任务就是将这个. hex 文件下载到目标系统中。如果直接从PC 端将. hex 文件中的全部内容发送给下位机, 就需要Boot loader程序来解析提取要写入存储器的数据, 这样做势必加大Boo tloader程序代码长度, 也会影响整个Boo tloader过程的时间, 因此本设计采用在PC机端程序解析. hex 文件的方法。为了正确地将这个. hex文件下载到下位机中必须对. hex 文件有一个比较深入的了解。. hex文件的格式如下:

: BBAAAATTHHHH……HHCC

BB: 二位16 进制值, 表示该帧数据的字节长度。

AAAA: 四位16 进制值, 表示随后数据的起始地址, 该地址为字节地址。

TT: 二位16进制值, 表示数据帧类型( 00 : 数据帧; 01 : 结束帧; 04 : 扩展地址帧)。

HH: 16进制值, 表示具体的数据, 即具体程序代码。

CC: 二位16进制的校验码, 使该帧全部以二位16进制相加后总和为0。

一个. hex 文件可分为5部分代码: 复位向量代码、程序代码、中断向量代码、后备中断向量代码和结束代码, 除结束代码仅含结束帧外, 其余各部分代码都由扩展地址帧和数据帧组成, 其中仅数据帧存储了用户程序信息。因此PC 机端程序仅保留扩展地址帧和数据帧的内容并按顺序进行发送即可, 下位机接收数据后根据扩展地址帧可以直接将用户代码写入FLASH 存储器相应的地址单元中, 从而提高了整个Bootloader的效率。

6. 3 dsPIC30F器件. g ld文件的修改

Bootloader程序运行时, 需要读出用户程序中预先设置好的一个延时值(本设计为1s) 作为下位机等待PC 机发送升级命令的周期, 还要指定用户程序起始地址以便Boot loader程序执行完毕后可以继续执行用户程序。为了满足这两个要求, 必须修改用户程序的链接文件( . g ld文件), 以指定用户程序的起始地址和Bootloader 程序的延时周期。对于. g ld文件的具体修改如图2所示。


图2 . g ld文件的修改。

6. 4 Boot loader程序流程:

系统上电复位后, 在完成各种初始化配置后首先判断0x500地址单元中值是否为0xFF, 如果是,则说明系统从未下载过用户程序, 系统会一直运行Boot loader程序等待PC 机发送下载命令; 如果0x500中的值不是0xFF, 则说明系统中已经下载过用户程序了, 这时候根据0x500中的值来设置定时器T imer2的初值并开始计时, 如果UART2 在指定的自举周期内未接收到PC 机发来的下载命令(说明系统不需要下载程序), 系统会自动跳出Boo tloader程序而去运行已有的用户代码, 如果UART2在自举周期内接收到了下载命令, Boo tloader程序会进入循环状态等待PC机发送数据。如图3所示。


图3 程序流程图。

如前文所述, PC 机发送的数据是从. hex 文件中提取的, PC机首先发送扩展地址部分, 下位机接收保存

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top