历史上的今天
返回首页

历史上的今天

今天是:2025年03月10日(星期一)

正在发生

2018年03月10日 | ISP程序的设计思路

2018-03-10 来源:eefocus

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

 

    1 ISP实现基本结构

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

67
图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-Chip Code 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程序,定能为自己的系统增色不少。


推荐阅读

史海拾趣

Crystal Clear Technology公司的发展小趣事

Crystal Clear Technology自创立之初,便专注于研发新型显示技术。面对市场上日益增长的高清显示需求,公司投入大量资源进行技术研发,成功推出了一款具有高清晰度和广视角的显示屏产品。这一创新产品迅速获得市场认可,为Crystal Clear Technology打开了新的销售渠道,并奠定了公司在行业内的技术领先地位。

Ford Aerospace & Communications Corp公司的发展小趣事

在汽车制造领域,福特一直是技术创新的领导者。20世纪60年代,福特开始将电子设备集成到汽车中,包括车载电话、导航系统以及早期的娱乐系统。这些创新不仅提升了驾驶的便捷性和舒适性,也预示着未来汽车电子化、智能化的趋势。虽然这些技术并不直接属于航空通信范畴,但它们展示了福特在电子技术应用方面的前瞻性和实力。

Bytesonic Corporation公司的发展小趣事

进入新世纪,Bytesonic Corporation面临着新的挑战和机遇。为了更好地适应市场变化和提升竞争力,公司在1999年11月进行了改制,资本增加至5700万新台币。这一改制不仅增强了公司的财务实力,也为其在未来的发展中注入了新的活力。

以上是基于已知信息对Bytesonic Corporation公司发展故事的概述。如需更详细、具体的故事内容,建议查阅公司官方资料、新闻报道或行业分析报告,以获取更全面、准确的信息。

EMBEST公司的发展小趣事

EMBEST公司成立于XXXX年,早期便专注于ARM嵌入式软件的开发。在XXXX年,EMBEST发布了国内首个具有自主知识产权的ARM嵌入式软件开发工具Embest IDE For ARM,这一里程碑式的产品不仅填补了国内市场的空白,也为EMBEST在嵌入式领域的地位奠定了基础。通过持续的创新和研发,EMBEST逐步建立了自己的技术壁垒,为公司的长远发展奠定了坚实基础。

BERGQUIST公司的发展小趣事

随着产品技术的不断成熟和市场的逐步认可,BERGQUIST公司开始积极拓展市场。公司不仅在国内市场取得了显著成绩,还积极开拓国际市场,与众多知名电子企业建立了长期合作关系。通过不断提升产品质量和服务水平,BERGQUIST成功树立起了自己的品牌形象,成为热管理领域的佼佼者。

DAPAudio公司的发展小趣事

随着数字化和智能化的快速发展,音频处理行业也面临着巨大的变革。DAPAudio积极应对这一变革,不断推出适应市场需求的新产品和技术。通过与科技公司、高校和研究机构的合作,DAPAudio在人工智能、物联网等新兴领域取得了重要突破,为公司未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

送给研发弟兄们几个总结性观点(ZT稍长但是很中肯)

观察了一些企业的产品技术情况,比较普遍的一个现象是:研发人员无一例外的同声谴责采购和工艺部门,对元器件控制不严,致使电路板入检合格率低、到客户现场后频频出毛病。 举几个简单例子: 一个电解电容紧挨着散热片焊接的,与电解电容相关联 ...…

查看全部问答>

芯片是怎样被搞坏的?

芯片会损坏,这是不争的事实。至于损坏的原因,大致有两个方面,一是内因——芯片工艺缺陷;二是外因——使用不当。下面两个例子,都是在工厂里形成的故障,属于芯片或机器的固有缺陷,照理说,都是应该召回的。 【制作环境潮湿,芯片爆米花】 ...…

查看全部问答>

请问SPI要做哪些设置?

我只对它的控制寄存器进行了设置,程序总是进入死循环,是不是还需要其他设置?我现在时写主控芯片的程序,被控芯片的程序是固化好的。…

查看全部问答>

请问protel 里0603在哪个封装库里?

如题……应该怎么查找啊?谢谢啦~…

查看全部问答>

wince 键盘钩子为什么只能在一个程序中用?

wince 5.0 就是同一个程序,运行多个。 先运行的就行,第二个就不行,SetWindowsHookEx返回0。 错误id是31 ERROR_GEN_FAILURE即A device attached to the system is not functioning. 不知何故。 当我把第一个程序关闭后,第二个就行了,好 ...…

查看全部问答>

EVC4中有类似于stl中的map或hash_map的东东可以用吗?

本想在evc4中用 std::map, 发现evc4不支持,又不想用网上其它的stl库, 因此,想问一下,在evc4中有类似于map的类吗?本来想这样用的:std::map 我要用到的数据如下,想实现快速查询,想用现成的类: 姓名  地址 AA    广 ...…

查看全部问答>

wince下音频频谱显示技术

最近在看这方面东西,但网上找不到相关资料, 哪位高人做过相关东西啊,提取的什么东西进 行傅里叶变换的啊?…

查看全部问答>

[求] wince.net下display dirver的结构和原理

thanks 最好详细一点,或者给出流程图, 并且把具体的分层描述出来。。 谢谢 …

查看全部问答>