在我们阅读芯片数据手册的过程中,这两个词通常是配对出现的。

有ISP的地方就会有IAP的影子,反之亦然。而中文“在系统编程”和“在应用编程”听起来也十分类似。究竟两者之间又有怎样的关系,我们在正常的使用中又会怎样用到它们呢?

我们先来了解一下ISP,在系统编程是一种给单片机或微控制器写入程序的手段。我们印象中给它们下载程序的方式是将芯片摘下来,安装在专门的烧录器或下载器上,连接在电脑上下载程序。而ISP实际上提供了一种简单的下载方式。如果你在设计电路的时候给下载时所需要的引脚留出连接下载器或Debugger的接口,那么在芯片已经安装进系统的电路板中之后,你就可以不把芯片拔下来,直接将下载器连接至整块电路板上,然后就可以直接下载了。一般来说这对于不能够简单的拆下来烧写的系统有奇效。有了这项技术,工程师们想要更新机器的软件再也不需要把机器“大卸八块”了。

而IAP“在应用编程”则更进一步。运行在单片机上的程序能够通过调用系统函数或预留的程序,改写自己所在的程序区。从而实现连外加程序和硬件都不用,就能够更新程序的能力。一般来说实现的原理为:在Flash中固化了可以调用的对剩余Flash部分进行擦写的函数。用户程序通过调用即可对自己所在的程序区进行擦写。这样更加简化了更新固件的过程,如果程序设计得好的话,工程师甚至可以“足不出户”,利用IAP功能就能够将最新的固件写入进Flash。

那么它们两个之间有什么关系吗?

实际上,如果ISP通过单纯的串口或者数据总线烧入,那么实现这种功能的很有可能就是IAP功能。因为这就像出去接人一样,如果我们现在有一个人想要到另外的一个城市的某一栋楼,火车只能把他送到那个城市,而具体想要到达某一个地点则需要城市内公交的指引。同样,串口等接口只能把数据送到单片机,而真正的Flash烧写则要靠IAP的函数。而有些ISP则是通过专用的接口,比如JTAG也可以做下载程序的接口,那么这个时候的原理则是通过外加的烧写器来引导数据的不同走向。

两者如果都需要程序的话,那么一个很明显的区别就是ISP一般需要将全部程序全都擦除重写,而IAP程序则可以精确地擦写Flash。我们平常也可以使用IAP功能来在没有使用的Flash空间里存储一些运行时需要记录下来的数据。这也算是IAP的一个特色吧!

本文为 无线电杂志 微信公众平台原创文章。详细内容及高清大图请查阅《无线电》杂志。版权所有,欢迎个人转发至朋友圈。公众号、报刊等转载请给本公众号后台留言获得授权。

…………………………………………………

无线电杂志

微信号:radiomagazine

长按识别二维码关注我们

相关推荐