18
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 运行。

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

  • Upload
    others

  • View
    66

  • Download
    0

Embed Size (px)

Citation preview

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 运行。

2

二、 硬件工具和软件平台

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

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 目录下

4

三、 Bootloader 原理

(一) Bootloader 与 application

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

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

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。

6

五、 烧录 Bootloader

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

下的 sam_e70_xult.X

7

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

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

8

点击“Launch”按钮启动 MHC。

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

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

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

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

9

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

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

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

XC32 编译器。

10

11

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

编译成功如下图

下载成功如下图

六、 测试 Bootloader

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

的 sam_e70_xult.X

12

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

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

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 开始闪灯。

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 来查看和确认

15

设置是否正确,如下图。

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

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

以参考 test_app 工程如下图。

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 工程如下图。

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();/// 执行复位

}

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\