获取SDK
代码包下载:xr806\_sdk.tar.gz
获取ToolChain
XRADIO SDK 支持以下两种开发环境:
- Windows 环境:Cygwin + GCC
- Linux 环境:Ubuntu14.2 以上+ GCC
XRADIO SDK 使用的Toolchain: gcc-arm-none-eabi-8-2019-q3-update
Linux Toolchain 安装与配置
下载Linux 版本的Toolchain 压缩包“gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2”,并保存至 “~/tools”目录下(若“~/tools”目录不存在,则需先创建)。进入控制台终端,将Toolchain 压缩包解压。
解压方法如下:
# 切换到Toolchain 压缩包所在目录,例如为~/tools 目录
$ cd ~/tools
# 解压
$ tar -jxf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
以上操作完成Linux 环境下Toolchain 的安装,且Toolchain 安装目录与“[sdk]/gcc.mk”中的“CC\_DIR”变量一致([sdk]表示SDK 根目录)。
CC_DIR = ~/tools/gcc-arm-none-eabi-8-2019-q3-update/bin
如果将Toolchain 安装在其他目录,则需修改“[sdk]/gcc.mk”中的“CC\_DIR”变量,使之指向实际的Toolchain安装目录。
SDK 说明
框架简述
目录结构
目录结构如下,其中out 目录在编译时产生。
.
├── bin # bin 文件目录,存放预置bin 文件
├── chip.mk
├── config.mk
├── gcc.mk
├── Kconfig
├── Makefile
├── include # 头文件目录,存放模块对外头文件
├── lib # 库文件目录,存放预置库文件和编译生成的库文件
│ ├── libaac.a
│ ├── libadt.a
│ └── ......
├── out # 编译生成文件存放目录,存放编译生成的bin 和image
├── project # 工程总目录
│ ├── bootloader # bootloader 工程
│ ├── common # 工程公用代码
│ ├── demo # 演示工程总目录,该目录下每个目录对应一个工程
│ │ ├── hello_demo
│ │ ├── wlan_demo
│ │ └── ......
│ ├── example # 示例工程总目录,该目录下每个目录对应一个工程
│ │ ├── uart
│ │ ├── wlan
│ │ └── ......
│ ├── image_cfg
│ │ └── image.cfg # 默认镜像配置文件
│ ├── linker_script
│ │ └── gcc
│ │ ├── appos.ld # 工程默认链接脚本
│ │ └── bootloader.ld # bootloader 链接脚本
│ ├── project.mk
│ ├── Kconfig
│ └── ......
├── src
│ ├── driver
│ │ ├── chip # 芯片外设驱动
│ │ └── component # 扩展外设驱动
│ ├── image # image 模块
│ ├── kernel # 内核
│ ├── ota # OTA 模块
│ └── ......
├── ......
└── tools # 镜像打包及烧录等工具
构建系统和配置文件
XRADIO SDK 的代码编译和镜像创建采用Kconfig 和Makefile 进行管理,Kconfig 和关键Makefile 和配置文件的说明见表。除特殊说明外,下文所有路径描述均为相对于SDK 根目录的相对路径。
一般情况下,用户只需要修改以下文件来实现工程配置定义:
- project/[prj]/gcc/Makefile(用于指定工程源文件、库、链接脚本、镜像配置文件等)
- project/[prj]/gcc/defconfig(可用于覆盖顶层.config 中的默认配置)
- project/[prj]/prj\_config.h(覆盖“project/common/prj\_conf\_opt.h”中的默认配置)
代码编译和镜像创建
代码编译前需要在“gcc.mk”中设置正确的GCC 交叉编译工具链路径,例如:
CC_DIR = ~/tools/gcc-arm-none-eabi-8-2019-q3-update/bin
所有代码编译和镜像创建命令均需在Linux 终端执行,在顶层目录编译。
先copy 一份配置作为默认配置。例如:
cp project/demo/hello_demo/gcc/defconfig .config
make PRJ=demo/hello_demo defconfig
应用示例
对“hello\_demo”工程进行代码编译和镜像创建的常规过程,举例如下:
# 复制默认配置文件到顶层目录(不切换工程可不要此步骤)
$ cp project/demo/hello_demo/gcc/defconfig .config 或make PRJ=demo/hello_demo defconfig
# 检查SDK 基础配置,如工程名、芯片型号、高频晶振、板级配置是否正确
$ make menuconfig
# 清理,切换工程时需要
$ make build_clean
# 编译代码并生成镜像文件,生成的镜像文件为“out/xr_system.img”
$ make build(建议使用make build -j 加速编译)
编译bootloader 的过程如下:
# 复制默认配置文件到顶层目录
$ cp project/bootloader/gcc/defconfig .config 或make PRJ=bootloader defconfig
# 检查SDK 基础配置,如工程名、芯片型号、高频晶振、板级配置是否正确
$ make menuconfig
# 清理,切换工程时需要
$ make build_clean
# 编译代码并生成镜像文件,默认晶振是40M,生成的镜像文件为
#“bin/xradio_v3/boot/xr806/boot_40M.bin”
$ make build(建议使用make build -j 加速编译)
工程配置
配置选项
使用make menuconfig 进入配置选择界面,已提供了SDK 支持的大部分选项。
例如,要开启了PSRAM 功能,选择如下:Project settings -> PSRAM。
工程Makefile
工程Makefile 位于“project/[prj]/gcc/Makefile”,主要用于指定工程的源文件、链接脚本、镜像配置文件等,关键变量的定义说明如下表所示。
链接脚本
链接脚本(扩展名为“.ld”)主要用于描述如何将输入文件(目标文件、库文件)中的段(text、data、bss 等)映射到输出文件(ELF 文件)中,并控制输出文件的存储布局,输出文件的存储布局采用输出段(链接脚本中以“SECTIONS”标记)进行描述。
工程的默认链接脚本为“project/linker\_script/gcc/appos.ld”,特定工程可通过重定义“project/[prj]/gcc/Makefile”中的“LINKER\_SCRIPT”变量来指定该工程使用的链接脚本。
镜像配置文件
镜像配置文件(扩展名为“.cfg”)采用JSON 格式书写,主要用于描述如何将工程编译生成的二进制文件(app.bin、app\_xip.bin 等)和预置的二进制文件(wlan\_bl.bin、wlan\_fw.bin 等)打包成镜像文件(扩展名为“.img”)。
工程的默认镜像配置文件为“project/image\_cfg/image.cfg”,特定工程可通过重定义“project/[prj]/gcc/Makefile”中的“IMAGE\_CFG”变量来指定该工程使用的镜像配置文件。
镜像烧录
烧录工具界面
Windows 版本的烧录工具(GUI 版本)位于“tools/phoenixMC.exe”,Linux 版本的烧录工具(命令行版本,无GUI 版本)位于“tools/phoenixMC”。本文只对Windows 版本的GUI 烧录工具使用进行简要介绍。PhoenixMC 的主要功能是通过串口将指定的合法固件文件(即前文提到的镜像文件,扩展名为“.img”)烧录到目标设备中,具体步骤如下:
- 串口连线:将开发板上的UART0 通过串口线连接到PC,并进入升级模式(进入升级模式的方法见5.2 节说明)。
- 串口设置:点击左上角的“刷新”按钮可刷新已连接串口设备列表,勾选开发板对应的COM 口。串口波特率最大支持3000000,波特率越高,烧录速度越快。如果高波特率下容易出现烧录失败,可检查串口线、串口驱动是否稳定支持该波特率;或者降低波特率进行尝试。为了避免烧录速度过慢,建议波特率选择大于等于921600。
- 固件选择:点击“选择固件”按钮选择需要烧录的固件文件(扩展名为“.img”),固件信息栏会显示出当前固件的详细信息。另外,通过拖拽方式将固件直接拖入工具界面也可以达到同样的效果。
- 启动烧录:点击“升级固件”按钮启动固件烧录。烧录状态栏显示当前选定串口对应设备的烧录进度和状态。当烧录成功时,进度条会达到100%的进度并显示为绿色;当烧录失败时,进度条显示为红色并报告错误。
复位设备:固件烧录成功后,开启PC 串口工具并连接到UART0,硬件复位开发板,将看到以下打印输出。
use default flash chip mJedec 0x0
[FD I]: mode: 0x2, freq: 48000000Hz, drv: 0
[FD I]: mode: 0x4, freq: 48000000Hz, drv: 0
[FD I]: jedec: 0x0, suspend_support: 1
mode select:e
wlan information ===================================================
firmware:
version : R0-XR_C07.08.52.65_01.94 Sep 25 2020 20:43:25-Y01.94
buffer : 8
driver:
version : XR_V02.05
mac address:
in use : 58:c1:74:cf:ee:6e
in use : 58:c1:74:cf:ee:6f
====================================================================
wlan mode:a
platform information ===============================================
XR806 SDK V0.1 Oct 13 2020 14:16:47
heap space [0x217654, 0x24bc00), size 214444
cpu clock 160000000 Hz
HF clock 40000000 Hz
sdk option:
XIP : enable
INT LF OSC : enable
SIP flash : enable
mac address:
efuse : 00:00:00:00:00:00
in use : 58:c1:74:cf:ee:6e
====================================================================
进入升级模式
- 未烧录过固件的设备(FLASH 上无有效内容)在上电后自动进入升级模式。
- 烧录过固件,且能够正常启动并进入控制台的设备,通过在控制台输入“upgrade”命令使设备进入升级模式(前提是控制台支持“upgrade”命令)。PhoenixMC 工具在点击“升级固件”按钮后,会默认发送一条“upgrade”命令;如果设备满足前述条件,则不需要手动在控制台输入“upgrade”命令也可以启动固件烧录。
- 通过将STRAP IO PB02 置为低电平并RESET 设备,使设备进入升级模式,进入后需释放PB02 IO 使其处于上拉状态。