STM32远程更新

时间:2024-06-13 14:06:35
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 实现在应用中