原创 在系统编程(isp)和在应用中编程(iap)

2008-7-1 15:24 8248 6 6 分类: MCU/ 嵌入式

在系统编程isp (in-system programming)和在应用中编程iap(in-application programming)


ISP:
用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;
IAP:
在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;


应用场合:
1,ISP 程序升级需要到现场解决,不过好一点的是不必拆机器了;
2,IAP 如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去,
这可能是他们的优点或应用吧


典型IAP:IC卡电话机
内含V.xx MODEM芯片,MCU自带引导区,可远程下载更新程序。
========================================================
在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。


2.SST FlashFlex51微控制器在应用中编程基础
1.0 介绍
许多年以来,ISP(在系统中编程)对于MCU嵌入在终端用户产品的烧录或重新烧录应用代码是一个流行的法.ISP通过已经预先下载到板上memory的韧体来实现,它通过与PC软件的接口来实现下载用户代码.SST早在1998年引入了IAP,它的基本操作与ISP相同.IAP区别于ISP是因为它执行独立于8051核控制器.它在两个flash memory区块之间相互操作,这在当前的SST MCUs中非常常见.特别地,当8051核用户代码在程序区块同时执行时,用IAP一个Flash Block可以编程另一个Flash Block. 更详细地,在FlashFlex51 MCUs中有两个执行控制器: 8051CPU核控制器和IAP flash memory控制器.这两个控制器可以同步操作,这意味着一旦通过它的mailbox SFR寄存器发出一个IAP命令,当IAP控制器在执行它的命令时8051核可以自由地执行用户指令.对于IAP编程,必须遵循下面的规则:
1. 为了使能IAP编程,置位SFCF寄存器的IAPEN位(SFCF[6] = 1).
2. 为了让Block1可见,置位SFCF寄存器的VIS位(SFCF[7] = 1)(只适用于SST89C5x)
3. 为了编程Block1, IAP命令代码必须驻留在Block0并且从Block0开始执行
4. 为了编程Block0, IAP命令代码必须驻留在Block1并且从Block1开始执行
5. 为了判断IAP命令是否执行完,操作SFCT寄存器中的Flash_busy位,也就是说,
SFST[2] = 0表明命令执行完.


点击看大图


2.0 SFR 描述
IAP命令通过下面6SFRs被8051核心控制器来初始化和控制: SuperFlash状态
(SFST),SuperFlash配置(SFCF),SuperFlash命令(SFCM),SuperFlash数据(SFDT),SuperFlash低
地址位(SFAL),和SuperFlash高低值位(SFAH). 下面分个描述这些SFRs:
2.1 SuperFlash状态(SFST)
8位寄存器只有两位直接运用到IAP命令,bit3(忙)和bit2(Flash_busy).这两位用来表
示flash操作在进行并且可以通过8051核控制器投票来判断一个flash的操作什么时候完成.
当flash的操作在进行时两位都会是高.在Burst-Program命令中当每一个字节被编写后
BUSY位将会拉低.当整个命令被完成后Flash_busy位会拉低.BUSY位只有在SST89C5x
中存在.
2.2 SuperFlash配置(SFCF)
SuperFlash配置(SFCF)两个重要的位是bit7(VIS)和bit6(IAPEN).VIS位使能或者禁用代码从内部flash的Block1执行.当VIS=0,Block1中的地址(F000H到FFFFH)对于PC来说是不可用的.当VIS=1时,这些地址对PC来说是可见的并且Block1中的代码是可执行的.IAP的使能位(IAPEN)位对于IAP的flash控制器来说就像一个开关.当IAPEN=0,所有的IAP命令都被flash控制器忽略.当IAP=1,flash控制器将会执行SFCM寄存器发出的命令.VIS只有在SST89C5x中存在.
2.3 SuperFlash命令(SFCM)
该8bit寄存器被用来从8051核控制器传输IAP命令字到IAP flash控制器.Bit7,Flash中断使能(FIE), 表示IAP flash控制器在命令执行完成以后是否应该发出一个中断.如果FIE=0,就不会发出中断并且在命令完成以后8051核控制器将必须在SFST寄存器中的BUSY和Flash_BUSY中做出判断.如果FIE=1那么当命令完成以后IAP flash控制器将会在INT#上产生一个中断(注意:这样将禁用外部INT1#中断).剩余的7bits包括想用到的IAP命令的实际命令字(看表3-2和表3-3看列表中的IAP命令).在这些寄存器中放一个新值对于在
IAP flash控制器中开始IAP操作将是催化作用,因此所有其他的寄存器更高优先于装载的这些命令字必须建立起来.
2.4 SuperFlash数据(SFDT)
8bit寄存器被用来在8051核控制器和IAP flash控制器中来回的传送数据.在IAP程序操作中,这些值将会被flash控制器编写到SFAH:SFAL表明的地址.在IAP验证操作中,在操作完成以后这些寄存器会包括数据定位和地址SFAH:SFAL. 在IAP擦除操作中这些寄存器的值被检验来验证这些查处命令是有效的.
2.5 SuperFlash低地址位(SFAL)
8bit寄存器包括被IAP flash控制器16bit地址中8位有序的低地址用来进入内部flash存储器.
2.6 SuperFlash高低值位(SFAH)
8bit寄存器包括被IAP flash控制器16bit地址中8位有序的高地址用来进入内部flash存储器.
3.0 在应用中编程(IAP)
图3-1提供了IAP操作的控制流,展现了mailbox SFR寄存器和8051核控制器和Flash Memory控制器的接口.他也提供了IAPEN在使能和禁用Flash Memory控制器上所起的效果,同时也有VIS 位在允许Block1 Flash Memory在执行应用代码上所起作用.典型的IAP命令的顺序在表3-1中已经有提供,就是说,VIS和IAPEN位被置位,接着对于专用的IAP命令装载8bit的数据和16bit的地址.接下来,发出适当的命令.在一个IAP命令中的最后一步是对Flash_busy位(SDST[2])进行投票,用投票的方式来判断flash的操作是否完成.典型的IAP代码的例子提供有Sector-Erase,Byte-Program,Byte-Verify,Prog-SB2和Enable-Clock-Double.


 


P89V51RD2晶片IAP使用方法 :


P89V51RD2具有在应用中编程(IAP)的特性,用户可以通过调用1FF0H位址的PGM_MTP来实现.调用前,需要设置FCF寄存器的FCF.0(BSEL位)和FCF.1同时为0才能访问IAP程式,在访问结束后,要对FCF.0(BSEL位)置1退出IAP操作.需要注意的是,在调用IAP功能时,调用IAP功能的代码不能放在0000H~1FFFH区.另外,由於调用IAP功能需要在指定寄存器写入特定的参数,使用组合语言以外的语言将很难实现.
P89V51RD2在IAP的具体功能需要注意的是,除了上列出的6个功能外,P89V51RD2还增加了一个"磁区擦除功能"没有列出,调用该功能的输入参数为:"R1=08H,DPH=记忆体位址MSB(A15:8),DPL=记忆体位址LSB(A7,A6:0=0)";执行该功能将擦除指定磁区的128位元组.


P89V51RD2晶片使用系统内编程ISP
ISP 允许使用宽范围的串列传输速率这与振荡频率无关ISP 也可适应宽范围的振荡频率,这可以通过检测接收一个字元的时间来实现根据基於振荡频率的计时器计数可以编程波特率ISP 操作时需要传送一个初始字元大写字母U 到P89C51Rx+/Rx2/66x 以确定串列传输速率ISP 固件能在接收到字元后自动回应当完成了串列传输速率初始化ISP 固件将只接收Intel 十六进位格式的记录Intel 十六进制记录由ASCII 字元组成用於表示十六进位的值如下所示
NNAAAARRDD..DDCC
在Intel 十六进位记录中NN 表示记录中资料的数量P89C51Rx+可以接收多达16个10H 位元组的资料AAAA 表示记录中首位元组的位址如果记录中资料位元组数为0则AAAA 被设为0000H RR 表示记录类型例如00 表示资料记录01 表示文件结束标志在ISP 应用中还用到其他的记录类型表明命令或资料在一个记录中数据位元组的数量最大为16 十进位表2 列出了所有的ISP 命令当P89C51Rx+/Rx2/66x 接收到一个记录记录中的资讯则在内部贮存起来并且完成
校验和的计算接收到整个记录之后才执行表示记录类型的操作如果在校验和的计算中出现错误P89C51Rx+/Rx2/66x 会向串列口发出一个字元X表明校验和出错如果校验和的计算与记录中的校验和相匹配单片机将执行记录中的命令在大多数情况下单片机成功接收记录后会向序列埠传送一个字元;例外对於资料类型的记录记录类型为00 则要进行一个额外检测当记录中的校验和与计算中的校验和相符而且记录中所有位元组都被成功编程的情况下单片机才发送字元,对於一个资料记录,字元"X"表示校验和不匹配字元R 表示某个位元组没有正确编程在对资料进行编程之前必须向P89C51Rx+/Rx2/66x 单片机传送02 类型记录确定振荡频率ISP 模式下不需要特定的振荡频率产生串列传输速率或编程脉冲时序用户需要提供给P89C51Rx+/Rx2/66x 产生恰当时序的资讯02 类型记录可以实现这个操作.

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条