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