C8051F023属于Cygnal公司的C8051F系列。该芯片内核CIP-51采用了流水线指令结构,速度最高可达25MIPS(Million Instructions Per Second,每秒百万条指令),且70%的指令可在1~2个系统时钟周期内完成,这为嵌入式设备采用复杂的算法提供了必要的条件。同时芯片内部集成了容量达64KB的Flash存储器,用于程序代码和非易失性数据的存储,可由软件使用MOVX指令对Flash存储器进行在系统编程。
① 在写入新的软件代码之前,需要将程序存储器中原来的数据擦除。由于C8051F023的Flash存储器是以大小为512B(用十六进制表示为200H)的扇区为单位组织的,一次擦除操作将删除整个扇区,因此每个功能模块的地址空间必须是200H的整数倍。
② C8051F023特有的优先权交叉开关译码器在数字外设引脚和通用I/O端口之间建立了可控的连接,该机制提高了I/O灵活性,但也使得如下情况成为可能:新开发的可注入模块需要使用并配置高优先权的外设,在把该模块注入到MCU后,这些配置会改变主程序模块中已经定义的数字外设与通用I/O端口间的关系,使得I/O引脚不再具有原先的含义,从而破坏了MCU与嵌入式设备间的接口标准。因此,必须在主程序模块中统一配置优先权交叉开关译码器,从而为所有模块建立一个通用的、引脚含义明确的硬件平台。
3 软件代码文件的生成
从图1可以看出,软件程序最终是以十六进制代码的形式驻留在软件注入枪或注入卡中的,因此软件程序的十六进制代码文件必不可少。然而,在C8051F023集成开发环境下,源程序文件经过编译后生成的二进制文件是不可读的,只能通过JTAG口下载到MCU中。对此,需要把开发环境中附带的DOS程序oh51.exe复制到与编译后的二进制文件相同的文件夹下,然后在DOS操作环境下利用该工具将生成的二进制文件转换成hex文件。然而,此时的hex文件仍是不可用的(如图3所示,这里假设文件名为example),因为它包含了行标识符号、代码地址、校验字符等非代码内容,并且由于ORG伪指令的使用使得软件代码的地址是不连续的,而通常采用的手段是将软件代码下载到连续的存储器空间,以简化通信协议的制订和引导装入程序的编写。针对这种情况作者编写了DOS程序v2.exe,利用该程序可将输入的hex文件统一转换成仅包含纯粹软件代码的codes.txt文件(如图4所示),同时生成的readme.txt文件给出了在注入软件时所需的一些参数(该参数与软件注入规程有关)。V2程序的功能具有通用性,可作为C8051F023集成开发环境的一部分,该程序使用Turbo C 2.0集成开发环境开发,其源代码见本刊网站www.dpj.com.cn。结 语