当前位置: 首页 > news >正文

STM32远程更新

1 IAP 概述
1.1
工作原理
在应用中编程( IAP )是一种在现场通过 MCU 的通信接口(例如 UART,USB,CAN 和以太网
等)进行固件升级的方式。
当启动微控制器时,您可以选择让它进入 IAP 模式以执行 IAP 代码,或者进入正常模式来开
始执行应用代码。 IAP 代码和应用程序代码都存在于微控制器的嵌入式 Flash 中。通常 IAP
码被存储在 MCU Flash 的前几页,用户应用代码占据剩余的 Flash 区域。
下图说明了 IAP 操作流程:

1.2 可以通过tcp/ip,http,tftp等网络协议输出二进制固件

使用 TFTP 实现 IAP

2.1 TFTP 概述
简单文件传输协议 ( TFTP )是工作在 UDP 上的一种简单的文件传输协议。
文件传输是从 TFTP 客户端发起的, TFTP 客户端向 TFTP 服务器发送读或写请求。
当服务器确认请求后,文件数据传输开始。数据按固定大小的数据块发送 (如 512 字节的数
据块)。
必须在每个传输的数据块被接收端响应后,才能发送下一个数据块。这种回应机制通过随每
个数据块同时发送的数据块编号来实现。
数据块小于固定块大小表示文件传输结束。
2 说明了各类 TFTP 包的格式:

 

2.2 使用 TFTP 实现 IAP
IAP 实现包括一个基本的 LwIP TCP/IP 栈上的 TFTP 服务器。该服务器响应从远程 TFTP
客户端 ( PC )接收的 WRITE 请求。 TFTP READ 请求被忽略。
服务器将接收到的数据块写入 MCU Flash (在用户 Flash 区域),而不是将接收的文件写入
文件系统。
注: 在本实现中,数据块大小固定为 512 字节。
下面的流程图给出了使用 TFTP 实现 IAP 操作的过程。
2.3
使用软件
为了通过 TFTP IAP 进行测试,请确保遵循如下步骤:
1. STM3210C_EVAL 板上确保正确的跳线设置 (参见 2 )。
2. main.h 文件中,取消选项 “USE_IAP_TFTP” 的注释。根据需求,您还可以取消注释 /
注释其它选项,比如 “USE_DHCP” “USE_LCD”
3. 重新编译软件。使用生成的 map 文件,确保 IAP 代码区域 (从地址 0x0 开始)和开始
USER_FLASH_FIRST_PAGE_ADDRESS ( main.h 中定义 ) 的用户 Flash 区域之
间没有重叠。
4. 将程序下载到 STM32Flash 中并运行它。
5. 按住 Key 按钮的同时,按下并释放 Reset 键,进入 IAP 模式。
6. 若在 main.h 文件中定义了 “USE_LCD” LCD 屏幕上会显示消息,指示已经进入 IAP
式。如果采用了 DHCP main.h 文件中定义了 USE_DHCP ), LCD 屏幕上也会显示一
条消息,指示 DHCP IP 地址分配的成功或失败。
7. 分配完 IP 地址后 (动态或静态地址),用户可启动 IAP 进程。
8. PC 上,打开 TFTP 客户端(例如, TFTPD32 )并配置 TFTP 服务器地址( TFTPD32
中的主机地址)。
9. 选择一个二进制映像下载到 STM32 Flash 中 ( /project/binary 文件夹中提供了两个二进
制映像作为例子)。
10. TFTPD32 应用程序上点击 “Put” 按钮,启动一个文件写请求。
11. 如果定义了 USE_LCD IAP 操作的进度会显示在 LCD 上。
12. IAP 操作结束时,可以复位评估板来运行您刚才在 STM32 Flash 中编写的程序。

注意事项:

为了构建 IAP 映像 (将用 IAP 软件进行加载),请确保:
1.
向量表起始地址配置为用户 Flash 区域的起始地址。可以通过使用 std 库函数:
NVIC_SetVectorTable 实现。
2. 被编译 / 链接的软件必须从用户 Flash 区域起始地址开始运行。
3. 编译后的软件大小不超出总的用户 Flash 区域
AN2557 使用 STM32F10xxx UASRT 实现在应用中

 

 

 

相关文章:

  • Docker的部署与基本使用
  • $nextTick的使用场景介绍
  • Python使用rosbag使用getattr只能获取一层的数据,不能直接获取多层数据例如 a.b.c.d。使用for range写一个递归用来获取多层数据
  • SmartEDA:革新电路设计,体验前所未有的创新乐趣!
  • CVE-2022-4230
  • 【TB作品】MSP430F149 单片机 音乐喷泉
  • Spring Cloud工程添加子模块打包后文件为war包而非jar包
  • C语言小例程6/100
  • 【Linux】线程控制
  • MongoDB CRUD操作:地理位置查询
  • 操作系统教材第6版——个人笔记6
  • WPF国际化的最佳实践
  • SASS模块化与组织文件
  • 5-Maven-setttings和pom.xml常用配置一览
  • c#vb代码互转工具
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2017年终总结、随想
  • canvas 五子棋游戏
  • IDEA常用插件整理
  • Java多线程(4):使用线程池执行定时任务
  • QQ浏览器x5内核的兼容性问题
  • Vue官网教程学习过程中值得记录的一些事情
  • 阿里云前端周刊 - 第 26 期
  • 入门级的git使用指北
  • 微信小程序设置上一页数据
  • 从如何停掉 Promise 链说起
  • 交换综合实验一
  • ​Java基础复习笔记 第16章:网络编程
  • ​卜东波研究员:高观点下的少儿计算思维
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #NOIP 2014# day.1 T2 联合权值
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (1)Nginx简介和安装教程
  • (14)Hive调优——合并小文件
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (办公)springboot配置aop处理请求.
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (算法设计与分析)第一章算法概述-习题
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Mysql的优化设置
  • (转)nsfocus-绿盟科技笔试题目
  • ... 是什么 ?... 有什么用处?
  • ..回顾17,展望18
  • .gitignore文件_Git:.gitignore
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .jks文件(JAVA KeyStore)
  • .net core 连接数据库,通过数据库生成Modell
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @ResponseBody
  • @我的前任是个极品 微博分析
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ solr入门 ] - 利用solrJ进行检索