基于USB总线的MC68HC908JB8 Flash在线编程

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代码跳转到正常操作的用户模式。
进入jb8 icp模式有2种方式:icp_flag被写入$0000,或者pta0被下拉成低电平。用户代码包括特别的命令来编写icp_flag,一旦icp_flag被写入零,则再次插拨上电后,jb8进入icp模式。icp指令支持有限的usb标准协议,如读取描述符和状态字,设置地址和配置字,以及清特征字。
本文使用了一些必要的擦除、编程、校验flash命令,如表2所列。
在使用读取状态命令后,程序返回1字节的应答命令来表示program row(行编程命令)、erase block(块擦除命令)和verify row(行校验命令)命令是否成功。字节$01表示命令执行成功,字节$04表示命令执行失败。
1.6 icp_flag的编程
由于jb8是为hid应用设计的,最好使用hid命令来编写icp_flag,这样可以无需额外的驱动。本文使用8字节的set_feature指令来设置icp_flag,使用8字节的get_ack指令(只有1字节是有用的)来校验设置是否正确(响应为$0o表示命令成功,为$01表示命令失败)。设置8字节足出于安全的考虑,如果这8字节与jb8中$ffe6~$ffed的8字节相匹配,那么命令才是有效的。只有命令有效,icp_flag才会被写入0。指令使用格式如表3所列。
2 应用软件
usb icp驱动程序的安装与普通的硬件驱动程序安装一样,需要安装usb icp.sys文件和注册表文件usbicp.inf。usb icp的windows运行界面如图4所示。
选择烧写文件(.sx格式),擦除flash(erase flash)后执行空检查(blank check),然后选择烧写(program)芯片,最后执行校验(verify)。
结语
本文采用集成usbl.1协议的mc68hc908jb8,扩展了icp在串行口的应用方式用于开发,调试方便,实际运行效果很好,有一定的应用价值。

LG首款5G手机将与G8ThinQ同步亮相 售价最低约合人民币7800元
lm324芯片放大电路工作原理
LoRa商用加速 或加速物联网(IoT)发展
高强度的金属3D打印机已经顺利研发并进入试用环节
iQOO 5系列新品发布倒计时3天,刷新“快”的定义
基于USB总线的MC68HC908JB8 Flash在线编程
应用在热能表领域中的数字温度传感芯片
华为5G合同数量败给爱立信,但任正非还留有后手
谷歌为自行车通勤者设计“联网”智能牛仔夹克
采用虚拟仪器技术实现气体微流量测量系统的设计
联想发布两款智能手表 一款定位潮流时尚另一款定位儿童市场
针对Ampere Altra系列处理器的Memcached优化指南
努比亚z17什么时候上市?骁龙835+6GB,小米6的强力对手重磅来袭
大陆面板厂崛起,台韩厂家如何应对
未来主流特征模态识别精度和速度或都能满足加油支付应用
稳压管的伏安特性和动态电阻
懂得“作恶”成检测机器是否智能的标准?
TCL正在开发一种新型混合显示技术
您需要知道的CMRR—仪表放大器拓扑(第3部分)
力安科技2023智慧电力全国合作伙伴技术培训会顺利举行