0 引 言
一般来说,在系统编程(ISP)是指依靠某种外部工具(除了常规的并行编程器以外)直接给处理器内部集成的程序存储器编程。这里所指的外部工具常见的有很多种,不同的处理器供应厂商可能提供不同的方案。例如,根据编程接口的不同,就有JTAG、单线、串口、SPI口等多种方式。尽管编程方式有所不同,但其原理都是类似的,就是依靠外部条件触发处理器,令其脱离正常执行的内部常规用户应用程序代码的进程,转而执行保存在其程序存储空间内某个固定位置处的控制擦除程序存储器及给程序存储器编程的代码(或是处理器外部提供的执行代码),然后通过某种与PC计算机的通信方式,将用户指定的某个在PC上编译完成的嵌入式处理器可运行的二进制代码文件编程人嵌入式处理器内的程序存储器。这种编程方式只需要常规的硬件配置(某些处理器可能需要某些叫作下载线的简单硬件电路)支持,而不需要特别的编程器(指并行编程器)支持,所以即使处理器芯片已经焊接到了电路板上也可以实现编程,这也就是ISP的真实含义。
1 通用的在系统编程方法
随着嵌入式系统技术的发展,电可擦除的FLASH芯片以容量大,价格低,编程方便等优势得到了广泛的应用。用一片FLASH作为程序存储器的系统无法直接实现在系统编程(ISP),为了方便现场调试和程序升级,可以采用集成ISP功能的MCU(如AVR、部分ARM芯片等),或者采用双FLASH设计等方法实现ISP功能。但有不少系统仍然使用不具备直接ISP功能的MCU(如M68K、N80C196等),同时因印制版面积、成本等原因的考虑也没有采用双FLASH芯片,此类系统在程序升级时通常需要编程器、仿真器等特定工具,在现场调试时很不方便。
针对使用不具备ISP功能的MCU系统,只要满足以下四个条件,就可以按照本文的方法进行ISP设计。考虑自编程过程中文件出错、断电等特殊情况,此方案可实现故障保护。
(1)程序空间和数据空间统一编址,程序可以在RAM中运行;
(2)FLASH芯片正确连接了写信号;
(3)拥有能放下Update程序并让其正常工作的额外程序/数据空间;
(4)具备某种通信能力(例如以太网、串口、CAN、MODEM等)。
程序分布如图1所示。这种情况下需要把整个工作分为三部分完成。第一是引导程序(称为Boot程序);第二是升级程序(Update程序);第三是正常程序(Normal程序)。Boot程序负责控制程序的运行模式:升级模式、正常模式。如果进入升级模式,Boot程序需要将Update程序复制到指定的运行空间,并转入执行Update程序;如果进入正常模式,Boot需要做的工作就十分简单,可以直接把控制权交给正常程序。要注意Update在自编程时不能破坏Boot程序。此时Normal程序不再负有复制Update程序到指定运行空间的任务,完全按照正常的模式运行。
按照这种方案,Boot程序和Update程序是自编程设计的核心内容,只要保证这部分程序代码的完整性,就能拥有在线编程的能力。要对这部分程序代码区进行保护,保证在第一次写入程序存储器后就不会再被擦除。这样即使在自编程时发生灾难性故障,Boot程序和Update程序是不会被破坏的,仍然可以继续运行,保证下次仍然可以进行自编程。程序完成后必须分别固化到程序存储器的指定空间,以保证程序的正常运行。
2 80C196KC ISP的通信模块设计
实现80C196KC ISP的核心思想即用AT29C256代替常用的M27C256做程序存储器与80C196KC相接,区别在于前者1引脚接/WR,后者1脚悬空;再用一片DS1230Y(NV SRAM)做中转。AT29C256分三个空间存放引导程序、更新程序和正常控制程序;其中引导程序用于80C196KC和上位机进行串口通信,接收上位机编译好的更新程序(.Hex文件),并把它放到DS1230Y中,在下载完成后把其中接收的程序代码发回上位机进行校验,校验无误后跳转去运行更新程序;更新程序用于将DS1230Y中校验无误的新程序复制到AT29C256的正常控制程序空间;正常控制程序即待更新或已经更新的系统程序。每次系统上电后由键盘判断是否需要在系统编程,如果需要,则经过引导程序和更新程序执行后,跳转到正常控制程序空间运行更新了的程序。如果不需要,则直接跳转到正常控制程序空间运行。在从AT29C256取指令时,注意WE脚保持高电平。
2.1 通信协议
目前微机的串行通信口都是基于RS 232协议的,但因其传送速率较低、抗干扰能力较差、传送距离太近等缺点,该系统采用RS 422通信方式。RS 422每个通道通过二条信号线进行传输,采用平衡驱动、差分接收形式,对在接收器输入端出现的共模噪声起到了抑制作用,可以允许较大的信号衰减。另外由于两者之间不共地,不存在回路之间的电位差,彻底消除了远距离信号传输中因地电位不等造成的影响,从而有很强的抗干扰能力,并且可获得较长的传输距离。
2.2 通信接口电路
鉴于篇幅,这里只给出串口通信中PC端硬件接口部分。
首先由一块MAX232芯片把PC机串行口的RS 232电平转换为TTL电平,然后通过6N137的光电隔离模块进行隔离,再通过MAX 487芯片完成RS 232协议到RS 422协议的转换。其实也就是一个电平被转换为两个压差电平的过程,如图2所示。
2.3 通信软件设计
单片机(下位机)软件开发采用PL/M语言。主要由更新程序和通信程序组成,通信程序又包括通信主程序、接收、发送和定时中断程序等。其中通信主程序是不断循环执行的,如果上位机发送了数据则进入接收中断处理程序,并同时在定时中断中设置一个在接收中断中被清零的计数器,当定时器溢出某个时间范围时,说明接收完毕。这时触发发送中断,上发接收到的整个文件内容用于校验。这里仅给出部分更新程序代码。
固化中断服务程序,并通过在PL/M语句中嵌入汇编语句完成程序的跳转。下载完成后,将程序复制到AT29C256后运行新程序,DS1230Y仍用作数据存储器。
PC(上位机)操作界面应用Delphi 6.0开发。在Delphi 6.0开发环境下实现串行通信有多种方法,如:调用MSCOMM.OCX控件、在Windows下使用Win-dows API、应用嵌入式汇编语言、直接构造Delphi中的通信控件、利用动态链接库(DLL)等。考虑到该系统的通信情况比较简单,所以直接使用MSComm组件编写串口通信软件,主要包括三个方面的设计内容:
(1)收发数据,指的是在PC机的串口与80C196KC的串口UART之间能收发字符串,二进制串(16进制显示);
(2)收发文件,指的是在PC机的串口与80C196KC的串口UART之间能收发字符型文件,16进制文件(.Hex文件)
(3)差错校验及系统可靠性设计。通信的成功与否最后还要看校验的结果,即接收端是否能正确无误的接收到发送端发送的内容。差错控制流程图如图3所示,核心代码如下:
最终开发出的操作界面如图4所示,包括下载进程显示条,串口初始化设置框,收发数据文本框,选择打开发送文件按钮,发送文件大小显示框,校验按钮,文本与16进制类型选择框以及通信状态显示项。
3 结 语
提出了基于串口通信的通用的单片机ISP方法并针对80C196KC实现了PC机上已编译程序的在线下载。通过回声法校验,返回的接收文件与发送文件完全一致,系统可靠性高,设计简单,实现容易,具有一定的理论研究意义和应用前景。为“国家杂交水稻工程技术研究中心”人工气候室智能控制系统的系统程序更新,升级和远程维护提供了方便。