单片机片内存储器烧写

发布者:EnchantedMelody最新更新时间:2018-05-05 来源: eefocus关键字:单片机  片内存储器 手机看文章 扫描二维码
随时随地手机看文章

单片机应用系统由硬件和软件组成,软件的载体是硬件的程序存储器,程序存储器采用只读存储器,这种存储器在电源关闭后,仍能保存程序,在系统上电后,CPU可取出这些指令重新执行。只读存储器(Read Only Memory,ROM)中的信息一旦写入,就不能随意更改,特别是不能在程序运行过程中写入新的内容, 
故称只读存储器。向ROM中写入信息称为ROM编程。根据编程方式不同,

  • 掩模ROM. 
    在制造过程中编程,是以掩模工艺实现的,因此称为掩模ROM。这种芯片存储结构简单,集成度高,但是由于掩模工艺成本较高,只适合于大批量生产。

  • 可编程ROM(PROM). 
    芯片出厂时没有任何程序信息,用独立的编程器写入。但是PROM只能写一次,写入内容后,就不能再修改。

  • EPROM. 
    用紫外线擦除,用电信号编程。在芯片外壳的中间位置有一个圆形窗口,对该窗口照射紫外线就可擦除原有的信息,使用编程器可将调试完毕的程序写入。

  • E2PROM(EEPROM). 
    用电信号擦除,用电信号编程。对E2PROM的读写操作与RAM存储器几乎没什么差别,只是写入速度慢一些,但断电后仍能保存信息。

  • Flash ROM. 
    闪速存储器(简称闪存),是在EPROM和E2PROM的基础上发展起来的一种电擦除型只读存储器。特点是可快速在线修改其存储单元中的数据,改写次数达一万次(ROM都有改写次数),读写速度快,存取时间可达70ns,而成本比E2PROM低得多,因此正逐步取代E2PROM。

注意:更多存储器内容请参考,《电子技术基础》数字部分(第五版) 主编 康华光. 第七章,或者 电工学(第七版)(下册) 主编 秦曾煌 第22章.

烧写器、烧录器、编程器、下载器、仿真器、调试器

单片机编程器(烧写器、烧录器)是用来将程序代码写入存储器芯片或者单片机内部的工具。编程器主要修改只读存储器中的程序,编程器通常与计算机连接,再配合编程软件使用。如下图所示是一个典型的编程器外形。图中黑色的是集成电路插座(也有下载编程器,不用取下芯片,涉及ISP、ICP,后面有介绍),通过拨动手柄可以将置于其中的集成电路芯片锁紧或松开。编程时锁紧以保证接触好,编程完毕松开,可以更换下一片芯片。 

当芯片是双列直插形式时,直接插在座子上就可以烧写了,但是如果遇到下图所示的各种封装形式的芯片,又如何烧写呢?一种方法是使用适配器,下图是各种封装芯片所使用的适配器。 
 

下载器(下载线)是将编译好的机器码写进单片机的工具。程序经过编译生成目标代码,然后通过下载软件和下载器下载到单片机的ROM或者Flash中。下载器主要来控制编程时序等。

仿真器(调试器)指以调试单片机软件为目的而专门设计制作的一套专用的硬件装置。单片机在体系结构上与PC机是完全相同的,也包括中央处理器,输入输出接口,存储器等基本单元,因而与PC机等设备的软件结构也是类似的。因为单片机在软件开发的过程中需要对软件进行调试,观察其中间结果,排除软件中存在的问题。但是由于单片机的应用场合问题,其不具备标准的输入输出装置,受存储空间限制,也难以容纳用于调试程序的专用软件,因此要对单片机软件进行调试,就必须使用单片机仿真器。单片机仿真器具有基本的输入输出装置,具备支持程序调试的软件,使得单片机开发人员可以通过单片机仿真器输入和修改程序,观察程序运行结果与中间值,同时对与单片机配套的硬件进行检测与观察,可以大大提高单片机的编程效率和效果。(许多仿真器具有下载器的功能)

片内Flash存储器的编程器

Flash存储器是一种电擦除型只读存储器。它的主要特点是在不加电的情况下能长期保持存储的信息,又可快速在线修改其存储单元中的数据,其在线改写功能使单片机的程序改写和固化过程更加简便。目前很多单片机都用Flash作为片内程序存储器。当片内的Flash存储器满足要求时,不必扩展外部程序存储器。

下面讨论如何把已经调试完毕的程序写入AT89S51单片机中的片内Flash存储器。 
AT89S51单片机片内4KB的Flash存储器的特点:

  1. 可擦写寿命10,000次

  2. 数据保存时间10年

  3. 最大读取时间150ns,页编程时间10ns

  4. 具有3级加密算法,使得AT89S系列单片机的解密变得不可能,程序的加密性大大加强

AT89S51出厂时,Flash存储器处于全部空白状态(各单元均为FFH),可直接进行编程。若不全为空白状态(单元中有不是FFH的),应首先将芯片擦除后,方可写入程序。(某些单片机出厂前会固化在ROM中一段Bootloader代码,其作用就是在启动操作系统之前进行初始化并引导系统,并能把我们下载在存储器中的程序加载到RAM中运行然后把控制权交还给系统。就好比PC上的BIOS。ROM编程跟Bootloader没有直接关系)

片内Flash存储器有低电压编程(Vpp=5V)和高电压编程(Vpp=12V)两类芯片。低电压编程可用于在线编程,高电压编程与一般常用的EPROM编程器兼容。在AT89S51芯片的封装面上标有低电压编程还是高电压编程的编程标志。不同的单片机的烧写电压,要视数据手册来定。

应用程序在PC中与在线仿真器以及用户目标板一起调试通过后,PC中调试完毕的程序代码文件(.HEX目标文件),必须写入到AT89S51片内的Flash存储器中。目前常用的编程方法主要有两种:一种是使用通用编程器编程,另一种是使用下载型编程器进行编程。

通用编程器

通用编程器即不同的器件(比如不同的公司生产,不同架构)能普遍使用的编程器,它是编程器的功能分类下的一个子类,与之相对的是专用编程器。在硬件上,通用编程器的管脚驱动采用具有各种功能的通用结构,只需更新软件就能支持新的器件,具有很好的灵活性,满足目前和未来的器件需要。通常通用编程器锁紧座的每一个管脚可以用作时钟信号、数据总线、地址总线、控制总线、地线、电源线、VCCQ电压、VPP编程电压、管脚接触不良测量专用总线等等。驱动电压可以从1.8V-25.0V,起码分256级可调。

下载型编程器 (自我理解)

常见的下载型编程器

ISPro下载型编程器、ISP编程器、ICP编程器、ISP-ICP编程器…

几种烧写方式

ICP(In Circuit Programing):在电路编程(单片机通电即可写入程序,包括bootloader)

ISP(In System Programing):在系统编程(单片机通电加上晶振,有bootloader引导的情况下,即可写入应用程序)

IAP(In Application Programing):在应用编程(单片机在正常运行的程序中,内部程序对单片机局部重写数据)

ICP、ISP、IAP详细介绍

ISP是指可以在板级上进行编程,而不用把芯片拆下来放到烧写器中,即不脱离系统,所以称作“在系统编程”,它是对整个程序的擦除和写入,通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程。即使芯片焊接在电路板上,只要留出和上位机接口的串行口就能进行烧写。(芯片一般固化了用来ISP升级的boot程序)

IAP同样是在板级上进行编程,MCU获取新代码并对程序的某部分重新编程,即可用程序来改变程序,修改程序的一部分达到升级、消除bug的目的,而不影响系统的其它部分,烧写过程中程序可以继续运行,另外接口程序是自已写的,这样可以进行远程升级而不影响应用。IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。(通常自己编写一个bootloader程序) (注: 有时候, ISP/IAP的分别并不是那么清楚!)

ICP在电路编程,ICP (In-circuit programmer),在电路编程方法允许使用商业编程器来实现编程和擦除功能,而无需将微控制器从系统中移出,可完全由微控器硬件完成,不需要外部引导器。(百度)

ISP、IAP应用场合

1、ISP 程序升级需要到现场解决,不过好一点的是不必拆机器了。

2、IAP 如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去。

在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。 ISP和IAP很相似,都是不需要把芯片从板子上拔出来,就达到了用PC-MCU的编程接口(JTAG、串口、双绞线、SPI等)搞定新版本的升级的目的。MCU内部都是首先执行一段独立的Boot代码(这段Boot代码一般是出厂预置,或使用编程器烧录的,通常只有1k或4k,SST通常是占用一块独立的Block,Philips通常是让BootROM地址与其他Flash重叠,以达到隐藏的效果),Boot负责控制擦除程序存储器及给程序存储器编程的代码(或是处理器外部提供的执行代码),然后通过某种与PC计算机的通信方式(如,ether网口),将用户指定的某个在PC上编译完成的MCU可运行的二进制代码文件编程入MCU内的程序存储器。

IAP的实现

通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:

1)检查是否需要对第二部分代码进行更新

2)如果不需要更新则转到4)

3)执行更新操作

4)跳转到第二部分代码执行

第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。

对于STM32来说,因为它的中断向量表位于程序存储器的最低地址区,为了使第一部分代码能够正确地响应中断,通常会安排第一部分代码处于Flash的开始区域,而第二部分代码紧随其后。 
在第二部分代码开始执行时,首先需要把CPU的中断向量表映像到自己的向量表,然后再执行其他的操作。

STM32 正常的程序运行流程:

当加入 IAP 程序之后,程序运行流程:

从第二个图,STM32 复位后,还是从 0X08000004 地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到 IAP 的 main 函数,如图标号①所示,此部分同图 53.1.1 一样;在执行完 IAP 以后(即将新的 APP 代码写入 STM32的 FLASH,灰底部分。新程序的复位中断向量起始地址为 0X08000004+N+M),跳转至新写入程序的复位向量表,取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至新程序的 main 函数,如图标号②和③所示,同样 main 函数为一个死循环,并且注意到此时 STM32 的 FLASH,在不同位置上,共有两个中断向量表。

在 main 函数执行过程中,如果 CPU 得到一个中断请求,PC 指针仍强制跳转到地址 
0X08000004 中断向量表处,而不是新程序的中断向量表,如图标号④所示;程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中,如图标号⑤所示;在执行完中断服务程序后,程序返回 main 函数继续运行,如图标号⑥所示。通过以上两个过程的分析,我们知道 IAP 程序必须满足两个要求:

1) 新程序必须在 IAP 程序之后的某个偏移量为 x 的地址开始;

2) 必须将新程序的中断向量表相应的移动,移动的偏移量为 x;

如果IAP程序被破坏,产品必须返厂才能重新烧写程序,这是很麻烦并且非常耗费时间和金钱的。针对这样的需求,STM32在对Flash区域实行读保护的同时,自动地对用户Flash区的开始4页设置为写保护,这样可以有效地保证IAP程序(第一部分代码)区域不会被意外地破坏。

ISP与ICP的差别

For ISP

(1) MCU必须处于可执行程序的状态 (除了上电, 还要接XTAL), 且必须预烧ISP-code在LDROM里面

(2) 烧录范围只限于APROM, DataFlash或CONFIG (但对使用者来说, 应经够了!)

(3) chip在LOCK的状态下, 仍然可以只更新某一区块 (APROM, DataFlash或CONFIG)

(4) 因为烧录的动作取决于ISP-code的写法, 所以给系统设计者的弹性较大

For ICP

(1) MCU只要处于上电状态即可, 不必预烧任何code在MCU里面

(2) 烧录范围涵盖整颗MCU, 包括 APROM, DataFlash, CONFIG, LDROM 和 ROMMAP

(3) chip在LOCK的状态下, 无法只更新某一区块, 只能在erase-ALL之后, 更新某一区块, 再逐一烧回其它区块(因为ICP的本质就是走串行接口的Writer Mode, chip被LOCK之后, 除了erase-ALL, 所有烧录动作皆会被禁止)

(4) 因为烧录纯粹是ICP硬件的行为, MCU无法自己更新自己, 所以给系统设计者的弹性较小(例如: 无法藉由ICP去实现IAP的功能)

ISP与ICP的使用场合

依这两者的特性, 配合客户的系统需求, 而后才建议客户使用ISP或ICP. 
注:上述差别的第(3)点和第(4)点, 可能是ICP带给使用者的最大限制. 站在使用者的观点, 若ISP与ICP只能择一的话, ISP会是必要的选择。

ISP、IAP、ICP与传统烧写方式的区别

1)在开发阶段

改code时, 不再需要将MCU从板子上拔起来, 拿到烧录器上烧, 然后再装回去. 可以直接利用ISP/ICP Programmer做板上烧录, 为开发者提供了极大的便利性.

2)在量产阶段

客户可以采用”先焊到板子上再烧code”的方式, 将烧code的动作安排在生产线的某一站.

那么传统的方式 (先将code烧好再焊到板子上)有什么缺点? 
传统的方式是这样的: 拆封–>从tray盘取出chip–>烧录–>把chip放回tray盘. 
这样的流程比起上面建议的方式: 增加了烧录时间, 容易造成QFP包装的chip弯脚, 或忘了烧code即放回tray盘.

3)在成品阶段

已组装好的成品若要改code, 可以透过预留的接口, 利用ISP或ICP, 更新MCU, 不需要拆机.


关键字:单片机  片内存储器 引用地址:单片机片内存储器烧写

上一篇:MSP430定时/计数器TimerA的使用详解(一)
下一篇:各变量在MCU中的存放位置ram or flash

推荐阅读最新更新时间:2024-03-16 16:01

Flash、MCU、DRAM,兆易创新三驾马车并驾齐驱
过去一年,在国产替代和政策红利的大背景下,A股半导体上市公司备受资本追捧,涌现出一批破千亿市值的半导体公司。据Wind统计显示,2019年度,A股半导体指数从年初1540.63点,增长至年末2870.35点,整体累计涨幅达85.77%,其中多家半导体产业细分领域的龙头在并购整合之下,公司股价呈倍数增长,市值一路涨超千亿大关。 不过,今年以来,受新冠疫情引发的全球股市震荡等多方面影响,半导体概念股普遍开始“降温”,投资逐渐趋于理性。而A股这批破千亿市值的半导体公司价值逻辑依旧成立,其中有别于靠单项产品拉动企业业绩增长,兆易创新凭借存储+微控制器+传感器三路并进,辅以DRAM进入突破阶段,成长弹性更具优势。 根据最新财报显示,
[嵌入式]
Flash、<font color='red'>MCU</font>、DRAM,兆易创新三驾马车并驾齐驱
观点与探讨4:Flash MCU应用前景
Flash MCU应用前景 Flash MCU有诸多优点 Flash MCU应用日趋增多 在MCU技术方面没有所谓的摩尔定律来遵循,还是要根据市场需求,不过频率会提高,功耗会降低,市场需求是千变万化的。随着Flash MCU技术的成熟,其应用会越来越多,OTP MCU主要面临价格问题。 降低功耗和使用电压来满足便携式电池管理和卫生保健领域的应用是市场的强烈需求。我们新的32位STR7和STR9产品线可以很好地满足这些需求。 MRAM(MagneticRAM)技术和高速Flash(等同于RAM的读写速度)技术在嵌入式系统中的应用已被更多的研发团队所关注。 技术的发展还是比较快。目前Flash MCU产品占的比例已经很大了。Flas
[焦点新闻]
89C51 单片机I/O 口模拟串行通信实现方法
目前普遍采用的MCS51 和PIC 系列单片机通常只有一个(或没有)UART 异步串行通信接口,在应用系统中若需要多个串行接口(例如在多机通信系 统中,主机既要和从机通信又要和终端通信)的情况下,通常的方法是扩展 一片8251 或 8250 通用同步/异步接收发送芯片(USART),需额外占用单 片机I/O 资源。本文介绍一种用单片机普通I/O 口实现串行通信的方法,可 在单片机的最小应用系统中实现与两个以上串行接口设备的多机通信。 1.串行接口的基本通信方式 串行接口的有异步和同步两种基本通信 方式。异步通信采用用异步传送格式,如图1 所示。数据发送和接收均将起 始位和停止位作为开始和结束的标志。在异步通信中,起始位占用一位
[单片机]
89C51 <font color='red'>单片机</font>I/O 口模拟串行通信实现方法
51单片机的LED与数码管的驱动
1、编写C51代码,实现流水灯字变花型: /*********************************************************** * 实验功能 : LED实现流水灯花型控制 *************************************************************/ # include reg51.h void delay(unsigned int z) { unsigned int x,y; for(x=z;x 0;x--) for(y=100;y 0;y--); } timer0() interrupt 1 { st
[单片机]
基于51单片机个8位数码管的简单拨号键盘
我们知道,在拨号是,每拨一位数字,前边拨的数字就要向左挪一位,我们可以用一个一位数组,通过移动数组中数字的移动和8位数码管的动态扫描来实现位置的移动。 代码如下: #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; #define GPIO_DIG P0 #define GPIO_KEY P1 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 KeyValue; //用来存放读取到的键值
[单片机]
AT89S51单片机的各种系统板的功能介绍
AT89S51单片机实验及实践系统板(以后简介系统板)集成多个硬件资源模块,每个模块各自可以成为独立的单元,也可以相互组合,因此,可以为不同阶层的单片机爱好者及单片机开发者提供不同的开发环境。要购买此实验板请联系qq125739409 注明“实验板” 每个硬件模块介绍如下: 1.继电器控制模块 系统板上提供了2路继电器控制模块,分布在系统板的最左上端区域中,输入信号由Realy in 1和Realy in 2端口输入分别控制两路继电器,继电器控制的信号分别由最上端的两个插针输入和输出。分别称为“com1 open1 short1”,“com2 open2 short2”,由于这个两个继电器是单刀单掷控制,当继电器不吸合时,“c
[单片机]
AT89S51<font color='red'>单片机</font>的各种系统板的功能介绍
51单片机实现的485通讯程序
#ifndef __485_C__ #define __485_C__ #include reg51.h #include string.h #define unsigned char uchar #define unsigned int uint /* 通信命令 */ #define __ACTIVE_ 0x01 // 主机询问从机是否存在 #define __GETDATA_ 0x02 // 主机发送读设备请求 #define __OK_ 0x03 // 从机应答 #define __STATUS_ 0x04 // 从机发送设备状态信息 #define __MAXSIZE 0x08 // 缓冲
[单片机]
stc12c5a60s2复位电路说明
STC12C5A60S2在众多的51系列单片机中,要算国内STC 公司的1T增强系列更具有竞争力,因他不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工艺的,如STC12C5A60S2单片机内部就自带高达60K FLASHROM,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。而且STC系列单片机支持串口程序烧写。显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。写入单片机内的程序还可以进行加密,这又很好地保护了你的劳动成果。 stc12c5a60s2内部结构图 stc12c5a60s2内部结构图如下: stc12c5a60s2复位电路 就是在复位引脚接1个10UF电容到电源+,
[单片机]
stc12c5a60s2复位电路说明
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved