Top Banner
1 MPLAB ® Harmony 3 之基础篇( 16 -- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介 Harmony 3 提供了 Bootloader 的库, Bootloader 可用于在没有烧录器或者调试器 的情况下升级固件。 Bootloader Flash 中的一小段程序,主要实现功能如下: application 升级(通过 UART 接收 PC 传输过来的固件并写入 Flash 中) 启动 application 本文档主要介绍基于 SAME70 UART bootloader 的例子,包含以下内容: 下载 bootloader 烧录 bootloader Bootloader 烧录 application Bootloader 运行 application Application 的配置 测试步骤主要有下载 Harmony 3 bootloader 包,烧录 Bootloader 程序到 SAME70利用 Bootloader 烧录 application,以及 bootloader 加载 application 运行。
18

MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

Jan 26, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

1

MPLAB® Harmony 3 之基础篇(16) -- 如何使用 UART

bootloader

Microchip Technology Inc. MCU32 产品部

一、 简介

Harmony 3 提供了 Bootloader 的库,Bootloader 可用于在没有烧录器或者调试器

的情况下升级固件。

Bootloader是 Flash中的一小段程序,主要实现功能如下:

application升级(通过 UART接收 PC传输过来的固件并写入 Flash中)

启动 application

本文档主要介绍基于 SAME70的 UART bootloader的例子,包含以下内容:

下载 bootloader库

烧录 bootloader

Bootloader烧录 application

Bootloader运行 application

Application的配置

测试步骤主要有下载Harmony 3的 bootloader包,烧录 Bootloader程序到 SAME70,利用 Bootloader 烧录 application,以及 bootloader 加载 application 运行。

Page 2: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

2

二、 硬件工具和软件平台

硬件:SAM E70 Xplained Ultra Board EDBG 调试口通过 USB 连接 PC 的 USB 口

Page 3: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

3

软件: MPLAB® X IDE: v5.20 或者更新

XC32: v2.15 或者更新

Harmony 3: v3.3.0 或者更新 (bsp, core, csp) Python: 2.7.x Python 的安装方法如下: 1. 从 https://www.python.org/downloads/下载 python2.7.x 的安装文件 2. 在 PC 上安装 python, 比如安装到 c:\python27 3. 安装 pyserial

a) 直接在命令行输入以下命令来安装 C:\Python27\Scripts\pip.exe install pyserial

b) 如果以上命令执行出错,那可以手动安装 从 https://pypi.org/project/pyserial/2.7/#files 下载 pyserial-2.7.tar.gz 解压 pyserial-2.7.tar.gz 并将 serial 目录拷贝到 c:\python27\lib 目录下

Page 4: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

4

三、 Bootloader 原理

(一) Bootloader 与 application

Bootloader 位于 flash 的起始地址处, Bootloader 的初始化代码会将 Bootloader自身拷贝到 SRAM 中,再从 SRAM 中执行,以便于对 flash 的编程。 (二) Bootloader 框架 框架如下图

Bootloader 框架分成 3 个子任务: 通信任务/communication interface:通过 UART 与主机(PC)进行通信

Page 5: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

5

命令处理任务/Command Processor:解析通信命令,执行相应的动作,比如

烧录 flash 烧录任务/Programming Task: 对内部 flash 进行编程 (三) UART Bootloader 介绍

UART Bootloader 烧录 application 分以下几个内容 运行在 PC 上的 Python 脚本,负责将 application 的 bin 文件通过 COM 传递到

SAME70 的 UART 运行在 SAM E70 Xplained Ultra 上的 bootloader,负责从 UART 接收数据,并

对 flash 编程

四、 获取 Harmony 3 的 Bootloader 包

如果之前没有下载 Harmony 3 的 Bootloader 包,则可以打开 MPLAB X IDE,点击

Tools -> Embedded -> MPLAB Harmony 3 Framework Downloader,然后按提示下载。 详细步骤可参考:“MPLAB® Harmony 3 之基础篇(01) -- Harmony 3 开发环境搭

建”。 成功下载 Harmony 3 的 Bootloader 包后,会看到如下类似界面:

以及在 Harmony 3 的安装目录下,会看到 bootloader。

Page 6: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

6

五、 烧录 Bootloader

(一) 打开 Bootloader 工程 在 MPLAB X IDE 里点击 File > Open Project,来打开 Harmony3 安装路径\bootloader\apps\uart_bootloader\bootloader\firmware 目录

下的 sam_e70_xult.X

Page 7: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

7

(二) 设置工程为 main project 在 projects 窗口右键工程选择 set as main project 如下图,如果已经是 main project则不用设置。

(三) 启动 HMC 在 MPLAB X IDE 里点击 Tools > Embeded > MPLAB Harmony 3 Configurator 启动:

Page 8: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

8

点击“Launch”按钮启动 MHC。

(四) 配置 bootloader 1. 在 Project Graph 窗口选择“Bootloader”组件,然后在“Configuration Options”

窗口可以对相关参数做一些配置

2. 在 Project Graph 窗口选择“USART1”组件,然后在“Configuration Options”

窗口可以设置串口的波特率等

Page 9: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

9

(五) 使用 MHC 生成代码 如果 MHC 中没有修改配置,可以不用重新产生代码。 如果在 MHC 中有修改配置,则依次保存并生成代码如下图。具体请参考文档:

“MPLAB® Harmony 3 之基础篇(02) -- 了解 MHC”。

(六) 编译下载测试 用 USB 线将 SAM E70 Xplained Ultra 开发板连接到电脑,右键工程选择 properties来打开 project properties 对话框,选择 SAM E70 Xplained Ultra EDBG 调试接口和

XC32 编译器。

Page 10: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

10

Page 11: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

11

(七) 编译下载测试 1. 编译下载 点击下图工具栏按钮来执行编译并下载程序:

编译成功如下图

下载成功如下图

六、 测试 Bootloader

(一) 编译 application 并生成 bin 文件 在 MPLAB X IDE 里点击 File > Open Project,来打开 Harmony3 安装路径\bootloader\apps\uart_bootloader\test_app\firmware 目录下

的 sam_e70_xult.X

Page 12: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

12

在 projects 窗口右键工程,选择 build 来编译工程。

编译成功后,在 test_app\firmware\sam_e70_xult.X\dist\sam_e70_xult\production目录下,生成了 sam_e70_xult.X.production.bin 文件

Page 13: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

13

(二) 查看 SAM E70 的串口号 将 SAM E70 Xplained Ultra 的 EDBG 调试器通过 USB 连接 PC 的 USB 口,从 windows的设备管理器窗口获的串口号为 COM5。 额外说明:由于 bootloader 使用的 UASRT1 是与 EDBG 调试器的 USB 转串口相连

的,所以不需要额外的 USB 转串口,即 PC <---> EDBG <---> SAM E70 的 USART1

(三) 通过 booloader 烧录 application 在 test_app\firmware\sam_e70_xult.X\dist\sam_e70_xult\production 目录下,新建

burn_app.bat 文件,文件内容如下 C:\Python27\python.exe C:\microchip\Harmony3_2\bootloader\tools\btl_host.py -v -i COM5 -d same7x -o 0x2000 -f sam_e70_xult.X.production.bin pause 双击 burn_app.bat 来运行,烧写成功如下图,同时板子上的 LED0 开始闪灯。

Page 14: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

14

(四) Bootloader 其他操作 上电时让 Bootloader 强制进入烧录 application 的模式: 按住 SW0 按钮时上电,然后放开 SW0 按钮 Application 中强制进入 bootloader 的烧录 application 的模式: 按住 SW0 按钮

七、 如何设置 Application

这里以 SAME70 为例,将普通的工程配置为 bootloader 可以引导的 application。 (一) 设置代码段在 flash 中的起始地址 参考 test_app 工程的 MHC 配置如下图,设置 application start address 为 402000

在 MHC 生成代码完成后,ROM_ORIGIN 和 ROM_LENGTH 会自动被添加到链接器

的命令行中,可以通过在 projects 窗口右键工程,选择 properties 来查看和确认

Page 15: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

15

设置是否正确,如下图。

ROM_ORGIN 是设置代码段起始地址,注意 flash 的起始地址是 0x400000,bootloader 占用了 0x400000~0x401FFF,所以 application 代码段起始地址从

0x402000 开始。 ROM_LENGTH 是设置代码段的长度。 (二) 配置生成 bin 文件 在 projects 窗口右键工程,选择 properties 来设置生成 bin 文件的命令,具体可

以参考 test_app 工程如下图。

Page 16: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

16

命令如下: ${MP_CC_DIR}\xc32-objcopy -I ihex -O binary "${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.hex" "${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.bin"

(三) 设置数据段在 ram 中起始地址 如果不需要在 application 中进入 bootloader,本步骤和以下的步骤可以不做。 在 projects 窗口右键工程,选择 properties 来设置数据段的起始地址,具体可以

参考 test_app 工程如下图。

Page 17: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

17

设置 RAM_ORGIN 是设置数据段起始地址,注意 ram 的起始地址是 0x20400000,BL_REQUEST 码占用了 0x20400000~0x2040000F,所以 application 数据段起始地

址从 0x20400010 开始。 设置 RAM_LENGTH 是设置数据段的长度。 (四) application 中触发 bootloader 的方法 当需要在 application 中触发 bootloader 的执行,并且进入 bootloader 的烧写

application 模式,那么需要在 application 中增加以下代码。 #define BL_REQUEST (0x5048434DU) #define BL_REQUEST_LEN (16) #define APP_SRAM_START 0x20400000U static uint32_t *sram = (uint32_t *)APP_SRAM_START; void invoke_bootloader() {

sram[0] = BL_REQUEST; sram[1] = BL_REQUEST; sram[2] = BL_REQUEST; sram[3] = BL_REQUEST;

NVIC_SystemReset();/// 执行复位

}

Page 18: MPLAB Harmony 3 之基础篇(16 -- 如何使用 UART …...Harmony 3 之基础篇( 16 )-- 如何使用 UART bootloader Microchip Technology Inc. MCU32 产品部 一、 简介

18

原理分析: 在 application 中需要触发 bootloader 运行的地方调用 invoke_bootloader()。 invoke_bootloader()函数会对 RAM 的起始 16 个 byte,写入 BL_REQUEST 码,然后

执行复位。 系统复位后进入 bootloader,bootloader 代码会检测 RAM 的起始 16 个 byte,如

果是 BL_REQUEST 码,那么就进入烧写 application 模式了。

八、 总结

本文介绍了 Harmony 3 的 Bootloader 库的主要功能,并通过一个例程说明如何使

用 Bootloader 库进行 application 的烧录。更多文档请参考 帮助文档:Harmony3 安装路径\bootloader\doc\ 示例工程:Harmony3 安装路径\bootloader\apps\