基于68MC376的ISP实现方法

时间:2007-04-28
摘 要:本文在Motorola 68MC376平台上通过软硬件设计实现了在系统编程(ISP)的功能。
关键词:单片机;ISP

引言
目前,在汽车电子中有很多常用的单片机,如Motorola 68MC376等,它们在硬件上并不直接支持ISP,从而在应用中造成一定程度的不便。本文研究的目的即是在Motorola 68MC376单片机上通过相关的硬件设计和软件设计实现ISP,使其同样具有在系统编程的能力。
系统设计
总体设计和难点
让Motorola 68MC376单片机具有ISP能力,需要有专门的硬件支持以及上位机和下位机的软件支持。总体ISP设计框图如图1所示。
由图1可知,本设计所使用的ISP方法是从上位机读取编程字节,通过串口传输到下位机,并且通过下位机程序将编程字节写到下位机的可擦写存储器中。
这样一个设计存在两个难点。首先,由于硬件68MC376并不具备内部的ROM,所以必须使用合适的Flash存储器搭建存储器扩展电路,才能实现存放应用程序的目的,为ISP提供基本的硬件基础。其次,由于ISP的下位机应用程序均存在于的Flash中,即在读取自身程序的同时对自身进行擦写等操作,这显然是不可能的,必须使用其他的独特方法才能实现下位机的软件编程操作。
硬件设计
为了使68MC376具有ISP能力,首先需要围绕该芯片设计Flash ROM扩展电路硬件和串口的收发电路。
图2中包括两部分电路的设计,即Flash扩展电路的设计和串口设计。
Flash扩展电路主要包括地址总线(ADDRESS)、数据总线(DADA BUS)以及读写和片选信号的连接。由于68MC376外部数据总线为16位,故选择两片AM29F040作为外部扩展Flash。该Flash芯片单片容量为4Mbit,所以扩展的只读存储器共计1Mbyte。
由于使用68MC376的CSBOOT连接了两片Flash的片选端,所以图2所连接的Flash ROM可以实现硬件自启动功能。为实现此功能,需要对其物理地址进行配置。在本设计中,Flash的地址被配置在0x80000的位置。
图2中的串口电路为使用了光电隔离措施的串口驱动电路。由于该电路可能工作在电磁兼容环境比较恶劣的场合,所以使用6N137设计光隔电路,以免外界干扰对单片机产生影响。
软件设计
软件设计主要包括上位机软件设计和下位机软件设计,二者需要遵循同样的协议,相互配合工作。
图3描述了在系统编程时上位机和下位机的配合流程。通常在下位应用程序中,该部分在系统编程的代码处于休眠状态,当串口接收到编程请求时,该部分代码才被激活并产生相应的效果。该流程中设计了一个编程开锁的握手过程,这是为了防止误操作,从而保证下位机在系统编程的代码不会被意外的激活。
下位机软件
图3中下位机编程初始化部分主要完成Flash读写允许、信号串口波特率的重新定义、RAM配置以及ISP代码拷贝等任务。为了提高ISP速度,通常将串口波特率设为57600bit/s。RAM使用单片机内部的TPURAM,并将其配置在从0x10000开始的地址上。
图3下位机流程中被框起的是一个特殊的部分。通常下位机的应用程序都是在ROM里执行的。但是由于在ISP过程中,系统不可能一边从Flash ROM读取指令,一边对Flash ROM进行擦写操作,所以这里采用了特殊的子函数映射的方法完成这一功能,即在源代码设计中,所有的ISP子函数均是通过计算相对地址得到运行的(见图4)。
系统从Flash ROM启动后,位于地址0x81000处有一段代码具有ISP的串口读数功能,则在实际执行时先要将这段代码拷贝到地址0x10000,然后跳转至映射的地址并执行相应的指令。下面一段源代码为串口接收(sci_receive)的源程序例。
MOVE.L #FlashBaseAddr,D0;
file://得到ISP代码在Flash中的基地址
MOVE.L #sci_receive,A0;
file://得到sci_receive子函数的实际地址
SUB.L D0,A0;
file://二者相减得到基地址偏移量
ADD.L RAMBaseAddr,A0;
file://加上RAM基地址,得到RAM中//sci_receive的映射地址
JSR (A0);
file://跳往映射地址处执行
上位机解码工作
上位机软件设计中,比较重要的一部分是SX文件的解码工作。
SX文件一般以S0行标志文件代码部分开始,S9行表示文件代码部分结束。中间部分一般以S1、S2或者S3开头,表示不同的寻址范围。
以S20C08000000002000000 852145D为例,该部分代码为24位寻址(即地址为3个字节)。具体地址为0x0C0800,后面除了一个字节以外均为实际二进制代码的字符表达形式,一个字节5D为该行的校验码。
该代码需要通过重新编码后方可被单片机直接使用。考虑到单片机的运算速度远不如上位机PC,所以这部分工作由上位机完成。上位机每个编程循环读取一行SX格式的代码,获取地址并且完成解码后,通过串口发送给下位机。下位机从串口获取该地址和该行编码后,直接调用ISP中的Flash烧写程序对Flash进行编程。
实际结果
在实际工作中使用Matlab/GUI编写了上位机解码和发送程序,配合下位机的ISP软件工作,各方面表现均正常。尝试76K的SX格式的下位机软件时,用时大约为1分钟。

结语
本文使用Flash作为ROM扩展了68 MC376的存储器硬件电路,设计了串口电路的硬件,完成了ISP硬件的设计;通过SX文件上位机解码,以及下位机独特的映射执行代码的方式,完成了ISP的软件设计。
考虑到68K系列芯片的相似性,类似芯片如68 MC332等均可以直接使用该方法实现ISP在系统编程的功能。■

参考文献



[1]. ROM datasheet https://www.dzsc.com/datasheet/ROM_1188413.html.
[2]. AM29F040 datasheet https://www.dzsc.com/datasheet/AM29F040_306529.html.
[3]. 6N137 datasheet https://www.dzsc.com/datasheet/6N137_91364.html.


上一篇:MBM02在蓝牙耳机中的应用
下一篇:廉价与低功耗IC温度传感器更适应便携式设备的要求

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料