APP下载

Freescale HCS12系列MCU 的通用编程器设计

2013-08-27聂章龙

单片机与嵌入式系统应用 2013年2期
关键词:寄存器命令芯片

聂章龙

(常州信息职业技术学院,常州213164)

引 言

随着Flash技术在微处理器上的广泛应用,单片机在开发和应用手段上有了革命性的变化,从传统的仿真器(ICE)到目前流行的JTAG 等。设计人员仍然在不断地寻找一种移植性更高、更易操作、费用更低的开发手段。随着微处理器制造工艺的提高,一些高端微处理器(如CPU12/16/32、PowerPC、ColdFire等)内部已经包含了用于调试的微代码,都可以通过BDM 等进行调试。由于这种方法省去了仿真器,因此避免了高频操作、交直流电的不匹配等问题,而且随着BDM 标准的不断规范和普及,用BDM 调试模式进行嵌入式开发已经成为首选。

Freescale公司HCS12系列MCU 通用编程器是支持Freescale公司MC9S12 系列、MC9S12X 系列单片机的BDM 调试工具,它可以用于对Freescale公司所有16 位MCU 的写入和擦除操作。

1 编程器概述

Freescale公司16位MCU 通用编程器是用于Freescale公司16 位MCU 的BDM 调试工具,编程器采用MC68HC908JB8[1]为主控芯片,与目标板以BDM 方式进行通信[2],与PC方则采用USB接口通信,由USB提供电源。编程器系统框图如图1所示。编程器的主要功能是实现对目标芯片Flash的擦除和写入。

图1 编程器的系统框图

编程器采用M68HC908JB8为主控芯片。与PC方通过USB 进行通信,与目标板则通过BDM 驱动模块以BDM 方式进行通信,系统由USB提供电源。

2 系统软件设计

软件系统的设计主要包括:通信程序接口设计、PC方用户程序设计、MCU 方擦写程序设计。系统在对目标芯片Flash进行擦除和写入操作时,首先由PC 方程序获取用户操作指令,然后调用相应的MCU 方擦写程序。通过通信程序接口将需要执行的擦除或写入程序写入目标芯片的RAM 区,最后在PC方程序的控制下转向擦写程序所在RAM 区的地址执行程序以完成对应操作。

编程器使用USB 方式与目标板进行通信。PC 方的用户程序与底层MCU 方程序进行通信时,通信程序使用Freescale公司提供的相应动态链接库来实现[3]。

BDM 通信程序动态链接库主要包含的函数如表1所列。具体实现时只需要直接在PC 方用户程序中调用动态链接库的函数即可。

表1 动态链接库函数表

3 PC方用户程序设计

3.1 程序主流程

PC方用户程序界面如图2所示,主程序流程如图3所示[4]。S19是编程器生成的可下载的文件格式。

图2 PC方用户程序界面

启动程序后首先检测设备是否已经连接,如果没有连接则返回错误信息,禁止以下的擦除和写入操作。

图3 主程序流程图

初始化过程结束,成功进入BDM 模式后,系统开始等待用户的操作指令,根据相应的指令作出操作。用户在完成所需操作后按退出,关闭设备并退出主程序。

为了实现编程器对HCS12 系列MCU 的通用性[5],“选择芯片芯号”模块的设计致关重要。要详细分析HCS12系列MCU 的特性,提取共性和相区别的信息,特别是RAM 和ROM 区的首尾地址信息,这些信息都需要存放到系统的相应数据库中,以供编程器系统运行时根据所选芯片型号进行读取,作为擦写程序的起始地址数据。

3.2 擦除操作

PC方擦除操作程序流程如图4所示。在取得擦除命令后,程序首先载入对应芯片的擦除程序,然后将擦除程序的S19数据写入目标芯片的RAM 区中,最后执行GO PC 指令,转向芯片中擦除程序所在RAM 区中的地址,执行擦除程序。

图4 擦除操作程序流程图

3.3 打开和分析S19操作

执行该操作,首先按行读入打开的S19 文件,并将S19数据保存到字符串数组中,每读入一行同时验证该行的校验和,数组中一个单元就是S19一行的数据。然后对数据以页为单位进行重新组合,并重新保存到新的字符串数组中,释放先前的数组空间[6]。

3.4 写入操作

PC方写入操作程序流程如图5所示。在取得写入命令后,程序首先取一页数据,将数据写入RAM 区相应区域,接着判断写入程序是否已经写入RAM 区中,若没有则再将对应芯片的写入程序写入RAM 区。然后执行GO PC指令转向目标芯片写入程序所在RAM 区中的地址处,开始执行写入。写入程序则进入等待写入完成状态,如果等待超时则中途退出;否则,若一页写入完成,则接着进行下一页的写入操作,直到最后一页。

图5 写入操作程序流程图

4 MCU方擦写程序设计

MCU 方的擦写程序用于完成对目标芯片Flash的擦除和写入操作。由于在Flash的擦除和写入过程中,Flash是不能读的,故擦除和写入Flash的程序要放在RAM 中,也就是说,在Flash的擦除和写入前,要把擦除或写入的可执行代码复制到RAM 中去,并让程序在RAM 中执行,这一部分操作是由PC方程序完成的[7]。

Flash的擦除和写入操作应按以下步骤进行:

①清除Flash状态寄存器FSTAT 中的出错标志位ACCERR和PVIOL,这是由于如果过去的Flash操作中如果有过出错的情况,上面提到的出错标志位将被锁存。与其检查这些标志位是否需要清零,不如清零这两个标志。方法是向状态寄存器FSTAT 的这两位写零。

②写Flash 配置寄存器FCNFG 的b1 和b0。以MC9S12DP256为例,这两位表示选择256KB的Flash中的哪一个64 KB。这里0x00 表示PPAGE 号为0x3F、0x3E、0x3D、0x3C这64KB,0x01表示PPAGE号为0x3B、0x3A、0x39、0x38这64KB,0x02表示PPAGE号为0x37、0x36、0x35、0x34这64KB,0x03表示PPAGE 号为0x33、0x32、0x31、0x30这64KB。

③写PPAGE寄存器。

④检查上一次Flash处理的命令是否执行完成,能否写入新的命令。这是通过Flash状态寄存器FSTAT 中的命令缓冲区的标志位CBEIF是否为1,即命令缓冲区是否可以使用来实现的。若不能使用,则等待,直到可以使用。

⑤将要写入的数据字写到相应的地址中,地址必须为偶数地址。对于擦除操作,则被擦除段的任意地址都可以。

⑥向FCMD命令寄存器写命令字0x41表示整体擦除,0x20表示单字节写入。

⑦向Flash状态寄存器FSTAT 中的命令缓冲区的标志位CBEIF写1清零。这时状态寄存器中的CCIF 位将置位,说明操作成功。

结 语

利用MC68HC908JB8 作为主控芯片,通过USB 与PC方交互通信,以BDM 方式与目标芯片进行通信,实现了一种用于Freescale HCS12系列MCU 的通用编程器。系统选用MC68HC908JB8MCU 进行设计,不仅是因为这款芯片性价比高,而且在于其USB模块使操作更加方便和可靠,本文所提出的16位通用编程器工作可靠,成本低。读者可以以本系统为蓝本,设计自己的应用于其他系列芯片的编程器,应用到支持BDM 标准的其他系列微控制器中。

[1]Freescale.Technical Data-MC68HC908JB8,2005.

[2]Freescale.Background Debug Module(BDM)V4,2003.

[3]Daniel Malík.Turbo BDM Light interface[OL].[2012 10].http://read.pudn.com/.

[4]曹金华,刘晓升,王宜怀.Freescale HC08 系列MCU 集成开发环境的设计[J].微计算机信息,2009(9):77-79.

[5]蒋银珍.M68HC08系列MCU 通用编程器及配套软件开发[D].苏州:苏州大学,2004.

[6]刘晓升,曹金华,沈安东.HC08系列微控制器编程调试器通用性设计[J].计算机工程,2008(12):253-255.

[7]王艳春,王宜怀.M68HC08 MCU 通用编程器的设计与实现[J].自动化与仪表,2008(9):58-60.

猜你喜欢

寄存器命令芯片
芯片会议
只听主人的命令
STM32和51单片机寄存器映射原理异同分析
关于射频前端芯片研发与管理模式的思考
Lite寄存器模型的设计与实现
移防命令下达后
这是人民的命令
多通道采样芯片ADS8556在光伏并网中的应用
高速数模转换器AD9779/AD9788的应用
一种可重构线性反馈移位寄存器设计