单片机在线编程方式ips、iap

下载和烧写区别:

什么是烧写?

        就是把直接把程序写在运行的地址上。

        就是将写好的程序编译好形成HEX或BIN文件后,将这个程序写进单片机芯片的过程就叫烧写,是沿用最早的单片机只能一次性写入,因此就叫做烧写,后来有了紫外线可擦除的EEPROM,现在有了可随时擦除的FLASH ROM,但依然沿用叫烧写了,这样也好,可以特指PC向MCU写入程序。免得和单片机工作时串口的上传和下次数据相混淆

什么是下载?

   下载是操作系统将收到的文件保存到本地文件系统上(或映射到本地的文件系统上),不关心文件的物理存储位置。

人们常常将烧写和下载认为是一回事。

 

 两种在线编程: ISP和IAP

什么是ISP(在系统编程): 
用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;      

     举个例子:     51单片机程序烧写的原理是什么?就是isp程序,stc的单片机里面有个boot程序,是固化到rom中的,用户改不了。 这个boot程序就是用来做串口通讯和编程FLASH ROM的。 所以可以直接烧写。但是需要个最小的系统,电源+晶振电路时必须的。对于单片机来讲可以通过SPI或其它的串行接口接收上位机传来的数据并写入存储器中。所以即使我们将芯片焊接在电路板上,只要留出和上位机接口的这个串口,就可以实现芯片内部存储器的改写,而无须再取下芯片。 


什么是IAP(在应用编程): 
          IAP的实现相对要复杂一些, 在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,

内分3个程序区,

  • 1作引导程序区,
  • 2作运行程序区,
  • 3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;

isp和iap的相同点:

         都不需要把芯片从板子上拔出来。

          殊途同归,ISP、IAP所进入的BootROM里面驻留的Boot代码,才是最终目标。

sip和iap不同点

 

打个比喻吧:

1、ISP是把房子拆了再重造一间,那么在造好之前当然是不能住人的啦!

       触发升级下载后,原有的程序停止,执行uboot下载程序,把新的程序固件下载到原有程序固件所在位置。再重启,  软件更新完毕!

2、IAP是在造好的房子里边进行一些装修,当然人可以继续住啦!

      运行程序区的程序已经在运行,收到远程或其他通信命令,下载新固件到下载区,下载完毕并校验通过后,  运行程序区的程序已经在运行停止,引导程序区程序跑起来,再将下载区固件复制到  运行程序区,运行复位程序。  软件更新完毕!

ISP和IAP最大的不同是:由谁来触发。

ISP有4种触发方式:

1.由外部硬件电路:如VDD保持高电平,给RST连续3个脉冲;

2.检测状态位:如ISPEN,为0时PC指针从0000H开始执行;为1时,通过“引导向量”计算出“ISP代码”的位置。每次复位后都会检测该状态位;

3.中止控制符信号触发芯片复位:中止控制符信号就是指在异步串行口的接收脚上出现长 达一帧长度的低电平,这里一帧的长度与异步串行口的工作模式有关。

4.直接调用ISP:用户程序也可以调用,但是很危险。

4种方式的目的是相同的——进入ISP子程序,比如Philips出厂的ISP子程序在1E00H-1FFFH,只要能引导PC指针指向1E00H就可以了。

而进入ISP代码的目的是:进入BootROM。
IAP的触发比较简单一些,没有外部触发。
通过一些指示位(SST为SC0/SC1、SFCF;Philips为一段IAP子程序,保存在FF00H~FFFFH地址空间中),
达到引导到BootROM的目的。

IAP的实现

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

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

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

3)执行更新操作

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

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

对于STM32来说,因为它的中断向量表位于程序存储器的最低地址区,为了使第一部分代码能够正确地响应中断,通常会安排第一部分代码处于Flash的开始区域,而第二部分代码紧随其后。

在第二部分代码开始执行时,首先需要把CPU的中断向量表映像到自己的向量表,然后再执行其他的操作。

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

殊途同归,ISP、IAP所进入的BootROM里面驻留的Boot代码,才是最终目标。

 

应用场合:

1,ISP 程序升级,人要到现场解决

2,IAP   

根据程序:包含ota(或以太网通信升级程序),可以远程下载升级程序,人不用到现场。

                不包含ota(或以太网通信升级程序),人还是要到现场。

 OTA(Over-the-Air Technology)即空中下载技术,是通过移动通信(GSM或CDMA)的空中接口对SIM卡数据及应用进行远程管理的技术。) 

 

 

 

 

 

 

 

 


 

你可能感兴趣的:(单片机)