运行效果见https://www.bilibili.com/video/BV1YVEoz1EBj/?vd_source=35452f3eb796fc9d05d0c6ede616f282。
GD32VW553 SoC内部集成有芯来科技(Nuclei)的N307 RISC-V32 IP@160MHz核、4M SiP Flash、320K SRAM、WiFi6+BLE5.2以及无线通信MAC/基带/射频发送PA、接收LNA等信号处理电路,其附带有JTAG可调试其内部TAP各路寄存器状态,适用于工控、智能家居、用户界面、功耗监测和警报系统、消费手持设备、游戏、GPS、共享单车等IoT应用场景。本文不妨先以蓝牙的视角来一探魅力。
一、环境搭建
由于是RISC-V内核,常规ARM开发工具自然不行,需要以下工具,
GD32EmbeddedBuilder_v1.4.13.29373 | 开发环境 | |
GD32VW55x Wi-Fi&BLE SDK | 无线SDK | |
GD32AllInOneProgrammer_win_V4.2.10.28180 | 串口ISP烧录工具 | |
nuclei_riscv_newlibc_prebuilt_win32_2022.04 | https://nucleisys.com/download.php | 编译工具链 |
Jlink v8.24 | 调试、烧录工具 |
GD32EmbeddedBuilder下来后内部Tools放置编译工具,但GD32VW553编译工具是分离的,需要到芯来官网下载放到该目录下,否则报错“riscv-nuclei-elf-gcc:do not exist”,具体右键菜单Properties->C/C++ Build->Settings->Toolchain Settings,
官方教程《GD32VW553 快速开发指南》4.2编译章节说明用的编译工具版本是nuclei_riscv_newlibc_prebuilt_win32_2022.04,但我下载最新版nuclei_riscv_newlibc_prebuilt_win32_2025.02发现不停报错“riscv64-unknown-elf-gcc: error: '-march=rv32imafcbp': extension 'p' is unsupported standard single letter extension”发现新版是适配RISCV64核,用自带riscv-none-embed-同样也会报错“cc1.exe: error: -march=rv32imafcbp: unsupported ISA substring 'bp'”,还是老实按教程来用旧版本uclei_riscv_newlibc_prebuilt_win32_2022.0,
二、工程编译
可以看到GD32VW55x Wi-Fi&BLE SDK解压后有MBL和MSDK两个目录,官方教程《GD32VW553 快速开发指南》有说明,GD32VW55x_RELEASE_V1.0.3\MSDK\examples\ble\peripheral\ble_app_uart\eclipse导入到GD32EmbedBuilder并设置好工具链路径,默认不生成hex文件,同样右键菜单Properties-> C/C++ Build->Settings->Tool Settings勾选hex即可生成仿真.elf、调试.map、烧录.bin/.hex等,
在输出窗口能看到日志,在当前目录ble_app_uart_out生成执行文件,
三、烧录运行
1. 串口ISP烧录
板子上引导模式boot配置是:
Boot0 | PC8 |
Boot1 | PB1 |
默认配置可以看到跳帽把PC8/PB1都接地了即boot0=boot1=0选择SiP Flash启动,需切到Bootloader / ROM模式,查用户手册引导模式可知,EFBOOTLK=0,boot0=1,boot1=0或者EFBOOTLK=1,boot0=1时均可,可直接拔掉boot0(boot0是远离复位按键K1的一侧脚位为奇数,boot1是靠近复位按键K1的一侧脚位为偶数)接通boot0和PC8再按下复位按键就能串口烧录,GD32VW553有3路烧录串口如下:
TX | RX | |
UART0 | PB15 | PA8 |
UART1 | PA4 | PA5 |
UART2 | PA6 | PA7 |
这里以UART2来进行ISP烧录,按照上表接好线用GD32AllInOneProgrammer操作即可,
2. Jlink烧录和调试
该芯片支持JTAG,不妨接好JTAG线,GD32VW553的JTAG引脚配置如下:
信号名 | Jlink编号 | 引脚 |
JTDI | 5 | PA15 |
JTCK | 9 | PA14(TP8) |
JTMS | 7 | PA13(TP7) |
JTDO | 13 | PB3 |
NJTRST(可选) | 3 | PB4 |
需要注意的是NJTRST可接可不接,JTCK和JTMS没有排针引脚,只有测试点,需要飞线出来,接好后打开JFlash v8.24(旧版本要不不支持要么支持但连接不上,不知道是不是有些版本jlink的bug问题如jlink v7.94就支持但连不上),手头的这个萤火工厂芯片型号是GD32VW553HMQ7 QFN40,可以看到固件并不从0地址开始,查询手册得知0x0000 0000 - 0x07FF FFFF给片外flash使用,0x0800 0000 - 0x083F FFFF才是给片内SiP flash使用,
3. 运行
例程ble_app_uart从UART2输出日志,把boot0跳帽直接拔掉按复位按键K1就能SiP flash启动程序运行起来,它的串口服务(UUID=0101)配置是:
UUID | Property | |
RX Characteristic | 0102 | Write,write no response |
TX Characteristic | 0103 | notify |
可以看到手机client连上后读取到GATT数据库后,手机APP写入RX服务把蓝牙数据转成UART呈现在串口工具上,串口工具写入TX服务把串口中断数据转成蓝牙数据通知下发到手机呈现到APP上从而实现双向数据透传。
全部评论