基于USB总线的MC68HC908JB8 Flash在线编程
- UID
- 1029342
- 性别
- 男
|
基于USB总线的MC68HC908JB8 Flash在线编程
Freescale公司的MC68HC908JB8(简称“JB8”)是HC908系列中的一种。它包括USB接口,是专为计算机人机接口设备设计的。 诸如鼠标、键盘等应用。JB8包含8KB的Flash用户存储区和16字节的中断复位向量,使用它内部产生的升压泵就可以实现F1ash的烧写和擦除,而不需要高电压。
ICP是一种在实际的目标电路板上烧写和擦除芯片的方法,无需从目标板上将芯片卸下来再编程实现用户程序的修改。这种方法适用于产品开发和代码升级。目前市面上很多芯片(如Philips公司的P89C51、P89V51和LPC932A1,STC89C51和STC89L516RD+,以及AVR公司的ATmega8系列等)都支持串口ICP方式。本文采用USB接口的ICP方法,烧写速度快,无需专用的电平转换芯片,硬件通过微处理器JB8的USB接口与计算机USB口连接即可。
1 底层软件实现方法
1.1 Flash配置
为使用ICP通信连接的USB接口,必须修改JB8中的用户代码以识别预先为ICP定义的USB命令。因此在出厂前,必须将ICP代码烧入JB8中。JB8的Flash配置如图1所示。
图1中,用户Flash区范围为$DC00~$FBFF,用户Flash向量区是从$FFFO到$FFFF。ICP的配置中:ICP的代码是从$F800到 $FBFF。用户Flash向量区在ICP操作中是不能再编程的,这两个区是JB8事先写入的,ICP操作可以对$DCOO~$F7FF的Flash区(图1中阴影区)进行擦除和烧写。
1.2 向量重定位
因为ICP的操作只能对用户代码进行编程和烧写,不能擦除用户Flash向量,且用户F1ash向量是固定的,因此在用户代码中的中断服务子程序地址必须重新定位到合适的地址。这种重新定位是通过“假”向量来实现的,3字节的假向量包括JMP指令和在用户代码中的中断服务子程序的绝对地址。图2中指出了假向量是如何重定位的。只有复位向量没有重新定位,总是指向$F800(ICP代码的入口地址)。
表1列出了中断向量地址和重定位“假”向量地址。
1.3 安全密钥防止非法访问
$FFF6~$FFFD的8字节内容用于进入JB8的监控模式。监控软件能完全访问F1ash区,正常情况下,8字节的安全密钥是不可能被猜出的,因为这些中断服务程序的起始地址是被固化到用户代码区中的。
1.4 在ICP期间防止掉电的措施
配置ICP时必须考虑到ICP子程序运行过程中有可能掉电,系统必须能够恢复和完成ICP程序。ICP_FLAG字的设计正是基于此目的。复位后读ICP_FLAG字,决定JB8是进入正常的工作模式还是ICP模式。该字地址是$F7FE,在用户代码区的最后2个字节。复位之后,复位向量地址$FFFE~$FFFF指向ICP程序入口地址$F800,一旦初始化完成,检查进入ICP模式或用户模式的条件。在以下2种情况下JB8进入ICP模式:
①“假”向量的高字节$FF7C是无效的,即不在$DC和$F7之间;
②ICP_FLAG字不等于校验和。否则,JB8进入正常的工作模式。
1.5 ICP编程
ICP编程流程图如图3所示。
一旦用户代码被烧入芯片,而“假”向量的高字节在无效的范围($DC~$F7),同时ICP_FLAG被写入校验和(不能是$0000),则在插拨USB设备后,ICP代码跳转到正常操作的用户模式。 |
|
|
|
|
|