利用Kinetis微控制器的Flash存储器交换功能实现稳健的在线固件更新

Similar documents
Freescale Semiconductor, Inc. Document Number: AN4872 应用笔记 Rev. 0, 03/2014 使用 KE06 上的四线式 I 2 C 接口 作者 :Ben Wang 1 简介 本应用笔记将描述使用 Kinetis E 系列 KE06 上的四线式

KS22 LIN Demo 用户手册

手册 doc

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD

Autodesk Product Design Suite Standard 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品

MCUXpresso配置工具的快速入门指南

i.MX 6SoloX产品使用寿命估算

NXP Powerpoint template confidential 16:9 Widescreen

Freescale MQX低功耗管理

NXP Powerpoint template confidential 16:9 Widescreen

EEPROM Emulation Driver for the Kinetis E Series Microcontrollers Application Note

ControlSafe TM ControlSafe ControlSafe CSC CPU ControlSafe CPU CPU CPU CPU CPU I/O I/O I/O I/O I/O I/O CPU CPU CSC CPU CSC CSC /ControlSafe ControlSaf

AN4767.fm

在Kinetis上使用DMA进行脉冲计数

MCUXpresso 配置工具安装用户指南

NXP Powerpoint template confidential 16:9 Widescreen


NXP Powerpoint template confidential 16:9 Widescreen

NXP Powerpoint template confidential 16:9 Widescreen

Microsoft Word - Atmel-45136A-Pick-Best-Microcontroller-Strom-Eiland-Flodell_Article_CS


一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

EK-STM32F

NXP Powerpoint template confidential 16:9 Widescreen

Microsoft Word - AVR32 UC3 isp下载.doc

Moto Z

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

燃烧器电子控制系统 目录 2

Xear 3D USB CH-IN-2 SPKs 2 6 :

Microsoft PowerPoint - M241 firmware flashing guide pptx

目 录

Kinetis KL1x – 通用超低功耗MCU

untitled

Microsoft Word - SAM-BA.doc

NXP Powerpoint template confidential 16:9 Widescreen

Ch03_嵌入式作業系統建置_01

附件1:

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

NXP Powerpoint template confidential 16:9 Widescreen

Microsoft Word - AN3521_ColdFire MCF521x 微控制器的Flash模块的使用.doc

NXP Powerpoint template confidential 16:9 Widescreen

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

Freescale Semiconductor Document Number: AN4985 应用笔记 Rev. 0,09/2014 使用 Kinetis K22F 和 KV31F MCU 的高速运行模式 本应用笔记针对最新一代 Kinetis K22F 和 KV31F 系列微控制器撰写, 旨在解

Microsoft Word - install_manual-V _CN.docx

untitled

NXP Powerpoint template confidential 16:9 Widescreen


SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input HR7PPSC HR7PPSD SOP SOP6 +input input HR7PERB SSOP0 7

NXP Powerpoint template confidential 16:9 Widescreen

MEGAWIN

NXP Powerpoint template confidential 16:9 Widescreen

2 控 制 面 板 控 制 面 板 控 制 面 板 显 示 打 印 机 的 工 作 状 态, 并 控 制 打 印 机 的 基 本 操 作 图 2 ZT230 控 制 面 板 图 3 ZT220 控 制 面 板

Andes Technology PPT Temp

NXP Powerpoint template confidential 16:9 Widescreen

册子0906

NXP Powerpoint template confidential 16:9 Widescreen

NXP Powerpoint template confidential 16:9 Widescreen

NXP Powerpoint template confidential 16:9 Widescreen

DataNet_Solution2.ai

使用FlexIO模块模拟I2S总线主机

F515_CS_Book.book

FPGAs in Next Generation Wireless Networks WPChinese

Microsoft PowerPoint - STM32 tools Oct-2007.ppt

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12

Microsoft Word - Competition?Rules?比赛细则 ren

MICROSmart FC6A More Power. More Performance. More Connectivity. I/O 2, ns 800KB100,000 BACnet/IP PID I/O I/O 2,060 I/O CPU MicroP

ICD ICD ICD ICD ICD

Chapter #

《將進酒》

河 南 蓝 皮 书 文 化 (2008) 网 络 文 学 主 要 是 指 在 网 上 原 创 的 文 学 作 品 作 为 网 络 文 化 的 主 力 部 分, 网 络 文 学 的 发 展 在 近 年 来 势 不 可 挡 作 为 凭 借 新 兴 媒 介 兴 起 的 文 学, 网 络 文 学 与 传 统

21 flash

NXP Powerpoint template confidential 16:9 Widescreen

NXP Powerpoint template confidential 16:9 Widescreen

Arduino 1-1 Arduino 1-2 Arduino 1-3 Arduino IDE

NXP Powerpoint template confidential 16:9 Widescreen

附件四:

Kinetis K和L系列MCU的生产用Flash编程最佳做法

Application Note Transient Voltage Suppressors (TVS) for 表 1 VISHAY 的 SM6T 系列的电特性 25 C 型号 击穿电压 器件标识码 V BR AT I T I T 测试电流 (ma) 关态电压 V RM 漏电流 I RM AT V

CHCN_8-14_K.indd

目 录 1. 简介 概览 CM 仿真器特性 CM 仿真器外观 入门指南 CM 仿真器虚拟端口功能 安装 CM 仿真器 USB CDC 驱动软件 测试 CM 仿真器虚拟端

NEXT SDT2.51 C:\ARM251 SDT2.51 ARM SDT 2.51 ARM PROJECT MANAGER SDT 2

FlexIO 外设模块的主要特性 2 FlexIO 外设模块的主要特性 FlexIO 是指灵活的输入和输出外设 具有多种功能的高度可配置模块 允许模拟标准通信接口 支持多种协议和外设, 包括 : UART I 2 C SPI I 2 S LCD RGB CMT( 载波调制发送器 ) PWM/ 波形生

<4D F736F F D20C7B6C8EBCABDCAB5D1E9CAD2B7BDB0B82E646F63>

幻灯片 1

加 快 审 阅 和 标 记 工 作 流 程 Acrobat X 通 过 提 供 一 种 可 靠 的 文 件 格 式 扩 展 了 Office 和 SharePoint 的 协 作 服 务, 可 以 使 用 大 多 数 桌 面 应 用 程 序 生 成 这 种 格 式 并 使 用 Acrobat 或 免

B _02_ch.indd

USB解决方案.ppt

untitled

USB大容量存储设备主机引导加载程序

,,, PCB, AR M VxWorks DSP,,,,,,,,,,, (CIP) /,,.:,2005 ISBN TP36 CIP (2005) : ( 10 ) : : (010 ) : (010)

01

ARM JTAG实时仿真器安装使用指南

Logitech Wireless Combo MK45 English

Xcode 4.6 Dmg File. arts related Airway array tiene saison Site mentored

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc

NXP Powerpoint template confidential 16:9 Widescreen

PowerPoint 演示文稿

基于中断和阻塞机制的MQX I2C驱动程序

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

Transcription:

Freescale Semiconductor Document Number: AN4533 应用笔记 Rev 0, 06/2012 利用 Kinetis 微控制器的 Flash 存储器交换功能实现稳健的在线固件更新 作者 : Maclain Lobdell 汽车 工业化与跨市场解决方案小组 1 简介 Kinetis 微控制器上的程序 Flash 交换功能为远程在线系统软件更新提供了一种稳健途径 本应用笔记将描述如何利用该交换功能 本文将讨论常见问题并提供一个应用程序示例 本应用笔记面向应用 Flash 交换功能的应用程序的系统开发人员 本应用笔记会提及在线通信的方法, 但这不是本文讨论的重点 关于 Flash 交换的更多重要信息, 请参见本应用笔记中所讨论具体器件的参考手册 内容 1 简介...... 1 2 应用要求... 1 3 程序 Flash 交换概述...3 4 交换步骤...6 5 交换详情...8 6 多任务应用程序概述...11 7 软件示例...11 8 结论...... 18 9 参考资料...18 2 应用要求 许多应用都需要可靠的在线系统更新方法 这就要求具备一种机制, 以便远程更新系统软件 / 固件来修复漏洞并进行重要软件升级 重要的应用 ( 如电气计量 ) 在更新时要求极短的系统停机时间, 必须能耐受通信错误, 并且不应存在产生导致系统停止工作的问题的风险 更新过程必须能够适应各种困难环境 许多应用的电源都不够可靠, 系统更新过程必须能在可能断电的情况下继续工作 远程更新系统软件需要通过通信接口 ( 例如 :Wi-Fi Zigbee UART SPI I2C USB 和以太网等 ) 传输新代码 在系统上执行的软件上传程序必须能将代码接收并编程到本地存储器中 通常, 出厂编程是通过 JTAG 或后台调试模式 (BDM) 等本地调试连接完成的, 但这些连接无 2012 Freescale Semiconductor, Inc.

应用要求 法远程实现 从经济角度考虑, 派技术人员到系统所在地点进行现场重编程也是不可行的做法 因此, 可靠的在线更新方法必不可少 2.1 远程固件更新系统 2.1.1 传统的远程更新系统 传统的远程固件更新系统依靠引导加载应用, 其在系统复位时执行, 然后选择要运行的应用程序或执行应用程序更新程序 远程服务器将新固件传送到系统, 并编程到其本地存储器中 大多数情况下, 当系统更新开始后, 主应用会暂停运行 随后, 主应用代码将被擦除并重新编程 主应用仅有一个副本, 因此如果在接收并编程新代码时出现未检测到的错误, 系统可能无法正常工作, 除非下载新应用, 否则可能停止运行 最坏情况是系统无响应, 而且无法强制进入用于系统更新的引导加载模式 优势 易于实现 无需保存应用的备份副本, 因此所需 Flash 存储器空间更少 劣势 在更新过程中必须停止主应用 无法恢复到已知可以正常工作的应用 在更新过程中可能无法承受断电 2.1.2 具有代码备份的系统 在系统的存储器中可以设置完整的软件备份 如果检测到严重错误, 系统可以恢复到主应用任务的备份副本 可使用引导加载程序选择要执行的主应用的正确副本 优势 在多任务处理操作系统中, 当后台任务在更新应用的新副本时, 主应用任务可以继续执行 代码的备份副本 可以恢复到已知可以正常工作的应用程序 劣势 需要额外的存储器空间来存放备份副本 需要引导加载程序 ( 用于选择要运行的应用的启动程序 ) 2.1.3 使用 Flash 存储器交换的系统 在具有两个或更多支持交换的内部 Flash 存储块的器件中, 每个 Flash 存储块的存储器基地址可进行交换 因此, 每个 Flash 存储块的地址位置都会在器件的逻辑存储映射中进行交换 复位后, 内置 Flash 交换系统会通过逻辑存储器映射中的 Flash 存储块位置来选择要执行的软件 这使得代码备份系统的编程更为容易 您可以在一个存储块中执行, 而同时擦除 / 编程另一个存储块 在 Kinetis 器件上,Flash 交换系统监视 / 控制应用程序新旧切换的所有步骤 ; 这进一步确保了系统运行的可靠性, 以防在这些过程中发生断电情况 优势 易于编程 应用总是在存储器映射的低地址存储块中执行 可以承受断电 无需引导加载程序 主应用启动无延迟 2 Freescale Semiconductor, Inc.

适用于多任务操作系统 最小化应用停机时间 在多任务处理系统中, 当后台任务在更新应用的新副本时, 主应用可以继续执行 代码的备份副本 可以恢复到已知可以正常工作的应用程序 劣势 需要额外的 Flash 存储器空间来存放备份副本 程序 Flash 交换概述 3 程序 Flash 交换概述 Kinetis 器件提供用于程序和数据存储的内部 Flash 存储器 对于具有两个或更多程序 Flash(p-flash) 存储块并且具有 p-flash 交换特性的器件, 系统编程人员可对 p-flash 空间的逻辑存储器映射进行配置, 这样两个物理 p-flash 存储块中的任一个均可存在于相对地址 0x0000 处 Flash 交换特性并非强制 由于 Kinetis 器件的默认向量表位于地址 0x0000 处, 因此这一点尤为有用 当处理器退出复位时, 它从地址 0x0000 处取得初始堆栈指针 (SP), 并从地址 0x0004 处取得程序计数器 (PC) 因此, 交换两个 p-flash 存储块的基地址使得系统可以从 p-flash 存储块 0 启动, 也可以从 p-flash 存储块 1 启动, 因为两个存储块均可定位在基地址 0x0000 处 交换系统由交换控制命令控制, 这与 Kinetis 器件上的其他 Flash 命令相似 必须首先初始化交换系统, 之后才能执行交换 3.1 关于 p-flash 交换的重要事实 当前位于相对地址 0x0000 的存储块称为有效存储块 也称为低地址存储块 其他存储块为无效存储块或高地址存储块 典型的用法是系统在一个存储块 ( 有效存储块 ) 中执行, 同时对另一个存储块 ( 无效存储块 ) 进行重新编程 在大多数应用中, 系统应用代码限制在一个 Flash 存储块 ( 有效存储块 ) 中 在重新编程无效存储块之后, 且执行就绪时, 用户可以完成交换过程以交换存储块 此时, 无效存储块变为有效存储块, 反之亦然 在系统复位后, 代码从有效存储块 ( 位于地址 0x0000 处的存储块 ) 处开始执行 在存储块之间来回交换的过程是相同的 3.1.1 Kinetis(100 MHz) 交换的详细说明 Kinetis 100 MHz 器件具有两个 p-flash 存储块, 支持两个存储块的交换 FTFL_FCNFG 寄存器的 SWAP 位指示了位于地址 0x0000 处的 p-flash 存储块 在复位过程中,Flash 模块中的交换系统会将 SWAP 标志的状态置位 SIM_FCFG2 寄存器中的 SWAPPFLSH 位指示交换系统是否已完成初始化, 即可以进行交换 Freescale Semiconductor, Inc. 3

程序 Flash 交换概述 0 KB 0 KB 存储块 0 存储块 1 256 KB 256 KB 存储块 1 存储块 0 512 KB P-Flash 地址 交换 图 1. P-flash 交换 (Kinetis 100 MHz) 512 KB 3.1.2 Kinetis(120/150 MHz) 交换的详细说明 Kinetis 120/150 MHz 器件具有两个支持交换的 Flash 配置选项 下面将分别讨论这两个选项 FTFL_FCNFG 寄存器的 SWAP 位指示了位于地址 0x0000 处的 p-flash 存储块 / 半存储块 在复位过程中,Flash 模块中的交换系统会将 SWAP 标志的状态置位 3.1.2.1 512 KB p-flash 选项具有两个 p-flash 存储块 (512 KB p-flash) 的 Kinetis 120/150 MHz 器件, 支持两个 p-flash 存储块之间的交换 这与 100 MHz Kinetis 器件 (512 KB p-flash) 相似 0 KB 0 KB 存储块 0 存储块 1 256 KB 256 KB 存储块 1 存储块 0 512 KB P-Flash 地址 交换 图 2. P-flash 交换 (Kinetis 120/150 MHz,512K p-flash) 512 KB 3.1.2.2 1 MB p-flash 选项具有四个 p-flash 存储块 (1MB) 的 Kinetis 120/150 MHz 器件, 支持两个双存储块 (p-flash 存储块 0-1 和存储块 2-3) 之间的交换 4 Freescale Semiconductor, Inc.

程序 Flash 交换概述 0 KB 0 KB 存储块 0 存储块 2 存储块 1 存储块 3 512 KB 512 KB 存储块 2 存储块 0 1024 KB 存储块 3 P-Flash 地址 交换 存储块 1 图 3. P-flash 交换 (Kinetis 120/150 MHz,1M p-flash) 1024 KB 3.2 交换命令概述 共有四种交换命令 1. 设置交换指示器地址 ( 初始化交换系统 ) 2. 在更新 ( 准备 ) 模式中设置交换 3. 在完成模式中设置交换 4. 报告交换状态 设置交换指示器地址命令 该命令用于初始化交换系统 当发出该命令时, 您必须提供用于 Flash 交换指示器的地址 ( 将在后续讨论 ) 该命令设置了交换系统所使用的交换使能字和交换指示器地址 只需要在第一次执行交换时使用该步骤 设置交换为更新状态 该命令对 Flash 交换指示器值进行编程, 指示系统计划更新高地址存储块中的内容 此外, 该命令对无效存储块中存放 Flash 交换指示器的扇区取消保护, 使其可以进行擦除 在更新 ( 或更新 - 擦除 ) 状态期间擦除该扇区是交换过程的必须步骤 设置交换为完成状态 该命令对 Flash 交换指示器值进行编程, 告知系统对无效存储块的重新编程已完成, 已准备好交换 Flash 存储块 在无效 ( 高地址 ) 存储块中的内容被擦除 / 重新编程后需要执行该命令, 从而更新系统软件 这包括擦除无效存储块中包含 Flash 交换指示器的扇区 报告交换状态 该命令用于检查交换系统的状态 其返回当前的交换状态 当前的交换存储块状态 ( 当前位于地址 0x0000 的存储块 ) 下一个交换存储块状态 ( 系统复位后将位于 0x0000 的存储块 ), 以及是否发生错误 建议将该命令置于在系统复位时执行的系统初始化代码中 这将有助于系统软件识别交换系统中是否存在因交换命令执行过程中断电而导致的错误 更多详情, 请参见错误处理 Freescale Semiconductor, Inc. 5

交换步骤 3.2.1 从内部 SRAM 执行交换命令 交换命令必须从 SRAM 程序中执行, 以避免发生读取时写入冲突 如果对正在执行代码的 Flash 存储块中进行擦除或编程操作, 则可能发生读取时写入冲突 由于 Flash 交换系统会对两个 Flash 存储块的 Flash 交换指示器进行编程, 因而当执行交换命令时, 有必要保证未在 Flash 中执行代码 更多详细信息, 请参见本应用笔记随附的示例软件 3.2.2 传递给所有交换命令的地址 所有交换命令都需要由初始化命令设置的有效存储块的交换指示器地址 各交换命令必须使用相同的地址 无论您是从存储块 0 交换到 1, 或是从存储块 1 交换到 0 更多详情, 请参见 Flash 交换指示器 4 交换步骤 4.1 交换过程 交换 Flash 存储块的过程很简单 在存储块之间来回交换的过程是相同的 4.1.1 首次交换 1. 通过执行初始化命令对系统进行首次初始化 只需要在第一次执行交换时使用该步骤 在第一次初始化时, 交换系统直接进入到更新 - 擦除状态 2. 擦除无效 ( 高地址 ) 存储块 3. 将新软件重新编程到无效 ( 高地址 ) 存储块中 4. 执行命令将系统设置为完成状态 交换在复位 ( 包括软件复位 ) 后生效 5. 复位后, 存储块进行交换, 交换系统变为就绪状态 4.1.2 其他交换的流程在首次交换完成后, 交换过程从就绪状态开始 1. 执行命令将系统设置为更新状态 2. 擦除无效 ( 高地址 ) 存储块 一旦擦除完成, 系统将自动进入更新 - 擦除状态 3. 在无效存储块中重新编程软件 4. 执行命令将系统设置为完成状态 5. 复位微控制器 ( 任意复位, 包括软件复位 ) 6. 复位后, 存储块进行交换, 交换系统变为就绪状态 4.2 擦除无效的高地址存储块 您可以使用存储块擦除或扇区擦除 只是需要擦除无效存储块中的 Flash 交换指示器扇区 然而, 要在无效存储块中更新软件, 就必须先进行擦除 一旦擦除完成, 系统将自动进入更新 - 擦除状态 6 Freescale Semiconductor, Inc.

可以在存储块之间交换而不擦除 / 重新编程整个无效存储块 您只需擦除具有 Flash 交换指示器 ( 在更新状态下 ) 的扇区 这在交换回无效存储块中已知正常的应用程序时很有帮助 更多详情, 请参见 Flash 交换指示器 交换步骤 4.3 步骤的顺序 飞思卡尔建议在交换系统处于更新 - 擦除状态及系统进入完成状态之前, 将新代码上传到无效 ( 高地址 ) 存储块中 这样, 如果在过程中发生断电, 交换系统将知道断电是在更新途中发生, 应当恢复到先前的 已知正常的交换状态 执行 Flash 交换命令的顺序也很重要 命令必须按照顺序执行, 否则会发生错误 详情请参见章节错误处理 4.4 典型交换流程小结 ( 首次交换后 ) 1. 检查状态 2. 就绪 -> 更新 3. 擦除高地址存储块 ( 或仅擦除无效的高地址存储块中 Flash 交换指示器所在的扇区 ) 4. 更新 -> 更新擦除 ( 自动 ) 5. 重新编程高地址存储块 检查高地址存储块中的内容 ( 编程时跳过交换指示器位置 ) 6. 交换更新 - 擦除 -> 完成 7. 复位 8. 完成 -> 就绪 ( 自动 ) 就绪 2 更新擦除 复位 完成 4 更新擦除 擦除 未初始化 1 更新擦除 更新 4 2 完成 复位 就绪 存储块 0 位于 0x0000 存储块 1 位于 0x0000 图 4. Flash 交换 (Kinetis 120/150 MHz,1M p-flash) Freescale Semiconductor, Inc. 7

交换详情 5 交换详情 5.1 Flash 交换指示器 Flash 交换指示器 ( 指示器 0 和指示器 1) 位于 p-flash 存储器空间中的两个不同位置 一个位于整个 p-flash 的下半部分, 另一个位于上半部分 这两个 Flash 交换指示器所在地址相对于每一半 p-flash 的基地址的偏移量相同 系统编程人员在初始化 Flash 交换系统时会指定 Flash 交换指示器的位置 Flash 交换指示器的用途是什么? 交换系统使用 Flash 交换指示器来存放系统使用的代码, 以确保在交换运行过程中出现潜在的断电情况时也能保持可靠工作 在交换过程的每个步骤中, 交换系统采用指定的代码对 Flash 交换指示器进行编程 这为系统提供了一种跟踪机制, 从而可以在系统复位时可靠地确定交换状态 复位时, 交换系统会询问交换指示器来确定交换状态, 以及交换过程是否中断 您只需要在交换过程的更新状态期间擦除交换指示器即可 Flash 交换指示器有多大? 每个 p-flash 存储块有 2 个字节 哪些内容应编程到 Flash 交换指示器中? 系统编程人员无需编程 Flash 交换指示器或详查其中的内容,Flash 交换系统会自动进行相应的处理 不过, 参考手册中的交换状态报告映射表提供了编入交换指示器的代码的详细信息 该表对交换过程中每个步骤的代码以及可能检测到的错误 ( 交换期间可能发生的断电 ) 进行了说明 Flash 交换指示器应放置在何处? 系统编程人员在初始化 Flash 交换系统时会指定 Flash 交换指示器的位置 可以使用除包含向量和 Flash 配置字段的头两个扇区外的任意 Flash 扇区 根据具体器件, 交换指示器必须为 32 位 64 位或 128 位对齐 例如, 器件包含两个 256 KB 的 p-flash 存储块 ( 存储块 0:0x00000-0x3FFFF 和存储块 1:0x40000-0x7FFFF) 且扇区大小为 2 KB(0x800) 如果交换指示器放置在 Flash 存储块的最后一个扇区,Flash 交换系统将指定 0x3F800 为存储块 0 的交换指示器位置, 指定 0x7F800 为存储块 1 的交换指示器位置 在本示例中, 提供给交换系统的地址只有 0x3F800 注建议将 Flash 交换指示器置于 p-flash 存储块的最后一个扇区中 这能为应用代码提供最大的连续 Flash 区域 Flash 交换指示器的地址 ( 偏移量 ) 存储在何处? Flash 交换指示器的地址 ( 相对于各存储块基地址的偏移地址 ) 存储在称为程序 Flash 存储块 1 IFR 的 Flash 区域中 可以改变 Flash 交换指示器的位置吗? Flash 交换指示器的地址不能修改, 除非执行擦除所有存储块命令, 这会使交换系统返回未初始化状态 ( 在支持的器件上可用 ) 因此, 一定不要忘记在交换初始化期间提供给交换系统的地址 Flash 交换指示器的保护 设定完成后, 用户就不能再对 Flash 交换指示器的位置进行编程 此外, 也不能擦除有效存储块中包含 Flash 交换指示器的扇区 只有当交换系统处于更新或更新 - 擦除状态时, 才能擦除无效存储块中包含 Flash 交换指示器的扇区 不要在交换指示器上编程, 否则会导致错误 8 Freescale Semiconductor, Inc.

交换详情 交换状态未初始化就绪更新更新擦除完成 有效存储块 : 交换指示器扇区 是 否 否 否 否 可以擦除? 无效存储块 : 交换指示器扇区 是 否 是 是 否 图 5. 何时允许擦除 Flash 交换指示器扇区 交换状态未初始化就绪更新更新擦除完成 有效存储块 : 所有扇区 ( 交换指示器除外 ) 是 * 是 * 是 * 是 * 是 * 可以擦除? 无效存储块 : 所有扇区 ( 交换指示器除外 ) 是 是 是 是 是 图 6. 何时允许擦除除 Flash 交换指示器扇区以外的扇区 * 除 Flash 交换指示器扇区以外, 其他所有扇区都可以随时擦除 但是, 不能擦除正在执行的存储块 在极少数情况下如果需要擦除有效存储块, 可跳转到 RAM 中的子程序并从 RAM 执行 5.2 交换使能字段 ( 字 ) 交换使能字段也称为交换使能字, 同样存放在程序 Fhasl 存储块 1 IFR 中 在执行交换初始化命令时, 交换系统会对该位置进行编程 该位置的内容只是用于告诉交换系统交换已完成初始化, 并且已经指定了有效的 Flash 交换指示器地址 5.3 常见问题 交换为何如此复杂? 断电耐受性 在阅读交换文档后, 您可能会产生这样一个疑问 : 交换为何如此复杂? 答案就是断电耐受性 在不够稳健的系统中, 如果在关键时刻断电, 系统可能会崩溃 对于使用 Flash 存储器交换功能的系统, 如果在交换过程中断电, 内置系统可以检测到错误, 并可靠地确定上一个已知的有效 Flash 存储块配置 使用交换的系统是否仅限于在两个 Flash 存储块之一 ( 占总 Flash 存储器大小的一半 ) 中执行应用? 在大多数用例中, 系统应用将限制在一个 Flash 存储块 ( 有效存储块 ) 中执行 然而, 交换系统不会限制代码在无效存储块中执行 因此, 代码可以随时在任意一个存储块中执行 可以使用高级技术将应用大小扩展至大于 p-flash 一半的大小, 并且继续使用 Flash 交换功能 这可能会牺牲一些对于问题防护功能, 不过为代码提供了更大空间 此话题超出了本应用笔记的讨论范围 存放 Flash 交换指示器的扇区是否可用于存放数据 / 程序? Freescale Semiconductor, Inc. 9

交换详情 通常, 用户应指定一个未使用的 Flash 扇区来存放 Flash 交换指示器 然而, 交换系统不会干扰包含指示器的 Flash 扇区中的其他数据 因此, 该空间可用于存放程序或数据 该空间应相应地在链接器文件中指出 详情请参见重要注意事项 5.4 重要注意事项 始终编程向量表和 Flash 配置字段 在交换前, 您必须为无效的高地址存储块编程中断向量表和 Flash 配置字段 (FSEC 和 FOPT 等 ) 如果不这样做, 交换后新的有效存储块中的向量表和 Flash 配置将无法正确设置 这会导致不符合期望的配置, 并可能将器件加密锁死 项目链接器文件的注意事项 代码中没有需要特别注意的问题 只需链接代码, 通常就会填入低地址存储块 建议在链接器文件中为有效 ( 低地址 ) 的 Flash 交换指示器位置分配一个部分, 以避免应用企图改写 5.5 错误处理 有两种主要情况需要您检查错误 5.5.1 在复位后执行交换状态命令选项在复位后运行交换状态命令选项以报告交换状态, 用于检测以下可能的情况 1. 固件更新 / 交换期间可能发生了断电 : 交换状态未就绪 在固件更新过程中发生复位 如果系统在复位后处于更新或更新 - 擦除状态, 显然就表示出现了这种情况 除非正处于更新固件的过程中, 否则系统通常将为就绪状态 如果发生了这种情况, 则从当前交换状态开始继续交换过程 建议在无效存储块中擦除和重新编程固件, 以确保完全编程 2. 在交换命令期间可能发生了断电 : 错误标志置位 在固件更新过程中发生复位, 导致 Flash 交换指示器值损坏 在运行交换状态命令选项后, 该情况由 FSTAT 寄存器中的 MGSTAT0 错误标志报告 交换系统设计为对该情况完全耐受 然而, 需要清除 Flash 交换指示器 这可以通过运行一次交换流程完成 5.5.2 在执行交换命令后检查错误标志 针对交换控制命令错误处理表中列出的错误来检查 FSTAT 寄存器中的错误标志 ACCERR 和 MGSTAT0, 在器件参考手册中可以找到该表 不仅仅是交换命令, 建议在执行任何命令后都进行错误检测 10 Freescale Semiconductor, Inc.

多任务应用程序概述 6 多任务应用程序概述 在多任务操作系统中, 主任务可以继续运行, 而新固件可以通过独立的上传 / 编程任务进行加载 软件上传任务将交换系统设置为更新模式, 接收新应用代码 ( 通过通信接口 ), 将代码编程到无效高地址程序 Flash 存储块中, 然后设置交换系统完成交换 系统复位后交换 Flash 存储块, 启动新应用 这保证了超短的应用停机时间 只要新应用还具有上传 / 编程 / 交换任务, 就可以不断重复该过程 对应用的要求是大小小于程序 Flash 存储器的一半, 对软件的要求是具有一个可以接收 编程新应用并执行交换的任务 主应用任务 在新固件上传期间继续运行 上传任务 激活后, 上传任务执行以下内容 : 执行命令, 将交换系统置于更新状态 擦除要重新编程的高地址存储块扇区 接收新的应用代码 ( 通过 SCI 和 TCP/IP 等 ) 将新代码编程到高地址 Flash 存储块中 检查代码错误 执行命令, 将交换系统置于完成状态 执行软件复位 系统复位后,Flash 存储块被交换, 并且新应用启动 整个过程可以以几乎相同的步骤进行重复 7 软件示例 应用笔记提供的软件示例用于演示交换功能 该示例并非基于多任务操作系统 7.1 软件组件 7.1.1 Flash 驱动程序软件 示例采用针对 Kinetis 微控制器的 Flash 驱动程序软件 (C90TFS_FLASH_DRIVER) 驱动程序可以编译到嵌入式应用中, 添加 Flash 控制功能 示例采用版本 0.2.9(beta), 该版本更新了 Flash 交换支持 7.1.2 Kinetis 示例代码 本示例基于针对 K60 100 MHz 版本 (KINETIS512_SC) 的 Kinetis 示例代码 示例中同时提供了 IAR 和 CodeWarrior 工程 在工程中添加了 Flash 驱动程序 支持的集成开发环境 (IDE) IAR Embedded Workbench for ARM 版本 6.30 或更高版本 CodeWarrior for MCUs 版本 10.1 Freescale Semiconductor, Inc. 11

软件示例 7.2 硬件 Kinetis K60 100 MHz MCU 模块 (TWR-K60N512), 要求版本标记为 4N30D 或更高的 MCU 器件 参见以下附注 注需要 Kinetis 100 MHz Rev.1.4 或更新版本 标记在封装上的掩膜组编号为 4N30D 后续修订版可能标记为 5N30D 等 早于 Rev.1.4 的修订版可能不支持交换, 或者在交换初始化后禁止 擦除所有存储块 命令 因此, 对于早期修订版, 依靠 擦除所有存储块 命令来预擦除 Flash 的部分调试器可能无法重新下载到 Flash 此外, 对于早期器件, 可能无法使交换系统回到未初始化状态 7.3 软件分析 7.3.1 Flash 驱动程序交换函数 Flash 驱动程序提供两个函数 7.3.1.1 PFlashGetSwapStatus 位于文件 PFlashGetSwapStatus.c 中 该函数返回交换状态详情, 并检查在交换状态确定过程中是否检测到任何错误 7.3.1.2 PFlashSwap 位于文件 PFlashSwap.c 中 该函数执行交换控制命令 7.3.2 回调函数 调用方应用可以向 PFlashSwap 函数传递回调函数 PFlashSwap 驱动程序函数在每次进入下一个交换状态后会调用该回调函数 当 PFlashSwap 函数调用回调函数时, 会将交换状态传递回调用应用程序 利用该信息, 应用可以决定是否继续进入下一个交换状态 此外, 这为执行固件更新提供了一个绝佳途径 当交换驱动程序向回调函数报告交换系统处于更新状态时, 回调函数会下载新的系统软件 ( 固件 ), 并根据需要擦除 / 重新编程高地址存储块 7.4 运行演示程序 注以下说明假设已安装了 IDE 和终端应用程序并具备相关基本知识 详细信息请参见 TWR-K60N512 快速入门指南, 可从 http://www.freescale.com 获取 7.4.1 说明 1. 下载并安装演示软件 选择一个目录安装 将该目录称为 < 安装目录 > 2. 在您的计算机与演示板之间插入 USB 线缆, 用于供电和连接调试器 12 Freescale Semiconductor, Inc.

3. 打开 快速入门指南 中所述的 PE 终端实用程序 确保波特率为 115200 无校验且为 8 位数据位 单击 打开串行端口 4. 打开 IAR 或 CodeWarrior 5. 打开交换演示工程 IAR 打开工作区 < 安装目录 >\build\iar\swap_demo\swap_demo.eww CodeWarrior 设置工作区为 < 安装目录 >\ 导入文件夹 < 安装目录 >\build\cw\swap_demo\ 中的工程 6. 选择目标配置 IAR 选择 FLASH_512KB_PFLASH 配置 CodeWarrior 选择 MK60N512VMD100_INTERNAL_FLASH 配置 7. 编译工程 8. 下载与调试 IAR 单击 下载与调试 按钮 CodeWarrior 打开调试配置 选择 k60-swap_demo_mk60n512vmd100_internal_flash_pne_osjtag 软件示例 图 7. 调试配置 点击调试 9. 在 PE 终端实用程序中, 输出将显示在屏幕上 首先, 代码会检查哪个存储块位于地址 0x0000 然后, 代码执行交换命令来检查交换系统状态 在您第一次执行该代码时, 交换系统将报告 未初始化 Freescale Semiconductor, Inc. 13

软件示例 图 8. 终端实用程序输出 : 首次交换之前 10. 代码执行命令行界面 输入 swap 开始交换演示 交换驱动程序将按顺序让交换系统执行每个交换状态, 并调用回调函数, 将交换状态报告给调用函数 11. 当交换系统位于更新状态时, 回调函数会模拟固件更新, 擦除并重新编程无效 ( 高地址 ) 存储块, 复制有效 ( 低地址 ) 存储块内容到无效 ( 高地址 ) 存储块中 注本示例将 Flash 交换指示器置于每个存储块的最后一个扇区中 不允许对 Flash 交换指示器编程, 因此当编程无效 ( 高地址 ) 存储块时应避免此区域 图 9. 终端实用程序输出 : 首次交换期间 12. 代码在 3 秒内执行软件复位, 以完成交换 14 Freescale Semiconductor, Inc.

软件示例 图 10. 终端实用程序输出 : 首次交换之后 13. 当复位发生时, 代码将再次启动 Flash 存储块至此交换完成 存储块 1 位于地址 0x0000 现在交换状态为就绪状态 再次输入 swap 命令, 交换回存储块 0 注如果软件复位发生时连接着调试器, 则调试器将暂停 恢复或断开调试器, 然后按下演示板上的复位按钮 7.4.2 设置远程系统 (CW 10.1) 第一次在 CodeWarrior 10.1 上运行此演示程序时, 可能需要设置远程系统 最新版本的 CodeWarrior 无需此操作 1. 打开 Debug Configurations ( 调试配置 ), 在 Remote System ( 远程系统 ) 下, 单击 New ( 新建 ) 2. 这将打开 New Connection ( 新连接 ) 窗口 在 CodeWarrior Bareboard Debugging (CodeWarrior 裸板调试 ) 下, 选择 Hardware or Simulator ( 硬件或仿真器 ) Freescale Semiconductor, Inc. 15

软件示例 3. 为 Connection name ( 连接名称 ) 输入一个名称 ( 如 K60_OSJTAG), 并选择 K60DN512Z 作为 System ( 系统 ) 类型 单击 Finish ( 完成 ) 16 Freescale Semiconductor, Inc.

软件示例 7.4.3 运行演示后的恢复连接问题 存在一个潜在问题, 在 Flash 交换演示执行后,CodeWarrior 无法擦除 / 重新编程器件 这与芯片版本无关 要解决该问题, 请使用 Flash File to Target 工具来擦除 Flash Flash File to Target 工具使用 擦除全部 命令, 这将擦除整个 Flash 并将交换系统清除为未初始化状态 1. 单击闪电图标旁的箭头, 打开 Flash File to Target 工具 2. 选择 Flash File to Target Freescale Semiconductor, Inc. 17

结论 3. 单击 Erase Device ( 擦除器件 ) 8 结论 程序 Flash 存储器交换是飞思卡尔 Kinetis 微控制器诸多极具吸引力的功能之一 对于需要极度可靠的固件更新机制, 以提供安全备份副本和最短应用停机时间的系统而言, 交换功能是一种理想之选 程序 Flash 交换简单易用, 能够降低软件复杂性 它非常适合多任务操作系统, 如飞思卡尔免费的 MQX RTOS 如需更多资源, 请参见本应用笔记提供的软件示例, 以及参考资料章节 9 参考资料 1. 可以通过 http://www.freescale.com/kinetis 获取 Kinetis 微控制器的喜相关文档 软件和工具 2. 用于 Kinetis 微控制器的 Flash 驱动程序软件 在 http://www.freescale.com 上搜索关键字 C90TFS_FLASH_DRIVER 3. Kinetis 示例代码 在 http://www.freescale.com 上搜索关键字 KINETIS512_SC 18 Freescale Semiconductor, Inc.

How to Reach Us: Home Page: freescale.com Web Support: freescale.com/support 本文档中的信息仅供系统和软件实施方使用 Freescale 产品 本文并未明示或者暗示授予利用本文档信息进行设计或者加工集成电路的版权许可 Freescale 保留对此处任何产品进行更改的权利, 恕不另行通知 Freescale 对其产品在任何特定用途方面的适用性不做任何担保 表示或保证, 也不承担因为应用程序或者使用产品或电路所产生的任何责任, 明确拒绝承担包括但不局限于后果性的或附带性的损害在内的所有责任 Freescale 的数据表和 / 或规格中所提供的 典型 参数在不同应用中可能并且确实不同, 实际性能会随时间而有所变化 所有运行参数, 包括 经典值 在内, 必须经由客户的技术专家对每个客户的应用程序进行验证 Freescale 未转让与其专利权及其他权利相关的许可 Freescale 销售产品时遵循以下网址中包含的标准销售条款和条件 :freescale.com/ SalesTermsandConditions. Freescale, the Freescale logo, AltiVec, C-5, CodeTest, CodeWarrior, ColdFire, ColdFire+, C-Ware, Energy Efficient Solutions logo, Kinetis, mobilegt, PowerQUICC, Processor Expert, QorIQ, Qorivva, StarCore, Symphony, and VortiQa are trademarks of Freescale Semiconductor, Inc., Reg. U.S. Pat. & Tm. Off. Airfast, BeeKit, BeeStack, CoreNet, Flexis, Layerscape, MagniV, MXC, Platform in a Package, QorIQ Qonverge, QUICC Engine, Ready Play, SafeAssure, SafeAssure logo, SMARTMOS, Tower, TurboLink, Vybrid, and Xtrinsic are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. 2012 Freescale Semiconductor, Inc. 2012 飞思卡尔半导体有限公司 Document Number AN4533 Revision 0, 06/2012