当前位置:首页 > 单片机 > 单片机
[导读] 许多应用系统中都需要进行程序代码升级,如果程序代码在外部Flash存储器中,实现程序代码升级可以对外部Flash直接操作。但对于在单片机内部的一些系统程序代码,就要求此单片机支持IAP(In-ApplICati

许多应用系统中都需要进行程序代码升级,如果程序代码在外部Flash存储器中,实现程序代码升级可以对外部Flash直接操作。但对于在单片机内部的一些系统程序代码,就要求此单片机支持IAP(In-ApplICation-Programming)功能。本文即介绍此情况下的ISP(In-System-Programming)程序设计方法,以及在SST和STC单片机上的具体实现。

1 ISP实现基本结构

ISP的实现方式有很多种,但大致都遵循图1所示流程。


图1

其中,判断用户ISP选择,一般有以下几种方式。

(1) 连接计算机系统,由系统的命令选择

进入用户ISP选择判断时,先由单片机发送特定特征数据,然后等待命令数据,如果在一定的时间内,接收到计算机系统发出的选择命令则进入用户代码升级,否则直接跳转到用户代码执行。

(2) 由用户板上的跳线选择

一般利用单片机空余的端口,设计一个代码升级选择跳线。进入用户ISP选择判断时,单片机可以直接根据此端口的状态判断进入用户代码升级还是直接跳转到用户代码执行。

(3) 由用户板操作功能选择

在用户板的功能菜单或功能组合中,允许用户选择代码升级功能,同时,在外部存储器中存放相应的标志。当选择代码升级功能时,在外部存储器中写入特定数据,然后程序复位。进入用户ISP选择判断时,判断外部存储器中的数据,如果符合条件则进入用户代码升级,否则直接跳转到用户代码执行。

2 IAP程序设计

目前,许多单片机都支持IAP功能,一般这些单片机内部都包含两个Flash块,在一块Flash中运行的程序可对另一块Flash进行擦除和重新编程。一般都将ISP程序存放在容量较小的一块Flash中(BLOCk1),而将用户代码存放在容量较大的一块Flash中(Block0)。Block1中的ISP程序对Block0中的用户代码进行擦除和重新编程。

下面以两种51系列兼容的Flash单片机为例,介绍IAP的程序设计。一种是SST89C54,另一种是STC89C516RD。

(1) SST89C54相关特性

SST89C54内部有20KB(16KB+4KB)程序存储器,统一编址。Block0为0000H~3FFFH;Block1为F000H~FFFFH。Block1可以选择映射到0000H地址开始的1KB/2KB/4KB程序区。

(2) STC89C516RD相关特性

SST89C516RD内部有72KB(64KB+8KB)程序存储器。Block0为0000H~FFFFH,Block1可以选择映射到0000H地址开始的8KB程序区(上电复位缺省为地址映射)。

SST与STC单片机的IAP操作几乎完全相同。要特别注意的是,Block0_erase函数中对于block0的选择,两种单片机是不同的(正好相反)。


3 ISP程序到用户代码的切换

在设计中一般都将ISP程序设计为上电复位后运行的程序,如果不需要用户代码升级或升级完成后,就要将程序切换到用户代码执行。ISP程序到用户代码的切换,不同的单片机各不相同。

(1) SST89C54程序区BLOCk1到Block0的切换实现

SST89C54单片机在烧录时,将ISP程序写到Block1,并且烧录映射选择位RB0/RB1(RE-MAP[1:0])。这样程序上电复位时,自动将Block1映射到0000H地址开始的4KB程序区,进入ISP程序执行。由于Block1同时还分配在地址F000H~FFFFH,因此,编译生成ISP程序代码时,设定所有的地址范围都在F000H~FFFFH。需要切换到用户代码(Block0)运行时,修改SFCF[7]控制位VIS,将Block1的0000H地址映射取消,然后程序跳转到地址0000H执行,则开始运行Block0中的用户代码程序。

本刊网站中给出了ISP的C程序源代码ISP.C。需要注意的是,此程序在Keil-C中要建立工程文件,包含 IAP.C函数以及STARTUP.A51,并且在IAP.C和ISP.C中都要去掉STC的定义。为了将地址范围设定到F000H~FFFFH,要将STARTUP.A51中程序入口地址由0改为0F000H,如下:

CSEG AT 0F000H

C_STARTUP: LJMP STARTUP1

还要修改编译选项设置Target选项卡中Off-ChipCode memory:Start =0xF000;Size=0x1000;还要设置C51选项卡中Interrupt Vectors at address:0xF000。

(2) STC89C516RD程序区Block1到Block0的切换实现

STC89C516RD单片机在烧录时,将ISP程序写到Block1。(注意:并不烧录SC0/SC1位)。单片机上电复位时,缺省的Block1映射到0000H地址开始的8KB程序区,进入ISP程序执行。需要切换到用户代码(Block0)运行时,ISP修改SFCF[1]控制位SWR,产生一个软复位(SOFtware Reset)。由于SC0和SC1都未烧录,程序软复位后,Block1将不再映射到0000H地址映,则开始运行Block0中的用户代码程序。

本刊网站中给出了ISP的C程序源代码ISP.C。要注意的是:此程序在Keil-C中要建立工程文件,包含IAP.C函数,并且在IAP.C和ISP.C中都要保留STC的定义。

4 与计算机的通信协议

升级用户代码时,需要与计算机进行通信,一般采用RS232串行通信,数据协议采用简单协议。此协议参考了ADuC812单片机的ISP数据协议。(ADuC812单片机硬件内置ISP程序)。

(1) 复位命令(计算机→单片机)

计算机发送4字节复位命令:21H,5AH,00H,A6H,单片机返回复位信息。

(2) 复位信息(单片机→计算机)

复位信息为25字节,前3字节为单片机公司特征字符(如:“ADI”“SST”“STC”),最后1字节为校验和。

(3) 数据包格式(计算机→单片机)

计算机发送数据包格式:07H、0EH、长度、数据、校验和(长度与数据的校验和)。

(4) 擦除命令

计算机发送数据包,其中数据只有1字节,内容为:字符“A”或“C”。单片机擦除用户程序区后返回1字节06H表示成功;05H表示失败。

(5) 编程命令

计算机发送数据包,其中数据内容:“W”,00H,地址高字节,地址低字节,程序数据。单片机返回1字节06H表示成功;05H表示失败。

(6) 运行用户程序

计算机发送数据包,其中数据只有1字节,内容为:字符“U”。单片机返回1字节06H表示成功,然后跳转到用户程序运行。

本刊网站提供了计算机下载软件的C程序源代码Download.C。

结语

根据以上ISP程序设计思路和实例,大家可以修改ISP初始代码,或者丰富它的ISP功能(读功能、口令控制等),尝试设计自己的ISP程序,定能为自己的系统增色不少。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。

关键字: 单片机 仿真器 程序

步进电动机是将电脉冲激励信号转换成相应的角位移或线位移的离散值控制电动机,这种电动机每当输入一个电脉冲就动一步,所以又称脉冲电动机。

关键字: 步进电机 正反转 程序

KeilμVision4是Keil软件公司为8051系列微控制器及其兼容产品设计的集成式软件开发环境。μVision4集成了C51编译器和A51汇编器,其界面类似于Microsoft VS,支持C语言和汇编语言程序的编写...

关键字: 程序 编译 链接

双方各执一词,谁也不退让,吴雄昂的身份成为薛定谔的猫:在Arm公司眼中,他已经被罢免一切职位;在安谋中国声明里,吴仍然一切照常。这种叠加态或许还会持续一段时间,但叠加态应该很快就会塌缩成一个确定结果。同样,安谋中国董事会...

关键字: ARM 中国董事会 程序

除了指令空间,自定义指令对应的程序出入口也有严格限制。自定义指令在使用过程中出现任何错误时,Arm的工具链都能及时对其进行识别、提取,并且进行相应的控制。目前也已经有第三方编译器,可以识别自定义指令集可能会出现的错误。专...

关键字: 指令空间 程序 ARM

如果说一众美国科技公司遵循特朗普命令断供华为,还算某种程度上维护所谓程序正义不得已而为之;那么各路本应对政治保持中立的国际技术标准组织,先后宣布剔除华为成员资格,绝对算助纣为虐;而联邦快递将华为委托寄送目的地为中国的快递...

关键字: 快递 华为 程序

在软件开发过程中,我们希望软件可以运行无误。但是常常事与愿违,程序经常跑飞,或者卡死。原因有很多,有可能是因为软件系统设计的原因,或者外部传感器的失效,再或者是程序的Bug等。为了防止程序在出现问题之后,可以顺利复位和重...

关键字: 软件 程序 传感器

进程是程序的执行过程。程序是静态的,是存在于外存之中的,电脑关机后依然存在。进程是动态的,是存在于内存之中的,是程序的执行过程,电脑关机后就不存在进程了。进程的内容来源于程序,进程的启动过程就是把程序从外存加载到内存的过...

关键字: 程序 静态 操作系统

近日,华为内部论坛刚上线了一篇关于《整个公司的经营方针要从追求规模转向追求利润和现金流》的文章。华为创始人任正非在文内重点提到,全球经济将面临衰退、消费能力下降的情况,华为应改变思路和经营方针,保证度过未来三年的危机。

关键字: 论坛 思路 经营方针

摘 要:结合车联网高峰论坛上的一些最新观点,对车联网的一些新进展作了介绍。主要包括大数据和云计算在车联网 的应用,车联网的电商化及互联网化趋势。车联网的商业模式需要突破,跨界合作和服务创新是一种有益的尝试。认为只有开放的...

关键字: 车联网 进展 大数据 电商 程序 开放
关闭
关闭