SPI和UART在线编程机制的比较

2016-01-28 06:49宋庆华宋庆国
舰船电子对抗 2015年5期

宋庆华,宋庆国

(1.中国电子科技集团公司第13研究所,石家庄 050051;

2.石家庄聆风畅想信息技术有限公司,石家庄 050000)



SPI和UART在线编程机制的比较

宋庆华1,宋庆国2

(1.中国电子科技集团公司第13研究所,石家庄 050051;

2.石家庄聆风畅想信息技术有限公司,石家庄 050000)

摘要:分析了传统并行编程技术的实现原理,介绍了以AT89S51为样机利用串行外设接口(SPI)协议实现串行编程的原理和以P89V51RD2为样机利用通用异步收发器(UART)串口协议实现串行编程的原理,对比了2种串行编程技术,阐述了用户程序的保护措施和标记信息的应用方法,以便于管理开发过程、生产过程和日后维护。

关键词:单片机烧写;并行编程技术;通用异步收发器;串行外设接口;系统内编程

0引言

目前,随着单片机开发技术的高度发展,集成开发环境(IDE)功能日益强大和完善,基本把单片机应用开发流程中所需的各种软件工具全部囊括其中(例如,源代码编辑器、初级语言汇编器、高级语言编译器、连接定位器、软件模拟调试器、代码格式转换器、模块文件库管理器等),几乎不需要购买任何硬件装置,也可以实现单片机程序的设计和调试。但是,在利用软件工具链进行单片机应用项目的开发过程中,末尾一个环节就是烧写程序到单片机中。这也是一道必须借助于硬件工具才能够实现的工序,哪怕是非常简单的硬件工具,简单到只有3芯(或2芯)的一条连接线[1]。

在80C51系列单片机中,可以由开发者自主编程的型号有电可编程只读存储器(EPROM)版本的87C51(包含窗口EPROM型和OTP-EPROM型)、Flash版本的89C51等。当前从制作工艺、性能特点、零售价格和使用方便性等方面进行比较,由于89C51具有明显的优势,因此Flash型单片机是初学者或工程师在项目研发阶段的首选型号。

虽然能够供应Flash型89C51产品的厂商众多,例如ATMEL、NXP、SST、STC和ISSI等公司,但是深受欢迎、影响广泛、性价比高的型号之一是AT89S51。

1新兴的串行编程技术

传统的并行编程方式一般只能借助于“通用程序烧写器”才能实现,并且还必须把单片机插接到烧写器面板上的插座中才能实施。并行编程方式的主要缺点是:烧写设备昂贵;烧写操作麻烦;需要外部提供电压值较高的编程电压;不便于实现在系统内编程(ISP);更是不能实现在应用中编程(IAP)[2]。

为了克服上述缺点和局限性,一些80C51的新型兼容品设计了串行编程能力,也就是在芯片内部配备了实现“串行编程接口逻辑”功能的硬件电路。这里就试图对于当前非常普及的2种不同的实现串行编程的技术方案进行研究。主要研究两者的支撑逻辑、工作原理、功能特点、性能对比、制作成本、自制便利性、使用方便性、操作特点、对应单片机产品的丰富程度等方面。

1.1 利用SPI接口的串行编程机制

这种串行编程技术是基于串行外设接口(SPI)而实现的。该规范是由MOTOROLA公司最先提出并应用到本公司单片机系列产品中的。

1.1.1实现原理

ATMEL公司不断完善和主力推出的AT89S系列单片机,其中包括AT89S51、AT89LS51、AT89S52、AT89LS52、AT89S53、AT89LS53、AT89S8252、AT89LS8252、AT89S8253、AT89LS8253等型号。这里将以AT89S51为例。

AT89S系列单片机内部都在intel标准80C51的基础上,额外设计了一个实现“串行编程接口逻辑”的硬件电路。如图1所示,这是作者依据自己的理解和分析而绘制的一个示意图。

图1 AT89S51片内串行编程逻辑接口示意图

与并行编程方式显著不同的是,编程操作所需要的信号线数量大大减少了,但是单片机内部接口逻辑的复杂程度也相应提高了,额外增加了串行编程操作命令的译码逻辑。不过,这些复杂功能的实现都已经由芯片制造商ATMEL在芯片层面上解决了,对于单片机应用者了解即可。由上述译码逻辑负责把一些命令编码“翻译”成一系列内部操作的控制信号。

在串行编程方式下,编程引脚所分配的信号功能如图2所示[1]。所需要的主要信号线仅仅只有4条:串行时钟线(SCK)、串行命令(包含地址和数据)输入线(MOSI)、串行数据输入线(MISO),还需要复位线(RST)的配合。

图2 串行烧写编程和读出校验接线图

编程引脚所需要的信号时序如图3所示[1]。可以看出,该信号时序与目前流行的一种同步串行接口规范SPI相一致。因此,包含AT89S51在内的AT89Sxx系列单片机又可以被称为具有SPI接口下载能力的单片机。

图3 串行烧写编程和读出校验信号时序图

为什么说串行编程方式可以克服并行编程方式的一些局限性,还可以增加灵活性呢?作者进行了如下分析:

(1) 可以方便地实现ISP编程方式。理由是所需引线很少,只要6条连线即可。其中4条信号线,2条电源线。

(2) 可以免用价格较贵的商用烧写器,特别适合那些手头缺少专业开发工具的初学者开展自行上手演练和电子制作等实战活动。

1.1.2支撑电路设计

为了利用好AT89S系列单片机的ISP编程方式,需要印制电路板(PCB)目标板的配合,并且在设计目标板时就该预留出和焊装上编程接口插针(一般10针)和跳线切换插针,如图4所示[2]。

图4 预留编程插口和跳线插针的目标板

如图5所示,将PC微机系统通过其并行接口LPT与下载编程电缆(即AT89ISP Programmer Cable)连接,再通过一个10芯插口连接到用户目标板的示意图。

图5 “微机+下载电缆+目标板”三者连接关系

图6为一款适合自行制作的并口下载线实物照片。其内部电路可以利用一片74HC373搭配几只电阻构建而成,也可以利用一片74HC245搭建而成,还可以利用一片74HC573、74HC244或者74HC126搭建。作者亲自动手制作了几种不同的电路方案,实践证明,其中利用74HC573和74HC373的电路工作很可靠。

图6 并口下载线实物照片

1.2 利用UART接口的串行编程机制

AT89S系列单片机的串行下载方法有一个显著特点,即片内的编程接口逻辑是由纯粹的硬件实现的,因此在编程期间AT89S的CPU被强制为“冻结”状态,而不执行任何软件。

其他几家公司推出的一些80C51兼容单片机中所增添的串行下载功能采取了与AT89S系列完全不同的技术方案,就是利用现成的异步串行通信接口UART来实现,仅占用2条信号引线。例如,Winbond的W78E5xx/ W77E5xx、NXP的P89C51Rxx/ P89C6xx/ P89LPC9xx/ P89V51Rx2、STC的STC89C5xRC/ STC12Cxxxx、SST公司的SST89C5x/ SST89E5xRC / SST89E5xRD等。

利用现有UART接口来实现下载编程的特点是:占用PC机一个串口COM;仅需一条3芯连线;不需制作专用下载电缆(利用通用9芯电缆也可);编程期间需要目标单片机的CPU执行ROM固件程序;通常这类单片机内部配备了一块专用ROM空间,并且在出厂时固化了一个引导装载程序BootLoader(包含一段ISP监控程序和一个“在应用中编程”(IAP)子程序集,其中IAP子程序集可以供ISP监控程序或用户程序调用,ISP监控程序用以建立与PC系统的通信);这类单片机一般都具有IAP能力,给远程遥控升级用户软件或遥控修改用户密码提供了硬件支撑基础。

1.2.1实现原理

这里将以P89V51Rx2系列单片机(即P89V51RB2、 P89V51RC2或P89V51RD2)为样机,说明串行烧写编程的操作原理。图7和图8为硬件编程逻辑示意图,这些都是作者自行分析和总结后绘出的,以便于推敲UART串行编程的操作原理。

图7中PC机通过一个9针串口COM、一条通用电缆(充当下载线,仅利用了3芯)、一片RS232/TTL电平转换器,连接到目标板中单片机的UART串口信号RXD和TXD以及接地信号。另外,需要在微机上运行一个专用软件,作为人机操作界面。

图8 UART串行编程逻辑示意图

图8是单片机内部实现UART串行下载代码数据和烧写编程的示意图。从中可以看出,对于片内Flash进行烧写时,CPU处于活动状态并且在执行厂家预先固化于ROM空间的“引导程序”。即在对Flash空间进行烧写或擦除时,所执行的程序必须位于另外一个独立的空间。

理由是,当烧写或擦除Flash空间的部分存储单元时,需要把给该Flash整个空间供电的电源电压进行提升,即利用电荷泵技术把单片机外接电源电压提升为烧写和擦除操作所需的高电压(即Vpp,目前一般约为12 V左右),如果这时依然把该Flash空间当作指令源,容易出现意外结果或乱码情况。从图8中还可以看出:

(1) 在编程过程中UART串口负责与微机建立通信,接受微机以HEX文件格式发送的控制命令和目标文件记录。

(2) 在编程过程中RAM数据存储器担当代码数据缓冲区,暂存微机在一次下载通信中发来的一个HEX文件记录。

(3) CPU对于Flash空间的烧写、读出和擦除等编程操作,是靠一个编程接口逻辑来实现的。

(4) 除了Flash存储空间,还有用户配置字节、引导矢量字节、引导状态字节、芯片标记字节以及锁定位,这些都属于烧写编程的操作对象。其中只有芯片标记字节的内容是由厂家写入的,对于用户是不可改写的。

(5) 只有在ISP或IAP编程期间,上述编程对象才是可以被CPU读写的。

(6) 也只有在ISP或IAP编程期间,固化着引导程序的ROM空间才作为CPU的指令源。

其实,UART串行编程过程可以被分解为2种操作活动:

第1种操作是通过外接电缆与微机通信来下载一个HEX文件记录(不大于64字节)到RAM缓冲区(从80H字节开始存放);

第2种操作则是经过内部“编程接口逻辑”来建立与Flash等存储空间的读/写途径。不断循环和交替进行上述2种操作,就能够把一个很大的HEX目标文件全部烧写到单片机内部。

另外,还可以读、擦或写用户配置字节、引导矢量字节、引导状态字节、芯片标记字节、锁定位(LB1~LB3)以及时钟模式配置位(FX2,定义每个机器周期包含12个或6个时钟周期)等信息。

1.2.2支撑电路设计

单片机选择P89V51Rx2系列型号,利用UART串口的ISP串行下载编程电路,串口的电平转换选用的是典型电路,其中采用了一片专用芯片SP232或者MAX232。

至于下载线的制作要比SPI串口编程方式的下载线简单多了,直接使用一条通用9芯的一头针一头孔的COM口电缆即可。

2SPI和UART串行编程的对比

针对上述介绍的SPI和UART接口串行编程方法所存在的差异和特点,分几个方面进行一些对比,供读者参考和根据实际项目需要进行选择,如表1所示。

表1 SPI和UART串行编程特点对比表

参考文献

[1]宋庆国,李慧,李学海,等.基于GPRS和IE的分布式收费终端功能升级策略[J].微型机与应用,2013(6):23-26.

[2]林洁,宋庆国,廖任秀.单片机应用技术(C语言版)[M].北京:清华大学出版社,2014.

Comparison of Online Programming Mechanisms between SPI and UART

SONG Qing-hua1,SONG Qing-guo2

(1.The 13th Electronic Research Institute,CETC,Shijiazhuang 050051,China;

2.Shijiazhuang Leafchanson Information Technology Co.,Ltd,Shijiazhuang 050000,China)

Abstract:This paper analyzes the realization principle of traditional parallel programming techniques,taking AT89S51 as the prototype,introduces the principle using serial peripheral interface (SPI) protocol to realize serial programming,and taking P89V51RD2 as the prototype,introduces the principle using universal asynchronous receiver/transmitter (UART) serial interface protocol to realize serial programming,compares two serial programming techniques,expatiates the user program protection and application method of sign information to facilitate the management of development process,production process and future maintenance.

Key words:single chip micyoco burning;parallel programming technique;universal asynchronous receiver/transmitter;serial peripheral interface;in-system programming

收稿日期:2015-02-06

DOI:10.16426/j.cnki.jcdzdk.2015.05.024

中图分类号:TP368.1

文献标识码:A

文章编号:CN32-1413(2015)05-0108-05