嵌入式技术之IAP,自从有了它老板再也不担心我的代码了!(上)
1.惨痛的教训
那是一个严寒的冬日,客户在现场使用我们公司
有了这次沉重的教训,我毫不犹豫的给设备程序增加了IAP功能,自从设备有了IAP功能,我们可以根据需求随时更新现场设备的固件程序 ,从此以后就可以实现放飞自我了!
2.IAP是什么
IAP(In-Application Programming)指的是在应用编程,就是MCU程序固件在运行过程中可以获取新代码数据并对Flash部分区域进行烧写,用新固件程序覆盖旧程序固件,实现程序固件升级 。IAP的目的是:通过预留的通信口对产品的程序固件进行更新升 级。
为什么要使用IAP功能?IAP功能会给我们带来哪些好处呢?
IAP可以为我们带来以下两个好处。1、IAP可以实现免拆机壳升级产品程序固件。 通常情况下程序下载需要使用专用的下载口(如JTAG口),然而这个接口通常情况下不会预留在设备外部,如果需要更新设备的程序固件,就需要拆开设备外壳,使用下载器连接到设备下载口,下载程序到设备。
例如现场有100个设备,由于客户提出新的需求,需要给现场的设备升级程序固件。工程师来到现场,首先需要把100个设备的外壳打开,然后使用下载器连接到下载口升级程序固件,然后在将100个设备的外壳安装好。拆卸和安装设备外壳是一个非常繁琐的过程,有时候甚至会由于意外操作损坏设备(如螺丝滑丝或电路板短路) !如果设备有IAP功能,我们可以使用设备预留的串口,USB口或者网口升级设备程序固件。不需要拆装设备外壳就可以实现程序固件更新,省时省力,也减小出问题的概率。
2、IAP可以通过网络实现对设备进行远程升级。 如果设备有3G/4G、WIFI、NB等网络功能,IAP可以利用这些网络功能实现远程设备升级。例如设备拥有IOT-NB功能,我们可以利用云端的服务器将数据通过NB网络下发给设备,实现设备的远程固件升级功能,无需外派工程师到现场,省时省力高效!
3.IAP工作原理
IAP的核心功能是:更新程序。
那么IAP是如何实现更新程序功能,IAP的工作原理是什么呢?
我们先讲一个生活中的例子:金刚石刀头的制造过程。锯片的刀头处通常会焊接一个高强度,耐磨性好的金刚石刀头,这个刀头是金刚石粉末在热压机设备中经过高温高压制作而成。
热压机设备制造过程中的温度和压力的工艺决定决定金刚石性能品质,例如一个简单的工艺是:启动时温度和压力缓慢增加,一定时间后到达高温高压状态,随后保持高温高压一段时间,最后缓慢减小温度和压力,这个生产过程称为工艺曲线控制。
假设客户需要锯大理石的锯片,需要高强度的锯片,因此需要修改金刚石刀头的工艺曲线。首先生产主任拿来曲线工艺清单,操作工人接收曲线工艺清单,重新设置工艺曲线,然后重启设备,就这样完成了工艺曲线的更新。在整个工艺曲线更新的过程中有三个重要部分:1、设备当前运行的工艺曲线参数。2、生产主任提供的新工艺曲线参数。3、操作工人。
工艺曲线更新的过程中有三个重要动作:1、下发,生产主任将新工艺传递给操作工人。2、更换,生产工人删除旧的工艺曲线,输入新的工艺曲线。3、重启,完成新工艺参数输入后重新启动机器,运行新的工艺曲线。
回到正题,在实现IAP功能时通常需要在设计固件程序时编写
两个项目代码 :1、第一个项目代码不执行用户功能操作 (产品功能),而是通过USB、USART或者网口接收数据(APP代码就是数据),并对第二部分代码进行更新,我们把这部分代码称为bootloader 。2、第二个项目代码是真正的功能代码 (实现产品功能),我们把这部分代码称为app (应用程序)。
bootloader和app这两个代码都同时烧录在Flash中 (不同区域),当芯片上电后,bootloader代码首先开始运行,随后跳转并执行app代码 ,大致流程如下:1、检查是否需要对app代码进行更新,如果有需要就执行app代码更新。2、跳转到app代码。3、运行app代码。
结合金刚石刀头这个实例 ,可以将IAP工作流程作如下对比:1、bootloader相当于操作工。操作工可以接收新的工艺参数,更新工艺参数;bootloader可以接收新的程序固件,更新设备程序固件。2、app就相当于设备中运行的工艺参数。3、新的app就相当于新的工艺参数。4、下发,对应外部设备将新app程序数据发送给bootloader。5、更换,对应bootloader将接收到的appapp程序数据写入app程序对应的FLASH区域。6、重启,对应bootloader完成app更新后,跳转并执行app代码。
根据IAP工作流程,可以将IAP功能分解成以下3部分功能:1、数据交互,接收外部设备发送来的数据。2、数据存储,将接收到的数据写入存储器。3、程序跳转,跳转并执行APP。
IAP的以上3部分功能称为IAP三板斧 ,接下来我们看这三板斧具体完成哪些细节工作,以及我们如何实现这三板斧。
创作不易希望朋友们点赞,转发,评论,关注!您的点赞,转发,评论,关注将是我持续更新的动力!CSDN:https://blog.csdn.net/li_man_man_man今日头条:https://www.toutiao.com/article/7149576260891443724
单片机ISP、IAP、ICP、JTAG、SWD编程技术介绍
随着科学技术的不断发展,单片机的编程技术也是越来越丰富了。简单统计一下目前大家比较熟悉的编程方法有以下几种:ISP、IAP、ICP、JTAG、SWD、UART。那么这些编程技术都有什么特点,又都是什么原理呢?今天我们就来给大家普及一下。
IAP
IAP的英文全称是In Application Programming,从英文字面意思来翻译的话,就是“在应用编程”.
IAP的运行原理是:指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在实现IAP功能时,单片机内部一定要有两块存储区,一般一块被称为BOOT区,另外一块被称为存储区。单片机上电运行在BOOT区,如果有外部改写程序的条件满足,则对存储区的程序进行改写操作。如果外部改写程序的条件不满足,程序指针跳到存储区,开始执行放在存储区的程序,这样便实现了IAP功能。
IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将程序从一个存储体转向另一个。
IAP的实现非常灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器,可以通过现有的INTERNET或其它通讯方式很方便地实现远程升级和维护。
ISP编程
ISP的英文全称是In System Programming,英文字面意思为:在系统编程,ISP技术可以对已经焊接到电路板上的单片机进行编程, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。
ISP技术的优势是不需要编程器就可以进行单片机的实验和开发,单片机芯片可以直接焊接到电路板上,调试结束即成成品,免去了调试时由于频繁地插入取出芯片对芯片和电路板带来的不便。
ISP的实现一般需要很少的外部电路辅助实现。
ICP编程
ICP的英文全称是In Circuit Programing,意为:在电路编程。如果单片机已经焊接到电路上,但又需要再次烧写程序,如果拆卸单片机会非常不方便,这时就用到ICP编程,这一点与ISP比较像。
ICP编程的特点是:MCU只要处于上电状态即可,不必预烧任何code在MCU里面;(2)烧录范围涵盖整颗MCU,包括APROM, DataFlash, CONFIG, LDROM和 ROMMAP。
JTAG编程
JTAG的英文全称是Joint Test Action Group(联合测试行为组织);JTAG 主要应用于:电路的边界扫描测试和可编程芯片的在线系统编程。
JTAG 也是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现今多数的高级器件都支持JTAG协议,如DSP、FPGA、ARM、部分单片机器件等。标准的JTAG接口是4线:JTAGTMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。 相关JTAG引脚的定义为:TCK为测试时钟输入;TDI为测试数据输入,数据通过TDI引脚输入JTAG接口;TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;TRST为测试复位,输入引脚,低电平有效。
JTAG口会因为单片机的不同,其接口数量也不等,一般有10,14,20引脚的JTAG接口。
SWD编程
SWD最大的好处就是节省PCB 的空间和布线难度,SWN采用J-LINK编程模式。
SWD 模式比 JTAG 在高速模式下面更加可靠。 在大数据量的情况下面 JTAG 下载程序会失败, 但是 SWD 发生的几率会小很多。基本使用 JTAG 仿真模式的情况下是可以直接使用 SWD 模式的, 只要你的仿真器支持。 所以推荐大家使用这个模式。
在单片机 GPIO 刚好缺一个的时候, 可以使用 SWD 仿真, 这种模式支持更少的引脚。
在板子的体积有限的时候推荐使用 SWD 模式, 它需要的引脚少, 当然需要的 PCB 空间就小啦! 比如你可以选择一个很小的 2.54 间距的 5 芯端子做仿真接口。
UART编程
顾名思义,UART编程是利用串口进行编程。
说了这么多,可能把大家搞糊涂了,下面我们通过一张图来说明一下这几重编程方式的层次关系
从图上看,ISP和ICP是处于最顶层的技术。描述的是一种编程结构,所用使用到的协议、通信端口等,不同芯片有不同的定义。
IAP在第二层,是一种编程方式。实现方式是将一段目标芯片可执行的代码通过某种通信协议下载到芯片RAM中并由芯片执行,由该代码实现具体操作以达到编程的目的。这种方式需要芯片支持通过某种通信协议对芯片的RAM进行读写并能控制其CPU。这是在编程结构下的一种编程方式,像AK100Pro、SmartPRO 5000U-Plus等烧录器,都用到了这种编程方式。
最下面的是硬件通信协议,UART是最早应用在单片机里面的串行通信技术。JTAG和SWD是ARM内核芯片兴起之后,逐渐流行起来的,这三种技术描述的是编程过程中硬件层使用的通信协议,是最底层的一些技术规范。
用一个表格来对比这几种通信协议的特性:
综合上面的内容,只要UART、JTAG、SWD这些硬件通信协议能保证电气连接的规范性和稳定性,那么ISP、IAP就能对芯片正确地编程。
相关问答
stc15f2k08s2与iap15f2k61s2单片机芯片哪个更好-ZOL问答
这两个芯片是同一个系列的,功能是一样的。区别在于前者有内部EEPROM,需要用EE...如果你追求更高的处理能力和更多的存储空间,那么iap15f2k61s2是更好的选择;而s...
51单片机中能不能创建一个链表在code区?
51单片机是一种嵌入式系统微控制器,其内存资源通常有限,不适合直接在code区创建链表,因为链表通常需要动态分配内存,而51单片机的内存通常是静态分配的。如...
苹果或取消10月发布会,新款iPad、MacBookPro将直接开卖,对此你有哪些期待?
有啥好期待的买的起依旧买的起,买不起还是买不起。再说了买国产的不香吗,价格还便宜。如今苹果产品起步价格太贵但是性价比并不高。苹果的配件贵是出了名的,...