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 运行。
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 编译器。
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\