基于Ymodem协议的STM32串口IAP的实现(IAP + APP + 上位机)

1.什么是IAP?

IAP:In Application Programming 是指在应用编程,即在程序运行中编程,就是片子提供一系列的机制(硬件/软件上的)当片子在运行程序的时候可以提供一种改变flash数据的方法。通俗点讲,也就是说程序自己可以往程序存储器里写数据或修改程序。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的bootloader程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到存储区。

2.与ISP的区别

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

3.为什么要用IAP

STM32F1XX单片机在出厂前,固化了ISP自举程序,挺强悍的,至少我觉得,因为人家还自适应波特率呢,才2KByteROM+512ByteRAM。上位机下载软件现成的,也不用自己操心了。不过呢,需要boot0跳线进入,详见文档 RM0008芯片参考手册第2章 和 AN2606系统内存引导模式。那我就要在我明亮的壳子上打个白米粒大的洞,然后就像路由器那样,拿牙签捅啊捅的。还有,就是把HEX文件发布让客户自己升级,感觉不像回事,老板也会担心他们抄东西(其实没有什么是安全的啦)。所以,不需要拆机就能对产品进行固件升级是很多人想要的效果,不仅方便而且节省精力和成本。

4.如何设计IAP

经过上面的介绍我们知道完整的IAP应该包括三个部分:1.boot 2.user app 3.上位机控制端。

在做之前在网上查了很多资料,要不就是空空而谈如何如何实现要不就是只有一个boot代码,就是找不到整套的资料,这可能与整个电子行业的封闭有关。在这方面真的要学学互联网的开源精神。

当然啦,也有很多优秀的文章,这里给大家传送门:

基于Ymodem协议的IAP上位机(C#)

献丑之STM32F单片机IAP方法

所以我决定将这个项目开源出来,整个项目包括三套代码。

  1. boot部分:可用于stm32f1xx平台,几乎不需要修改代码,只需要根据你的MCU简单的配置一下工程文件就好了。(我的平台是stm32f103ze)

  2. app部分:其实就是你需要实现产品功能的部分。我这里采用了usmart框架,用它的原因主要是方便和boot部分以及上位机部分进行通信。这部分目前做的比较少,之后会将他抽象出来。

  3. 上位机部分:前面两个部分运行在MCU内部用的是C编程。这部分运行在windows平台用的是C#,基于 .net4.0。你可以很方便的将它移植到你的项目中。

5.干货在哪里

说了这么多,是时候show my code了。我把代码都托管在github上了(之后会放到csdn上面),每套代码都有说明文档(请按照下述编号看起)。但是文档不够详细,之后会丰富。目前测试的平台比较少,希望大家可以一起来测试提交bug,一起来完善。

  1. boot部分代码

  2. app部分代码(支持usmart的重量版)
    app部分代码(简洁的轻量版)

  3. 上位机代码

6.还需要去做什么

  • 实现aes文件加密

  • 实现一边接收数据一边写入数据

  • 实现可更改每包数据大小(目前每包是1024字节)

    • 已经实现32Byte、64Byte、128Byte、256Byte、512Byte、1KByte可选(2017.6.11更新)
  • 实现蓝牙串口iap

    • 我采用HC-08蓝牙透传模块(BLE类型),在32Byte和64Byte的情况下可以实现蓝牙串口iap(跟蓝牙模块有关,建议不要使用BLE类型的,它的延时较高。2017.6.11)
  • 增加spi接口和i2c接口的iap(目前是uart接口)

7.诚邀有兴趣的小伙伴一起来。。。

更新时间20170605

更新时间20170611

你可能感兴趣的:(基于Ymodem协议的STM32串口IAP的实现(IAP + APP + 上位机))