天天看点

IAP的无线版(stm32无线下载程序)(基于有线升级)我对IAP的理解无线模块的选用避坑指南(总结)

如果你没有时间,想吃 “快餐” ,请直接移步至文末。

在上一篇博文中,我介绍了我有线IAP用户程序升级的一些心得,有线升级并不是我的目的,无线才是,所以就有了这篇文章。这篇文章介绍的也是在实现单片机有线升级的基础上,实现无线升级的一些心得和建议。关于有线升级,大家可以在网上搜索或直接看我的上一篇博文

我对IAP的理解

常用的单片机程序下载方式有三种,即

ISP(In System Programing,在系统编程)

ICP(In Circuit Programing,在电路编程)

IAP(In applicating Programing,在应用编程)

个人理解是传统的ISP和ICP的程序烧录方式可以看作是开发商(芯片制造商)在一块给定的区域(flash)建造一座全新的房子,并放一个人在屋子里,人负责执行具体的功能;

IAP下载的方式像是先用传统的方式在一块给定区域建造两座房子(A、B),每个房子分配一个人(a、b),其中一个人a负责把b请进B房间,而b则负责执行就的功能,且a、b在同一时间只能有一个人活动。当然,因为房屋的总体使用面积固定,所以IAP建造的房子面积(flash空间)相较于ISP和ICP较小。

无线模块的选用

传输协议

关于程序由电脑无线传输到单片机:因为我想要实现的程序的无线下载,所以就必须要考虑无线传输时候因为周围嘈杂的无线电环境导致的程序接收与发送不一致。在无线模块与单片机的通信方面,我使用的是串口通信,串口通信本身对字节级具有校验能力,但在字节间的校验就无能为力,查阅资料最后决定使用Ymodem通信协议。

无线模块

重点来了!!!

在程序由电脑到无线模块的传输过程,我最初选用的是NRF24L01,但很快就碰到了问题。首先是NRF24L01的驱动编写问题,这块无线模块很便宜,能耗也很低,但它本身每次只能实现32字节的数据传输,想要实现NRF24L01的文件级无线传输,不仅需要对NRF24L01进行底层的驱动编程,还得为它专门编写一套适合传输协议。最终选用的HC-05蓝牙模块。

这款模块具有下面的特点:

优点:

  • 模块可以通过串口,借助AT指令直接配置无线模块,配置完后按照给定方式连接单片机或CH340后,可以实现无线透传,相比于使用杜邦线连接的串口传输,它帮忙省掉了杜邦线,实现了近距离的无线传输。
  • 自带蓝牙模块间的通信协议,传输数据的大小没有限制,完美避开了NRF24L01模块的32字节的大坑。
  • 使用AT指令配置后,已做出的掉电配置不更改,单片机上电后不需要再给无线模块发送配置指令,节省代码空间。

缺点:

  • 较NRF24L01贵
  • 更加耗电,所以不能通过st-link对单片机和模块直接供电,别问我为什么知道,问就是我的st-link废了,目前的分析原因是st-link负载功率过大
  • 距离限制,HC-05的参考通信距离是空旷环境下的10米,HC-08的距离会比较长,参考通信距离是空旷环境下的80米,但更贵

避坑指南(总结)

避坑总结(含上述提到的和未提到的):

  1. 实现无线功能,建议使用像HC-05这类直接使用AT指令的无线模块,不建议使用NRF24L01;
  2. 如果使用HC-05,不要使用st-link直接对单片机和HC-05直接供电,否则st-link会挂掉,十几块钱和等待到货的几天时间没了;
  3. 建议使用类似与Ymodem的传输协议,在保证接收正确的前提下,还可以试下逐帧下载,节省ram
  4. 如果想要实现无线下载功能,可以使用OTA(over the air)作为其中的关键字,会有意向不到的收获;
  5. 如果时想要自己动手钻研的朋友,可以参考正点原子的视频和程序,视频链接https://www.bilibili.com/video/BV1Lx411Z7Qa,视频里有关IAP是第87讲,相关资料也可以在视频介绍找到。

    注意:正点原子的程序是教学视频,视频里的方式占用ram大,且传输时,字节间数据正确性无法保证。

  6. 如果只是单纯的想要这项功能,而不想要花费力气自己编程,可以去RT-Thread

    官网生成一个免费的程序(须注册,只能提供编译之后的文件,无源代码),B站视频网址附下:https://www.bilibili.com/video/BV1Zc41187iy

  7. 搜索资料时,建议去CSDN,干货比较多,也可以去GitHub上逛逛;

上述仅为个人见解,如有其他意见和建议欢迎和我练习,共同学习,共同进步