Bootloader技术在数字信号控制器中的应用
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的效率。
评论