跳转至

OTA升级移植指南*

GX8008/GX8008C 的 OTA 升级支持两种方式:UARTUSB

GX8008/GX8008C 支持空片升级。也就是说,GX8008/GX8008C 本身没有烧录任何固件的情况下,也可以通过 OTA 方式进行升级。因此,这个升级是安全可靠的。如果在升级过程中断电或者异常,导致设备变砖,仍然可以重新上电或者复位后,再重新OTA。

在 GX8008/GX8008C 芯片内部的只读 ROM 里,已经固化了我们的升级代码,因此可以支持空片升级。升级过程,和 flash 上是否有烧录固件没有任何关系。

1. linux/Android 平台移植*

1.1 概述*

针对linux平台(包含Android),可以直接移植我们的官方烧录程序 bootx。

bootx 工具支持 USB 升级和 UART 升级。

1.2 代码下载*

bootx_v1.8.3.zip (http://yun.nationalchip.com:10000/l/U110RM)

1.3 编译*

如果使用 bootx_v1.8.3.zip 的话:

  • 解压 zip 文件

  • 修改 makefile 指定自己平台对应的工具链

makefile
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
LINUX_TOOL_HEAD=
ARMLINUX_TOOL_HEAD=arm-linux-gnueabihf-    // 这个地方换成自己平台的工具链

ifeq ($(TARGET_MACHINE_32BIT_OR_64BIT), 32)
    WIN_CPP=i586-mingw32msvc-g++
    LINUX_CPP=g++ -m32
    LINUX_CC=gcc -m32
else ifeq ($(TARGET_MACHINE_32BIT_OR_64BIT), 64)
    WIN_CPP=x86_64-w64-mingw32-g++
    LINUX_CPP=g++
    LINUX_CC=gcc
endif
ARMLINUX_CPP=arm-linux-gnueabi-g++  // 这个地方换成自己平台的工具链
ARMLINUXANDROID_CPP=arm-linux-androideabi-g++

如果是linux平台,编译如下:

make clean
make 
  • 如果是 arm 平台,可以尝试下面的步骤。在 PC linux 上安装 arm 工具链,然后编译:
sudo apt install g++-arm-linux-gnueabi 
sudo apt-get install gcc-arm-linux-gnueabi
sudo apt-get install automake autoconf m4 perl
make clean
make libusb-armlinux
make arm-linux
  • 我们也提供在ARM平台编译好的bootx。下载地址如下:

arm_bootx_v1.8.0 (http://yun.nationalchip.com:10000/l/dFgYgk)

1.4 测试*

  • 串口升级的话,启动下面命令后,对开发板重新上下电或者复位,即可开始升级。下载 vsp.bin 到 flash 的 0x0 地址处。我们串口最大波特率支持到1.5M。使用-r命令做波特率选择。
// GX8008C 升级 (/dev/ttyUSB0 根据自己的实际串口设备修改)
sudo ./bootx -m leo_mini -t s -d /dev/ttyUSB0 -r 921600 -c serialdown 0x0 vsp.bin
// GX8008 升级 (/dev/ttyUSB0 根据自己的实际串口设备修改)
sudo ./bootx -m leo -t s -d /dev/ttyUSB0 -r 921600 -c serialdown 0x0 vsp.bin
  • USB升级,需要先执行下面命令,然后一直拉低boot脚,接着对开发板重新上下电或者复位(boot脚这个时候要继续拉低),即可开始升级。升级成功后,再次开机的话,不需要继续拉低boot脚,否则会持续进入升级模式而导致无法正常开机。拉低boot状态下上电,在linux上设备会识别为:NationalChip Storage。设备PID/VID为:a7000:0001,可以使用lsusb命令查看。
// GX8008C 升级
sudo ./bootx -m leo_mini -t u -c download 0x0 vsp.bin
// GX8008 升级
sudo ./bootx -m leo -t u -c download 0x0 vsp.bin

注意 格式

注意

GX8008 和 GX8008C 升级用的命令格式,在 -m 后是不一样的。USB升级,需要一直拉低boot,然后上电来进入升级模式。正常开机的话,不需要该操作。

2. 其它平台移植*

2.1 概述*

针对其他平台,可以参考通过UART流式的方式进行OTA升级8008或8008C

2.2 代码下载*

git clone git@gitlab.com:nationalchip/mcu_ota.git

2.3 编译*

在linux系统下面输出命令即可编译生成可执行文件 sample.elf

make clean
make

2.4 测试*

sudo ./sample.elf

使用该命令后,对开发板重新上下电或者复位,即可开始升级,当出现 firmware download finish 即升级完毕。

注意

GX8008 和 GX8008C 串口升级用的固件为mcu_nor.bin和dsp.fw,需通过xxd -i命令将两个文件转成mcu_nor.h和dsp.h,详细请阅读代码例子。

串口升级目前使用默认的波特率为1.5M,如需更改请修改如下代码。

#define BOOT_STAGE2_BAUD_GRUS 1500000

4. 历史记录*

  • 考虑有的项目仅仅需要串口升级功能,为了避免编译带 USB 功能升级需要增加很多依赖库,我们进行了裁剪,去掉了USB的相关代码,专门提供 bootx_v1.6.11_uart_compatible.zip,来支持串口升级。bootx_v2.zip 专门用于USB升级。

USB升级代码:

bootx_v2.zip (http://yun.nationalchip.com:10000/l/ZFDsH0)

串口升级代码:

bootx_v1.6.11_uart_compatible.zip (http://yun.nationalchip.com:10000/l/AFgJxE)

  • 我们也提供几份在 ARM 平台编译好的bootx(前两个基于 bootx_v2.zip 编译,用于支持USB升级),可以直接下载尝试看看。下载地址如下:

bootx_arm.zip (http://yun.nationalchip.com:10000/l/3FjR5n)

bootx_arm_2.zip (http://yun.nationalchip.com:10000/l/fFU34z)

bootx_arm_v1.6.11_uart (http://yun.nationalchip.com:10000/l/RFkDwC)