应用笔记 STM32 在应用中编程通过 I²C 总线 简介 对于大多数基于 Flash 的系统而言, 在最终产品安装之后, 能够对固件进行更新, 这一点非常重要 这称为在应用中编程 (IAP) 此应用笔记的目的就是为创建 IAP 应用程序提供通用指南 STM32F10x 微控制器能够运行用户指定的固件, 从而执行微控制器内置 Flash 的 IAP 借助这一特性, 在重新编程过程中可以使用任意类型的通信协议 ( 如 CAN USART USB SPI 和 I2C 等 ) 本应用笔记介绍如何使用 STM32F10x 的 I2C 外设执行在应用中编程 第一步, 将 Aardvark 工具用作主机, 向 STM32F10x 发送 IAP 命令 第二步, 将另一 STM32F10x 微控制器用作主机, 且该微控制器桥接 PC 与目标器件 (USB/I2C 桥接器 ) STM32F10x 用作 I2C 存储器, 可通过 I2C/ 接口对其进行编程 擦除和读取 有关 STM32F10x 系列产品的特性 引脚 电气特性 机械数据和订购信息的详细信息, 请参见 STM32F10x 数据手册, 该手册可从意法半导体网站下载 :www.st.com STM32 固件库可从 www.st.com 下载 下面列出了开发过程中使用的 Aardvark 主机适配器版本 : 固件 :Aardvark I2C/SPI Control Center v3.52-2009.0130 硬件 :Aardvark I2C/SPI v3.0 有关 Aardvark 主机适配器及其软件的详细信息, 请参阅 www.st.com 中的相关文档 2010 年 07 月文档 ID 16393 第 1 版 1/21 www.st.com
目录 目录 1 IAP 概述................................................... 6 1.1 原理...................................................... 6 1.2 用户程序应满足的条件........................................ 6 1.3 全局流程图................................................. 7 1.4 IAP 命令................................................... 8 1.4.1 读命令................................................... 8 1.4.2 写命令................................................... 9 1.4.3 擦除页命令................................................ 9 1.4.4 擦除用户存储空间命令...................................... 10 1.4.5 转到用户代码命令......................................... 10 2 通过 I 2 C 外设执行 STM32 IAP................................. 11 2.1 硬件介绍.................................................. 11 2.2 软件介绍.................................................. 11 2.2.1 I 2 C 数据包介绍............................................ 11 2.2.2 IAP I 2 C 读命令............................................ 12 2.2.3 IAP I 2 C 写命令............................................ 12 2.2.4 IAP I 2 C 擦除页命令........................................ 12 2.2.5 IAP I 2 C 擦除用户存储空间命令............................... 13 2.2.6 IAP I 2 C 转到用户代码命令................................... 13 2.2.7 IAP I 2 C 流程图............................................ 13 3 向目标器件发送 IAP 命令..................................... 14 3.1 使用 Aardvark I 2 C 主机适配器发送 IAP I 2 C 命令................... 14 3.1.1 Aardvark I 2 C 接口模式...................................... 14 3.1.2 Aardvark I 2 C 批处理模式.................................... 16 3.2 使用另一用作桥接器的 STM32 器件发送 IAP 命令................. 17 3.2.1 原理.................................................... 17 3.2.2 硬件介绍................................................ 18 3.2.3 固件介绍................................................ 18 2/21 文档 ID 16393 第 1 版
目录 4 IAP 时序.................................................. 19 5 版本历史.................................................. 20 文档 ID 16393 第 1 版 3/21 3
表格索引 表格索引 表 1. IAP 时序............................................................... 19 表 2. 文档版本历史........................................................... 20 4/21 文档 ID 16393 第 1 版
图片索引 图片索引 图 1. Flash 的用法............................................................. 6 图 2. 全局流程图.............................................................. 7 图 3. 读命令流程图............................................................ 8 图 4. 写命令流程图............................................................ 9 图 5. 擦除页命令流程图......................................................... 9 图 6. 擦除用户空间存储器命令流程图............................................. 10 图 7. 转到用户代码命令流程图.................................................. 10 图 8. 主机主器件与目标器件 STM32 I 2 C 之间的硬件连接.............................. 11 图 9. 使用 I 2 C 协议的读数据包序列............................................... 12 图 10. 使用 I 2 C 协议的写数据包序列............................................... 12 图 11. 使用 I 2 C 协议的擦除页数据包序列........................................... 12 图 12. 使用 I 2 C 协议的擦除用户空间存储器数据包序列................................ 13 图 13. 使用 I 2 C 协议的转到用户代码序列........................................... 13 图 14. IAP I 2 C 流程图.......................................................... 13 图 15. 接口模式中 Aardvark I 2 C 主机适配器的配置................................... 14 图 16. 使用 Aardvark I 2 C 接口的读命令............................................ 15 图 17. I 2 C 读命令事务.......................................................... 15 图 18. 使用 Aardvark I 2 C 接口的写命令............................................ 16 图 19. I 2 C 写命令事务.......................................................... 16 图 20. 使用批处理模式的 Aardvark I 2 C 配置......................................... 16 图 21. 批处理脚本中的 IAP I 2 C 读命令............................................. 17 图 22. 批处理脚本中的 IAP I 2 C 写命令............................................. 17 图 23. PC STM32 桥接器与 I 2 C 目标器件之间的硬件连接............................. 18 图 24. 修改后的 DFU 固件架构................................................... 18 文档 ID 16393 第 1 版 5/21 5
IAP 概述 1 IAP 概述 1.1 原理 可以使用开发工具通过 JTAG 或 SWD 接口, 把 IAP 驱动程序烧写到 Flash 的起始地址 此驱动程序使用 I2C, 将文件从主机载入 STM32F10x 内部 Flash, 然后执行该文件 1.2 用户程序应满足的条件 将 IAP 应用程序加载到从 Flash 基址开始到 0x0800 0fff 的一段区域 因此, 必须将用户应用程序加载到 0x0800 1000 地址以上的 Flash 高地址区域 图 1. Flash 的用法 6/21 文档 ID 16393 第 1 版
IAP 概述 1.3 全局流程图 图 2. 全局流程图 使用连接到按钮的引脚来选择跳转到用户应用程序还是执行用于重新编程的 IAP: 复位时, 按下按钮将执行 IAP 否则, 跳转到用户程序 1.4 IAP 命令 1.4.1 读命令 读命令用于从 STM32 的 Flash 中读取数据, 并且可以从用户存储空间的任意 Flash 地址开始读取 文档 ID 16393 第 1 版 7/21 20
IAP 概述 图 3. 读命令流程图 1.4.2 写命令 操作码的值为 OPC_READ 时, 执行读命令 目标器件认为操作码之后由主机主器件发送的前四个字节为要从中读取数据的 Flash 地址 紧跟 Flash 地址之后的两个字节表示要读取的数据的大小 ( 字节 ) 通过 SDA 线将 Flash 中的内容缓存到 I2C1_buffer_Tx, 并按字节发送 写命令用于向 STM32 Flash 写入数据, 并且可以从用户存储空间的任意 Flash 地址开始写入 图 4. 写命令流程图 操作码的值为 OPC_WREN 时, 执行写命令 目标器件认为操作码之后由主机主器件发送的前四个字节为要写入数据的 Flash 地址 紧跟在 Flash 地址之后的两个字节表示要写入的数据的大小 ( 字节 ) 将从主机主器件接收的 N 个字节缓存到 I2C1 Buffer Rx 写入数据前, 要擦除相应 Flash 页 8/21 文档 ID 16393 第 1 版
IAP 概述 1.4.3 擦除页命令 擦除页命令用于擦除用户存储空间中从任意 Flash 基址开始的页 对于中容量器件, 可擦除页的数量在 0x0001 与 0x007B 之间 (1 到 124 页 ); 对于大容量器件, 可擦除页的数量在 0x0001 与 0x00FE 之间 (1 到 254 页 ) 图 5. 擦除页命令流程图 操作码的值为 OPC_ERPG 时, 执行擦除页命令 目标器件认为操作码之后由主机主器件发送的前四个字节为 Flash 地址 紧跟在 Flash 地址之后的两个字节表示要擦除的页数 收到该地址和页数后, 目标器件 STM32 将擦除相应的 Flash 页 1.4.4 擦除用户存储空间命令 擦除用户存储空间命令可擦除用户存储空间中从 Flash 地址 0x0800 1000 开始即以上的所有页 图 6. 擦除用户空间存储器命令流程图 操作码的值为 OPC_ERUSM 时, 执行擦除用户存储空间命令 顾名思义, 此命令将擦除从 Flash 基址 0x0800 1000( 用户空间起始地址 ) 及以上的所有页的内容 文档 ID 16393 第 1 版 9/21 20
IAP 概述 1.4.5 转到用户代码命令 使用转到用户代码命令, 可将程序跳转到用户代码 图 7. 转到用户代码命令流程图 10/21 文档 ID 16393 第 1 版
通过 I 2 C 外设执行 STM32 IAP 2 通过 I 2 C 外设执行 STM32 IAP 本节介绍如何使用 STM32 I 2 C 外设执行 IAP 2.1 硬件介绍 图 8 显示了主机主器件与 STM32 I²C 目标从器件之间典型的硬件连接 通过数据引脚 (SDA) 和时钟引脚 (SCL) 将主器件与目标器件 STM32 连接在一起 SDA 线与 SCL 线均必须连接一个 4.7 kω 的上拉电阻 图 8. 主机主器件与目标器件 STM32 I 2 C 之间的硬件连接 2.2 软件介绍 2.2.1 I 2 C 数据包介绍 I 2 C 命令中存在下列不同的数据包 : 1. ADD_DVCE: 目标地址 2. R: 读取位 : 主器件接收来自目标器件的消息 3. W: 写入位 : 主器件将向目标器件发送消息 4. ACK: 确认 5. NACK: 未确认 6. S:I2C 启动条件 7. P:I2C 停止条件 8. DUM_BYTE: 空字节 (0xFF) 文档 ID 16393 第 1 版 11/21 20
通过 I 2 C 外设执行 STM32 IAP 2.2.2 IAP I 2 C 读命令 读命令包括以下两个序列 : 1. I2C_write 序列 : 主器件发送操作码 Flash 地址及要读取的字节数 2. I2C_read 序列 : 目标器件发送 Flash 内容 图 9. 使用 I 2 C 协议的读数据包序列 2.2.3 IAP I 2 C 写命令 主器件连续发送从器件地址 写命令操作码 Flash 地址 要写入的字节数 一个空字节和要写入用户 Flash 中的字节 图 10. 使用 I 2 C 协议的写数据包序列 2.2.4 IAP I 2 C 擦除页命令 主机连续发送从器件地址 擦除页命令操作码 Flash 地址和要擦除的页数 图 11. 使用 I 2 C 协议的擦除页数据包序列 12/21 文档 ID 16393 第 1 版
通过 I 2 C 外设执行 STM32 IAP 2.2.5 IAP I 2 C 擦除用户存储空间命令 主器件连续发送从器件地址和擦除用户存储空间命令操作码 图 12. 使用 I 2 C 协议的擦除用户空间存储器数据包序列 2.2.6 IAP I 2 C 转到用户代码命令 主器件连续发送从器件地址和转到用户代码命令的操作码 图 13. 使用 I 2 C 协议的转到用户代码序列 S ADD_DVCE W ACK OPC_USRCD ACK P ai17383 2.2.7 IAP I 2 C 流程图 图 14. IAP I 2 C 流程图 文档 ID 16393 第 1 版 13/21 20
向目标器件发送 IAP 命令 3 向目标器件发送 IAP 命令 3.1 使用 Aardvark I 2 C 主机适配器发送 IAP I 2 C 命令 3.1.1 Aardvark I 2 C 接口模式 要使用 I 2 C 接口, 请选择 I2C + GPIO 或 I2C + SPI 工作模式 以下步骤介绍如何配置 Aardvark I 2 C 接口以与先前配置匹配 : 1. 选择 Master( 主器件 ) 选项卡 2. 使用 Bitrate( 比特率 ) 字段和 set( 设置 ) 按钮将比特率设为 100 khz 3. 在 Slave Addr( 从器件地址 ) 字段中将从器件地址设为 0x18 4. 请勿选中 10-Bit Addr(10 位寻址 ) 选项 (10 位寻址模式 ), 因为该固件仅使用 7 位 寻址模式 5. 请勿选中 No Stop( 不发停止位 ) 选项 图 15. 接口模式中 Aardvark I 2 C 主机适配器的配置 2 1 3 4 5 读命令 以下步骤介绍如何读取用户 Flash 中的内容 : 第 1 步 : 在 Master Write message( 主器件写入消息 ) 中, 输入读命令的字节序列 有关此序列的说明, 请参见第 2.2.2 节 : IAP I 2 C 读命令 第 2 步 : 在 Number of Bytes( 字节数 ) 字段输入要读取的字节数 第 3 步 : 按下 Master Write( 主器件写入 ) 按钮 第 4 步 : 按下 Master Read( 主器件读取 ) 按钮 14/21 文档 ID 16393 第 1 版
向目标器件发送 IAP 命令 图 16. 使用 Aardvark I 2 C 接口的读命令 3 OPC_READ ADD_HIGH1 ADD_HIGH0 ADD_LOW1 ADD_LOW0 NUMBR_H NUMBR_L 1 Flash 2 4 ai17393 此例中, 读命令从 Flash 地址 0x0800 1000 开始读取 16 个字节 下图显示读命令事务的结果 图 17. I 2 C 读命令事务 写命令 以下步骤介绍如何向用户 Flash 写入数据 : 第 1 步 : 输入写命令的字节序列 有关此序列的说明, 请参见第 2.2.3 节 : IAP I 2 C 写命令 第 2 步 : 按下 Master Write( 主器件写入 ) 按钮 文档 ID 16393 第 1 版 15/21 20
向目标器件发送 IAP 命令 图 18. 使用 Aardvark I 2 C 接口的写命令 2 OPC_WREN ADD_HIGH1 ADD_HIGH0 ADD_LOW1 ADD_LOW0 NUMBR_H NUMBR_L DUM_BYTE 1 Flash ai17395 此例中, 写命令从地址 0x0800 1000 开始向 Flash 写入 16 个字节 图 19 显示写命令事务结果 图 19. I 2 C 写命令事务 其它 IAP 命令 ( 擦除页 擦除整个用户存储空间和转到用户应用程序 ) 以相同的方式执行 3.1.2 Aardvark I 2 C 批处理模式 如下图所示, 使用批处理模式配置 Aardvark I 2 C 主机适配器 图 20. 使用批处理模式的 Aardvark I 2 C 配置 必须将此配置插入到所有 I 2 C 脚本命令的 <head> 中 16/21 文档 ID 16393 第 1 版
向目标器件发送 IAP 命令 读命令 下图显示读命令示例, 其中从 Flash 地址 0x0800 1000 开始读取 4096 个字节 图 21. 批处理脚本中的 IAP I 2 C 读命令 写命令 下图显示写命令示例, 其中从地址 0x0800 1000 开始向 Flash 写入 16 个字节 图 22. 批处理脚本中的 IAP I 2 C 写命令 其它 IAP 命令 ( 擦除页 擦除整个用户存储空间和转到用户应用程序 ) 的批处理脚本以相同的方式编写 3.2 使用另一用作桥接器的 STM32 器件发送 IAP 命令 3.2.1 原理 对器件固件升级 (DFU) 项目进行扩展, 以支持 I 2 C 模块 DFU 过程与所有 IAP 过程类似, 所以如果是 DFU 项目, 无需升级桥接器件的内部 Flash, 而是通过 I2C 外设传送命令的方式来升级目标器件 有关器件固件升级 (DFU) 的详细信息, 请参见专门的用户手册 UM0424, 该手册可从 www.st.com 下载 文档 ID 16393 第 1 版 17/21 20
向目标器件发送 IAP 命令 3.2.2 硬件介绍 图 23 显示了 STM32 桥接器件与 STM32 目标器件之间的硬件连接 该桥接器通过 USB 连接到 PC 图 23. PC STM32 桥接器与 I 2 C 目标器件之间的硬件连接 3.2.3 固件介绍 本节并非为了介绍有关器件固件升级的详细信息 ( 若为此目的, 请参见用户手册 UM0424), 而是为了突出为实现 USB-I 2 C 桥接器而做的扩展与更改 1. DFU 模式的进入机制 : MCU 复位后, 可直接进入桥接器 STM32F10x 的 DFU 模式 2. DFU 固件架构 : 忽略 Flash 接口层 ( 内部 SPI 和 NOR) 并添加了新接口层 :I 2 C Flash 接口层 I 2 C Flash 接口层的地址为 0x000 1000 图 24 显示了 USB-I 2 C 桥接器所采用的新 DFU 固件架构 图 24. 修改后的 DFU 固件架构 18/21 文档 ID 16393 第 1 版
IAP 时序 4 IAP 时序 此节介绍将文件编程到 STM32 内部 Flash 所需的时间 表 1. IAP 时序 设置 通过 I 2 C 执行 IAP 通信协议设置 400 khz,7 位寻址模式 (1) 下载时间 (508 KB) 358 s 下载时间 (1) (124 KB) 105 s 速度 (bps) 11980 1. 下载时间 = 擦除时间 + 编程时间 + 验证时间 文档 ID 16393 第 1 版 19/21 20
版本历史 5 版本历史 表 2. 文档版本历史 日期版本变更 2010 年 07 月 12 日 1 初始版本 20/21 文档 ID 16393 第 1 版
请仔细阅读 : 中文翻译仅为方便阅读之目的 该翻译也许不是对本文档最新版本的翻译, 如有任何不同, 以最新版本的英文原版文档为准 本文档中信息的提供仅与 ST 产品有关 意法半导体公司及其子公司 ( ST ) 保留随时对本文档及本文所述产品与服务进行变更 更正 修改或改进的权利, 恕不另行通知 所有 ST 产品均根据 ST 的销售条款出售 买方自行负责对本文所述 ST 产品和服务的选择和使用,ST 概不承担与选择或使用本文所述 ST 产品和服务相关的任何责任 无论之前是否有过任何形式的表示, 本文档不以任何方式对任何知识产权进行任何明示或默示的授权或许可 如果本文档任何部分涉及任何第三方产品或服务, 不应被视为 ST 授权使用此类第三方产品或服务, 或许可其中的任何知识产权, 或者被视为涉及以任何方式使用任何此类第三方产品或服务或其中任何知识产权的保证 除非在 ST 的销售条款中另有说明, 否则,ST 对 ST 产品的使用和 / 或销售不做任何明示或默示的保证, 包括但不限于有关适销性 适合特定用途 ( 及其依据任何司法管辖区的法律的对应情况 ), 或侵犯任何专利 版权或其他知识产权的默示保证 意法半导体的产品不得应用于武器 此外, 意法半导体产品也不是为下列用途而设计并不得应用于下列用途 :(A) 对安全性有特别要求的应用, 例如, 生命支持 主动植入设备或对产品功能安全有要求的系统 ;(B) 航空应用 ;(C) 汽车应用或汽车环境, 且 / 或 (D) 航天应用或航天环境 如果意法半导体产品不是为前述应用设计的, 而采购商擅自将其用于前述应用, 即使采购商向意法半导体发出了书面通知, 采购商仍将独自承担因此而导致的任何风险, 意法半导体的产品设计规格明确指定的汽车 汽车安全或医疗工业领域专用产品除外 根据相关政府主管部门的规定,ESCC QML 或 JAN 正式认证产品适用于航天应用 经销的 ST 产品如有不同于本文档中提出的声明和 / 或技术特点的规定, 将立即导致 ST 针对本文所述 ST 产品或服务授予的任何保证失效, 并且不应以任何形式造成或扩大 ST 的任何责任 ST 和 ST 徽标是 ST 在各个国家或地区的商标或注册商标 本文档中的信息取代之前提供的所有信息 ST 徽标是意法半导体公司的注册商标 其他所有名称是其各自所有者的财产 2014 STMicroelectronics 保留所有权利 意法半导体集团公司澳大利亚 - 比利时 - 巴西 - 加拿大 - 中国 - 捷克共和国 - 芬兰 - 法国 - 德国 - 中国香港 - 印度 - 以色列 - 意大利 - 日本 - 马来西亚 - 马耳他 - 摩洛哥 菲律宾 新加坡 - 西班牙 - 瑞典 - 瑞士 - 英国 - 美国 www.st.com 文档 ID 16393 第 1 版 21/21 21