IAP介绍
Iap,全名为in applacation programming,即在应用编程,与之相对应的叫做isp,in system programming,即在系统编程,两者的不同是isp需要依靠烧写器在单片机复位离线的情况下编程,需要人工的干预,而iap则是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。在工程应用中经常会出现我们的产品被安装在某个特定的机械结构中,更新程序的时候拆机很不方便,使用iap技术能很好地降低工作量.
实现iap有两个很重要的前提,首先,单片机程序能对自身的内部flash进行擦写,第二,单片机要有能够和外部进行通讯的方式,无论是网络还是别的方式,只要能传输数据就行。
通常实现 IAP 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,JTAG 或 ISP 烧入第一个项目程序,第一个项目程序(IAP部分)不执行正常的功能操作,而只是通过某种通信方式(如 USB、 USART、网络)接收程序或数据,执行对第二部分代码的更新;第二个项目代码(用户程序部分)才是真正的功能代码。这两部分项目代码都同时烧录在 User Flash 中,当芯片上电后,首先是IAP部分代码开始运行,它作如下操作:
![](https://img.haomeiwen.com/i138606/768db873d23bc2fd.png)
uip协议移植
uIP是一个简单好用的嵌入式网络协议栈,易于移植且消耗的内存空间较少,非常适合学习和使用。uIP的功能远不如LwIP强大,但两者并没有孰优孰劣之分,uIP和LwIP的作者同为Adam Dunkels,LwIP开发较早uIP开发较晚,uIP经过这几年的发展从IPV4迁移到IPV6,最终可以适用于无线传感网络。
![](https://img.haomeiwen.com/i138606/b8519570e36072c4.png)
- 详细移植过程请参考:
基于stm32+ENC28J60移植uip协议
示例代码
以下代码基于2014年在一师兄那儿做智能家居时,抽离出来的代码:
https://github.com/woshizmxin/IAP_Stm32
网友评论