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

发布者:不染尘埃最新更新时间:2013-05-02 来源: 电子设计工程 :关键字:HCS12  编程器  擦除  Flash写入 手机看文章 扫描二维码
随时随地手机看文章
引言
    随着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为主控芯片,与目标板以BDM方式进行通信,与PC方则采用USB接口通信,由USB提供电源。编程器系统框图如图1所示。编程器的主要功能是实现对目标芯片Flash的擦除和写入。

a.JPG


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

2 系统软件设计
   
软件系统的设计主要包括:通信程序接口设计、PC方用户程序设计、MCU方擦写程序设计。系统在对目标芯片Flash进行擦除和写入操作时,首先由PC方程序获取用户操作指令,然后调用相应的MCU方擦写程序。通过通信程序接口将需要执行的擦除或写入程序写入目标芯片的RAM区,最后在PC方程序的控制下转向擦写程序所在RAM区的地址执行程序以完成对应操作。
    编程器使用USB方式与目标板进行通信。PC方的用户程序与底层MCU方程序进行通信时,通信程序使用Freescale公司提供的相应动态链接库来实现。
    BDM通信程序动态链接库主要包含的函数如表1所列。具体实现时只需要直接在PC方用户程序中调用动态链接库的函数即可。

b.JPG[page]

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

c.JPG

d.JPG


    启动程序后首先检测设备是否已经连接,如果没有连接则返回错误信息,禁止以下的擦除和写入操作。
    初始化过程结束,成功进入BDM模式后,系统开始等待用户的操作指令,根据相应的指令作出操作。用户在完成所需操作后按退出,关闭设备并退出主程序。
    为了实现编程器对HCS12系列MCU的通用性,“选择芯片芯号”模块的设计致关重要。要详细分析HCS12系列MCU的特性,提取共性和相区别的信息,特别是RAM和ROM区的首尾地址信息,这些信息都需要存放到系统的相应数据库中,以供编程器系统运行时根据所选芯片型号进行读取,作为擦写程序的起始地址数据。
3.2 擦除操作
   
PC方擦除操作程序流程如图4所示。在取得擦除命令后,程序首先载入对应芯片的擦除程序,然后将擦除程序的S19数据写入目标芯片的RAM区中,最后执行GO PC指令,转向芯片中擦除程序所在RAM区中的地址,执行擦除程序。

e.JPG

[page]

3.3 打开和分析S19操作
   
执行该操作,首先按行读入打开的S1 9文件,并将S19数据保存到字符串数组中,每读入一行同时验证该行的校验和,数组中一个单元就是S19一行的数据。然后对数据以页为单位进行重新组合,并重新保存到新的字符串数组中,释放先前的数组空间。
3.4 写入操作
   
PC方写入操作程序流程如图5所示。在取得写入命令后,程序首先取一页数据,将数据写入RAM区相应区域,接着判断写入程序是否已经写入RAM区中,若没有则再将对应芯片的写入程序写入RAM区。然后执行GOPC指令转向目标芯片写入程序所在RAM区中的地址处,开始执行写入。写入程序则进入等待写入完成状态,如果等待超时则中途退出;否则,若一页写入完成,则接着进行下一页的写入操作,直到最后一页。

f.JPG



4 MCU方擦写程序设计
    MCU方的擦写程序用于完成对目标芯片Flash的擦除和写入操作。由于在Flash的擦除和写入过程中,Flash是不能读的,故擦除和写入Flash的程序要放在RAM中,也就是说,在Flash的擦除和写入前,要把擦除或写入的可执行代码复制到RAM中去,并让程序在RAM中执行,这一部分操作是由PC方程序完成的。
    Flash的擦除和写入操作应按以下步骤进行:
    ①清除Flash状态寄存器FSTAT中的出错标志位ACCERR和PVIOL,这是由于如果过去的Flash操作中如果有过出错的情况,上面提到的出错标志位将被锁存。与其检查这些标志位是否需要清零,不如清零这两个标志。方法是向状态寄存器FSTAT的这两位写零。
    ②写Flash配置寄存器FCNFG的b1和b0。以MC9S12DP256为例,这两位表示选择256 KB的Flash中的哪一个64 KB。这里0x00表示PPAGE号为0x3F、0x3E、0x3D、0x3C这64KB,0x01表示PPAGE号为0x3B、0x3A、0x39、0x38这64 KB,0x02表示PPAGE号为0x37、0x36、0x35、0x34这64 KB,0x03表示PPAGE号为0x33、0x32、0x31、0x30这64 KB。
    ③写PPAGE寄存器。
    ④检查上一次Flash处理的命令是否执行完成,能否写入新的命令。这是通过Flash状态寄存器FSTAT中的命令缓冲区的标志位CBEIF是否为1,即命令缓冲区是否可以使用来实现的。若不能使用,则等待,直到可以使用。
    ⑤将要写入的数据字写到相应的地址中,地址必须为偶数地址。对于擦除操作,则被擦除段的任意地址都可以。
    ⑥向FCMD命令寄存器写命令字0x41表示整体擦除,0x20表示单字节写入。
    ⑦向Flash状态寄存器FSTAT中的命令缓冲区的标志位CBEIF写1清零。这时状态寄存器中的CCIF位将置位,说明操作成功。

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

关键字:HCS12  编程器  擦除  Flash写入 引用地址:Freescale HCS12系列MCU的通用编程器设计

上一篇:基于瑞萨单片机自动寻迹智能车的设计
下一篇:Proteus虚拟仿真在单片机实验教学中的应用研究

推荐阅读最新更新时间:2024-03-16 13:22

用89S51制作简易并行编程器ATmega16
;***********************ATmega16(L)简易并行编程器**********************/ ;说明: ;用于没有烧写ATmega16并行编程器的朋友,初用ATmega16的工程师在串行 ;编程时写错熔丝位,及加密位,造成不能再应用串行编程,构成不便,没并行 ;编程将无法再使用,做了一个简易的并行编程器(很简单,用万能板搭焊即可), ;将的芯片加密位及熔丝恢复出厂默认值及恢复串行在线编程功能(ISP)。 ;********************************************************************** ;使用说明: ; 本 电路 有1按键(ke
[单片机]
Flash编程器的FPGA实现
1 引言 闪速存储器(FLASH Memory)以其集成度高、成本低、使用方便等许多优点,广泛应用于通讯设备、办公设备、家用电器、医疗设备等领域。利用其保存信息的非易失性和在线更新数据参数的特性,可将其作为具有一定灵活性的只读存储器(ROM)使用。 现在的数字电路应用系统设计中,经常遇到大容量的数据存储问题。Flash由于容量大、存储速度快、体积小、功耗低等诸多优点,而成为应用系统中数据存储器件的首选。由于在研制实时信号处理系统时,需要一块大容量的Flash来存储坐标变换的数据作查找表,因此面临一个如何对Flash进行编程,将数据写入Flash的问题。由于我们选用的Flash芯片为SST39SF010/020,是最
[工业控制]
<font color='red'>Flash</font><font color='red'>编程器</font>的FPGA实现
FLASH__HCS12学习笔记(5)
昨天调了一天的FLASH擦写,到最后依旧没有调通,但是对FLASH的结构还总算有一定的了解了。我调的程序是北航出版社的《使用HCS12微控制器的设计与应用》这本书附带光盘上的例子,程序似乎没有问题,但是FLASH确实是擦不掉,串口返回的数据,每一页都相同,令人费解,并且如果我要读FLASH上的数据,就会灵程序报错停止,不知道是跑飞了还是什么。也希望如果有同样问题的朋友能够一起讨论讨论。 下来罗列一些FLASH的基本概念,也算是复习一下。 这是HCS12内部地址的基本结构图,我们可以看到第一部分是寄存器,第二部分是EEPROM,第三部分是RAM,第四部分就是FLASH了,这部分是不分页时我们可以访问到的FLASH,
[单片机]
如何利用AVR芯片制作高压并行编程器
前阵子手上刚好有几片锁死了的M8,估计连RESET也被禁用了,这些芯片已经无法通过下载线来恢复了。为了减少损失,故在网上一阵搜索,原来AVR的芯片的熔丝都是可重复编程的,不像OTP熔丝,一次配置了就不能修改了,只不过不是需要高压编程器罢了(12v的,不是ISP下载线能胜任的),上淘宝网看了一下,成品高压编程器的价格可不菲,况且我也不是经常用,平时有ISP下载线也就够用了,而且也方便,不用从目标板上取下芯片即可编程,据现在的情况看来,自己做一个简单的高压编程器是势在必行了,并且为了推扬我们的DIY精神,我找了一些资料和软件,准备自己制作高压并行编程器了,经过一阵子的捣鼓,编程器终于做好了,现与大家分享一下制作过程和一些心得,供有兴趣
[单片机]
如何利用AVR芯片制作高压并行<font color='red'>编程器</font>
XMOS推出全新封装的XS1-G4可编程器
软件化芯片(Software Defined Silicon)初创公司XMOS日前推出了其G4可编程器件的一款新型封装形式,它是XS1-G4系列的第一款产品。该款新型144管脚BGA的封装形式是专为要求较小外形(11mm2)的各种系统而设计,其0.8mm的球间距是小巧型设计和简单PCB布局的理想之选。针对需要完整256 I/O管脚的那些设计,也可以提供一个 512管脚BGA封装产品。 该款新型可编程芯片专为快速开发周期设计,其价位满足生产成本需求,是多种需客户订制和差异化功能的电子应用之理想选择。XMOS逻辑器件通过采用一个事件驱动处理器阵列、可编程芯片来运行逻辑门、控制引擎和DSP功能。XMOS器件的设计使用的C语
[嵌入式]
spi flash偶尔出现写入错误的情况
spi flash W25Q128会偶尔出现写入错误的情况,会发现读出的值和写入的值不一致,需加入2次读出比较判断。 W25QXX_Read(&temp_date_count,0x000000,1); //W25QXX_Write((u8*)&temp_date,0x400000,135); //W25QXX_Read((u8*)&temp_data_test,0x400000,135); W25QXX_Write((u8*)&temp_date,(temp_date_count*135+1),135); W25QXX_Read((u8*)&temp_data_test,(temp_date_count*1
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved