打印
[应用相关]

IAP

[复制链接]
1948|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IAP是In Application Programming的 首 字 母 缩 写,
IAP是用户的程序在运行过程中对 User Flash的部分区
域进行烧写,目的是为了在产 品 发 布 后 可 以 方 便 地 通 过
预留的通信 口 对 产 品 中 的 固 件 程 序 进 行 更 新 升 级。 通
常在用户需要实现IAP功能时,需 要 在 设 计 固 件 程 序

沙发
goodluck09876|  楼主 | 2018-10-6 16:37 | 只看该作者
编写两个项目代码,第一个项 目 程 序 不 执 行 正 常 的 功 能
操作,而只是通过某种通信 管 道(如 USB、USART)接 收
程序或数据,执 行 对 第 二 部 分 代 码 的 更 新,被 称 作 引 导
程序,该部 分 代 码 必 须 通 过 JTAG 或ISP 烧 入;第 二 个
项 目 代 码 才 是 真 正 的 功 能 代 码,即 APP程 序,该 部 分 代
码 可 以 使 用JTAG 或ISP烧 入,也 可 以 利 用 第 一 部 分 代
码IAP功能写入。

使用特权

评论回复
板凳
goodluck09876|  楼主 | 2018-10-6 16:37 | 只看该作者
Ymodem协议
Ymodem 协议作为上位机和 STM32通信的桥梁,它
具有完善的握手机制和出错管理机制,可以大幅提高IAP
的成功率。
Ymodem 协议是一种发送并等待的协议,即 发 送 方
发送一个数据包以后,都要 等 待 接 收 方 的 确 认。将 文 件
分块的大小定位1 024字节,传输请求由上位机发起

使用特权

评论回复
地板
goodluck09876|  楼主 | 2018-10-6 16:38 | 只看该作者
每·26·个传输帧 由 帧 头、数 据 段、帧 尾 组 成,帧 格 式 如 图 1 所
示。上位机软件将数 据 以 每 次 1 024 字 节 加 上 包 头、包
号、包号补码、末 尾 加 上 CRC 校 验 字 段,打 包 成 帧 格 式传送

使用特权

评论回复
5
goodluck09876|  楼主 | 2018-10-6 16:38 | 只看该作者

使用特权

评论回复
6
goodluck09876|  楼主 | 2018-10-6 16:38 | 只看该作者
对于STM32来说,因为它的中断向量表位于程序存
储器的最低地址区,为了使第1部分代码能够正确地响应
中断,通常会安排第1部分代码处于 Flash的开始区域,而
第2部分代码紧随 其 后,STM32 中 断 向 量 分 布 如 图 3 所示

使用特权

评论回复
7
goodluck09876|  楼主 | 2018-10-6 16:39 | 只看该作者

使用特权

评论回复
8
goodluck09876|  楼主 | 2018-10-6 16:39 | 只看该作者

使用特权

评论回复
9
goodluck09876|  楼主 | 2018-10-6 16:39 | 只看该作者
STM32的IAP技术原理:
1)STM32复位后,从地址为0x8000004处取出复位中
断向量的地址,并跳转执行复位中断服务程序,随后跳转
至IAP程序的 main函数,如图3中标号①、②所示。
2)执行完IAP后(APP程序如图3中以灰色底纹方格
表示,地址始于0x8000004+N+M)跳转至新写入程序的
复位向量表,取出新程序的复位中断向量的地址,并跳转
执行新程序 的 复 位 中 断 服 务 程 序,随 后 跳 转 至 新 程 序

使用特权

评论回复
10
goodluck09876|  楼主 | 2018-10-6 16:40 | 只看该作者
main函数,其过程如图3的标号③所示。新程序的 main函数具有永不返回的特性,即一旦进入 APP程序,便不会再运行IAP的任何代码。

使用特权

评论回复
11
goodluck09876|  楼主 | 2018-10-6 16:40 | 只看该作者
IAP功能实现流程如图4所示。根据 Ymodem 协议,数据固定以每帧1 024字节传输,接收端对每帧都会进行CRC校验,以确保数据接收的准确性,数据准确无误才会写入指定的flash区域。

使用特权

评论回复
12
goodluck09876|  楼主 | 2018-10-6 16:40 | 只看该作者

使用特权

评论回复
13
goodluck09876|  楼主 | 2018-10-6 16:41 | 只看该作者
设 置 程 序 起 始 位 置 的 方 法 是 (keil uvision4 集 成 开
发 环 境 )在 工 程 的 “Option for Target… .”界 面 中 的
“Target”页里 将 “IROM”的 “Start”列 改 为 “程 序 起 始
位 置”。
IAP中断向量表设置如下:
void NVIC_SetVectorTable(u32NVIC_VectTab,u32
Offset);
void NVIC_SetVectorTable(0x8000000,0x00);//偏
移量0x00
APP中断向量表设置如下:
void NVIC_SetVectorTable(u32NVIC_VectTab,u32
Offset);
void NVIC_SetVectorTable(0x8000000,0x8000);//
偏移量0x8000

使用特权

评论回复
14
goodluck09876|  楼主 | 2018-10-6 16:41 | 只看该作者
内置flash有1MB的存储空间,分为12个扇区,前两个扇区(32K)预留给IAP 程序,其余的 10个扇区分配给APP程序,因此每次更新 APP程序之前,都要先擦除分配给 APP程序flash空间。

使用特权

评论回复
15
goodluck09876|  楼主 | 2018-10-6 16:42 | 只看该作者
如果IAP程序被破坏,采集器必须返厂拆开机器才能
重新烧写程序,这是很麻烦并且非常耗费时间和金钱的。
针对这样的需求,STM32在对 Flash区域实行读保护的同
时,自动地对 Flash区的前4页设置为写保护,这样可以有
效地保证IAP 程 序 (第 一 部 分 代 码)区 域 不 会 被 意 外 地
破坏。

使用特权

评论回复
16
colin2135| | 2018-10-7 15:28 | 只看该作者
这字体看得真难受。

使用特权

评论回复
17
磨砂| | 2018-10-8 09:32 | 只看该作者
一般情况下用不到是吗

使用特权

评论回复
18
labasi| | 2018-10-8 15:30 | 只看该作者
非常感谢楼主分享啊

使用特权

评论回复
19
renzheshengui| | 2018-10-8 16:09 | 只看该作者
第一次听说这个 了解下

使用特权

评论回复
20
Snoopy2000| | 2019-11-29 18:09 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

220

主题

5843

帖子

24

粉丝