跳转至

无Flash方案(串口启动)*

1. 概述*

8008/8008c支持无flash,通过每次芯片上电后从串口加载固件启动,国芯提供基于Linux/Windows加载8008/8008c的c程序,用户只需把相关代码移植到对应的host平台

Tip

硬件设计的时候host端注意需要控制芯片端的电源或者复位

2. 程序下载*

3. 可以直接在linux/windows平台上运行(实测ubuntu16/18/20,windows10)*

3.1 编译*

linux平台:
make

windows平台:(一般windows平台是没有gcc编译工具的,可以使用压缩包中的mingw-get-setup.tar.gz进行安装)
mingw32-make

3.2 运行程序后,给芯片上电或者复位*

linux平台:
sudo ./main.elf /dev/ttyUSBx -m leo //for leo(8008)
sudo ./main.elf /dev/ttyUSBx -m leo_mini //for leo mini(8008c)

windows平台:
main.exe COMx -m leo //for leo(8008)
main.exe COMx -m leo_mini //for leo mini(8008b/c)

其中/dev/ttyUSBx和COMx,根据连接到pc端的串口号进行修改即可

3.3 以leo_mini为例,加载成功如下*

3.4 如果mcu固件打开了printf,可以从对应串口看到正常上电日志*

Tip

编译mcu的时候需要把printf功能关闭,或者映射到和串口加载不同的串口。

3.5 代码说明*

  • 高亮部分为移植需要关注的代码,工程师需要适配host端port.h中的接口
.
├── dsp.fw                   ----- DSP固件
├── mcu_nor.bin              ----- MCU固件
├── porting.c                ----- linux/windows平台上实现的对应接口
├── main.c                   ----- 串口加载函数 (**UartSendFirmwareForLEO()/UartSendFirmwareForLEOMINI()**)
├── main.elf/main.exe        ----- linux/windows平台编译出来的可执行程序
├── makefile
├── port.h                   ----- 如果需要移植到其他平台,需要在其他平台上实现的接口
├── mingw-get-setup.tar.gz   ----- windows平台编译工具链,解压后双击即可安装
└── README.md

4. MCU端的修改(不做8008/8008c开发的请忽略)*

4.1 默认配置*

  • sdk默认使用UART0与host通讯(8008只有UART0),所以默认也使用串口0做串口加载启动

  • sdk默认使用3000000波特率(握手波特率统一57600)做串口加载,8008/8008c波特率最高支持到3000000

4.2 修改串口*

  • 作为加载启动的串口,在加载启动中不能作为其他通讯用,成功加载启动后可以。 例如:作为printf输出

  • vsp_sdk/mcu/vsp/common/vsp_vpa.c

206 static int serial_port = UART_PORT0;

4.3 修改波特率*

4.3.1 修改mcu加载波特率*

  • 板级配置代码 board_config.h
#define CONFIG_DW_UART0_CLK         192000000
#define CONFIG_SPL_DESIGNWARE_UART_CLKDIV 4  /* (CONFIG_DW_UART_CLK + (8 * baudrate)) / (16 * baudrate) */
#define CONFIG_SPL_DESIGNWARE_UART_CLKDLF 0  /* (CONFIG_DW_UART_CLK % (16 * baudrate) * 1.0) / (16 * baudrate) * (1 << 4) */
  • 例如配置3000000

    • CONFIG_SPL_DESIGNWARE_UART_CLKDIV = (192000000 + (8 * 3000000)) / (16 * 3000000) = 4
    • CONFIG_SPL_DESIGNWARE_UART_CLKDLF = (192000000 % (16 * 3000000) * 1.0) / (16 * 3000000) * (1 << 4) = 0

4.3.2 修改dsp加载波特率*

  • vsp_sdk/mcu/vsp/common/vsp_vpa.c

    289    // Init serial port for vpa loading
    290    UartInit(serial_port, 3000000);