ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RIOT 移植指南:SeeedStudio GD32 RISC-V 开发板支持详解与实战

RIOT 移植指南:SeeedStudio GD32 RISC-V 开发板支持详解与实战 RIOT 移植指南SeeedStudio GD32 RISC-V 开发板支持详解与实战【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT导读本文以 RIOT 仓库中 SeeedStudio GD32 板级支持包为研究对象系统讲解该开发板的硬件资源、RIOT 外设映射关系、JTAG 烧录流程与 STDIO 串口配置。读者将掌握如何基于seeedstudio-gd32板型编译、烧录并连接 RIOT 应用同时理解板级支持包中board.h、periph_conf.h、SAUL GPIO 参数与 Makefile 各文件的职责分工为自研 RISC-V 板卡的移植提供直接参考。一、板卡概览GigaDevice GD32VF103VBT6 与板载资源SeeedStudio GD32 RISC-V Dev Board又称 GD32VF103VBT6 Dev Board是 Seeed 推出的 RISC-V 架构开发板核心 MCU 为 GigaDevice 的GD32VF103VBT6主频108 MHz。其板载组件在 boards/seeedstudio-gd32/doc.md 中列明如下GD32VF103VBT6 RISC-V MCU 108MHz8MB 板载 FlashW25Q64256 字节 EEPROMLCD 接口16 位 8080 并行接口 SPI 触摸屏控制接口USB Type-CTF 卡槽2 个用户按键KEY1/KEY23 个用户 LED红/绿/蓝在 RIOT 中该板的 CPU 型号由 boards/seeedstudio-gd32/Makefile.features 中的CPU_MODEL gd32vf103vbt6指定并由此纳入boards/common/gd32v公共板级支持框架。Kconfig 侧则由 boards/seeedstudio-gd32/Kconfig 完成BOARD_SEEEDSTUDIO_GD32到CPU_MODEL_GD32VF103VBT6的符号选择。二、MCU 硬件资源与 RIOT 支持度文档中的硬件规格表完整记录了 GD32VF103VBT6 的关键指标及其在 RIOT 中的支持状态资源规格RIOT 支持内核家族RISC-V 搭配 ECLIC 中断控制器—RAM32 kByte—Flash128 KByte—主频108 MHz—电源模式3 种Sleep、Deep Sleep、Standby✅GPIO80 个✅定时器5 × 16 位✅RTC1 × 32 位计数器20 位预分频✅WDT2 × 12 位计数器3 位预分频✅ADC2 × 12 位单元16 通道 1 Msps✅DAC2 × 12 位通道✅UART2✅USART3✅SPI3✅I2C2 × Fast Mode 400 kHz✅I2S2❌CAN2 × CAN 2.0B最高 1 Mbps❌板级默认未启用PWM6 通道✅USB1 × USB FS OTG✅供电3.0V – 3.6V—上述已支持外设与 boards/seeedstudio-gd32/Makefile.features 中FEATURES_PROVIDED的声明一一对应periph_adc、periph_i2c、periph_pwm、periph_spi、periph_timer、periph_uart、periph_usbdev另外还提供了highlevel_stdio、sdcard_spi与tinyusb_device三项板级特性。需要说明的是CAN 外设虽然在硬件上存在但板级默认不提供且其与 PWM 存在引脚冲突详见下文 PWM 小节。板级时钟配置位于 boards/seeedstudio-gd32/include/periph_conf.h板卡同时提供高频晶振HXTAL8 MHz与低频晶振LXTAL对应CONFIG_BOARD_HAS_HXTAL、CONFIG_BOARD_HAS_LXTAL以及CONFIG_CLOCK_HXTAL MHZ(8)宏定义。三、引脚布局与外设映射3.1 按 RIOT 外设视角的映射表文档给出的RIOT 外设 → MCU 引脚映射表是板级应用开发的第一手参考RIOT 外设MCU 引脚MCU 外设板载功能备注ADC_LINE(0)PA1ADC01_IN1—ADC_LINE(1)PA2ADC01_IN2—ADC_LINE(2)PA3ADC01_IN3—ADC_LINE(3)PC0ADC01_IN10—ADC_LINE(4)PC1ADC01_IN11—ADC_LINE(5)PC2ADC01_IN12—ADC_LINE(6)PC3ADC01_IN13—ADC_LINE(7)PC4ADC01_IN14—ADC_LINE(8)PC5ADC01_IN15—ADC_LINE(9)—ADC01_IN16—内部温度通道ADC_LINE(10)—ADC01_IN17—内部 VREF 通道BTN0PA0BOOT0KEY1BTN1PC13—KEY2I2C_DEV(0) SCLPB6I2C0 SCL—I2C_DEV(0) SDAPB7I2C0 SDA—I2C_DEV(1) SCLPB10I2C1 SCL—I2C_DEV(1) SDAPB11I2C1 SDA—LED0PB5—LED 红LED1PB0—LED 绿LED2PB1—LED 蓝PWM_DEV(0) CH0PB0—LED1 绿PWM_DEV(0) CH1PB1—LED2 蓝PWM_DEV(1) CH0PB8——使用 CAN 时不可用PWM_DEV(1) CH1PB9——使用 CAN 时不可用SPI_DEV(0) CSPB12SPI0 CS—SPI_DEV(0) SCLKPB13SPI0 SCLK—SPI_DEV(0) MISOPB14SPI0 MISO—SPI_DEV(0) MOSIPB15SPI0 MOSI—SPI_DEV(1) CSPA4SPI1 CS—SPI_DEV(1) SCLKPA5SPI1 SCLK—SPI_DEV(1) MISOPA6SPI1 MISO—SPI_DEV(1) MOSIPA7SPI1 MOSI—UART_DEV(0) TXPA9USART0 TXUART TXUART_DEV(0) RXPA10USART0 RXUART RX3.2 按引脚视角的复用关系同一引脚可能被多种板载功能复用文档按引脚列出了完整归属引脚板载功能RIOT 功能 1RIOT 功能 2RIOT 功能 3PA0KEY1——BTN0PA1——ADC_LINE(0)—PA2——ADC_LINE(1)—PA3——ADC_LINE(2)—PA4FLASH CSSPI_DEV(1) CS——PA5FLASH SCKSPI_DEV(1) SCLK——PA6FLASH MISOSPI_DEV(1) MISO——PA7FLASH MOSISPI_DEV(1) MOSI——PA8————PA9—UART_DEV(0) TX——PA10—UART_DEV(0) RX——PA11USB D-———PA12USB D———PA13JTAG TMS———PA14JTAG TCK———PA15JTAG TDI———PB0LED 绿PWM_DEV(0) CH0—LED1PB1LED 蓝PWM_DEV(0) CH1—LED2PB3JTAG TDO———PB4JTAG NRST———PB5LED 红——LED3PB6—I2C_DEV(0) SCL——PB7—I2C_DEV(0) SDA——PB8—PWM_DEV(1) CH0——PB9—PWM_DEV(1) CH1——PB10—I2C_DEV(1) SCL——PB11—I2C_DEV(1) SDA——PB12SD CSSPI_DEV(0) CS——PB13SD SCKSPI_DEV(0) SCLK——PB14SD MISOSPI_DEV(0) MISO——PB15SD MOSISPI_DEV(0) MOSI——PC0——ADC_LINE(3)—PC1——ADC_LINE(4)—PC2——ADC_LINE(5)—PC3——ADC_LINE(6)—PC4——ADC_LINE(7)—PC5——ADC_LINE(8)—PC13KEY2——BTN1—温度—ADC_LINE(9)——VREF—ADC_LINE(10)—其余引脚要么未引出要么没有特殊用途。3.3 源码层的引脚定义印证上述映射并非仅停留在文档层面而是完整落地于板级源码按键BTN0_PIN定义为GPIO_PIN(PORT_A, 0)上升沿触发GPIO_RISINGBTN1_PIN为GPIO_PIN(PORT_C, 13)见 boards/seeedstudio-gd32/include/board.h。LEDLED0(红)PB5、LED1(绿)PB0、LED2(蓝)PB1并直接操作GPIOB-BC清位、GPIOB-BOP置位与GPIOB-OCTL翻转实现开/关/翻转见 board.h。ADCadc_config[]数组按ADC_LINE(0)~ADC_LINE(8)依次映射 PA1~PA3、PC0~PC5其中 ADC_LINE(9)/ADC_LINE(10) 分别以GPIO_UNDEF 内部通道 16温度、17VREF实现见 periph_conf.h。PWMPWM_DEV(0)基于 TIMER2CH0PB0、CH1PB1对应绿/蓝 LEDPWM_DEV(1)基于 TIMER3CH0PB8、CH1PB9注意 PWM_DEV(1) 整组被#if !defined(MODULE_PERIPH_CAN)条件编译包裹——一旦启用 CAN 模块PB8/PB9 的 PWM 通道即被释放印证文档中N/A if CAN is used的备注见 periph_conf.h。SD 卡TF 卡槽走 SPI0CSPB12、SCLKPB13、MISOPB14、MOSIPB15对应SDCARD_SPI_PARAM_*系列宏且MTD_0指向mtd_dev_get(0)即 SD 卡见 board.h。板载 W25Q64 Flash通过 SPI1PA4~PA7连接因此periph_conf.h默认将SPI_DEV_1_USED置 1Enable SPI_DEV(1) by default for the connected FlashI2C_DEV_1_USED也默认开启。四、SAUL 与默认模块依赖板级支持包还通过 boards/seeedstudio-gd32/include/gpio_params.h 为 SAUL 框架预置了 5 个 GPIO 设备LED RED、LED GREEN、LED BLUE、KEY1、KEY2。三个 LED 均声明为SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR板载 LED 低电平点亮初始化时熄灭KEY2 也标记为SAUL_GPIO_INVERTED。对应的模块自动依赖在 boards/seeedstudio-gd32/Makefile.dep 中定义启用saul_default时自动追加saul_gpio启用mtd时自动追加mtd_sdcard_default启用vfs_default时自动追加fatfs_vfs与mtd默认在 SD 卡上使用 FAT 文件系统默认引入stdio_cdc_acm.dep.mkUSB CDC ACM 串口与公共 gd32v 依赖。这意味着只需在应用中声明USEMODULE saul_default或USEMODULE vfs_default即可零配置获得 LED/按键的 SAUL 注册或 SD 卡 FAT 文件系统支持。五、烧录基于 OpenOCD 的 JTAG 下载5.1 烧录前提该板通过 JTAG 接口烧录需要OpenOCD v0.12.0 或更高版本。板级默认烧录配置见 boards/common/gd32v/Makefile.includePROGRAMMER ? openocdOPENOCD_DEBUG_ADAPTER ? ftdiOPENOCD_FTDI_ADAPTER ? openocd-usbOPENOCD_TRANSPORT ? jtag并使用OPENOCD_RESET_USE_CONNECT_ASSERT_SRST 1。板卡自身的 OpenOCD 脚本路径在 boards/seeedstudio-gd32/Makefile.include 中通过OPENOCD_CONFIG ? $(RIOTBOARD)/common/gd32v/dist/openocd.cfg指定。5.2 默认 FTDI 适配器烧录直接烧录 hello-world 示例BOARDseeedstudio-gd32 make -C examples/basic/hello-world flash默认假定使用interface/ftdi/openocd-usb.cfg所描述的 FTDI 适配器。5.3 更换 FTDI 适配器配置若使用其他 FTDI 适配器通过OPENOCD_FTDI_ADAPTER指定其 OpenOCD 配置名。例如使用 Tigard 适配器OPENOCD_FTDI_ADAPTERtigard BOARDseeedstudio-gd32 make -C examples/basic/hello-world flash该变量最终映射为 OpenOCD 的source [find interface/ftdi/$(OPENOCD_FTDI_ADAPTER).cfg]指令参见 makefiles/tools/openocd-adapters/ftdi.inc.mk。此外RIOT 还支持 DFU 烧录路径公共配置中DFU_USB_ID ? 28e9:0189、DFU_USE_DFUSE ? 1。5.4 更换调试适配器类型若使用非 FTDI 的调试器如 Segger J-Link改用OPENOCD_DEBUG_ADAPTEROPENOCD_DEBUG_ADAPTERjlink BOARDseeedstudio-gd32 make -C examples/basic/hello-world flashRIOT 会根据该变量引入 makefiles/tools/openocd-adapters/ 下对应的适配器 Makefile如ftdi.inc.mk、jlink等示例逻辑可参考 makefiles/boards/stm32.inc.mk 中OPENOCD_DEBUG_ADAPTER ? stlink的同类用法。六、访问 STDIOUSB CDC ACM 与 UART 切换6.1 默认USB CDC ACM默认情况下STDIO 由stdio_cdc_acm模块基于 TinyUSB 的 USB CDC ACM提供这也解释了 Makefile.features 中tinyusb_device、highlevel_stdio特性的来源。在 Linux 主机上该接口映射为/dev/ttyACMn默认n为 0即/dev/ttyACM0与 Makefile.include 中PORT_LINUX ? /dev/ttyACM0一致。6.2 切换为 UART若希望 STDIO 走第一路 UARTUSART0PA9/PA10需显式启用stdio_uart模块USEMODULEstdio_uart BOARDseeedstudio-gd32 make -C examples/basic/hello-world flash启用后 STDIO 直接通过第一路 UART 输出。若使用外部 USB 转 UART 模块在 Linux 下通常映射为/dev/ttyUSBn。6.3 连接终端使用term目标连接串口例如显式指定/dev/ttyUSB0BOARDseeedstudio-gd32 make -C examples/basic/hello-world term PORT/dev/ttyUSB0若 USB 转 UART 接口索引不是 0则将n替换为实际索引BOARDseeedstudio-gd32 make -C examples/basic/hello-world term PORT/dev/ttyUSBn注意当 STDIO 走 USB CDC ACM 时Linux 下的默认端口为/dev/ttyACM0见 boards/seeedstudio-gd32/Makefile.include而公共 gd32v 层的PORT_LINUX ? /dev/ttyUSB0面向外接 USB 转串口场景两者按实际接线择一使用。七、快速上手从编译到运行综合以上内容完整的上手流程如下烧录默认示例USB CDC ACM 串口BOARDseeedstudio-gd32 make -C examples/basic/hello-world flash连接串口查看输出BOARDseeedstudio-gd32 make -C examples/basic/hello-world term PORT/dev/ttyACM0改用 UART STDIO 并外接 USB 转串口USEMODULEstdio_uart BOARDseeedstudio-gd32 make -C examples/basic/hello-world flash BOARDseeedstudio-gd32 make -C examples/basic/hello-world term PORT/dev/ttyUSB0按需启用板级默认能力在应用 Makefile 中声明USEMODULE saul_defaultLED/按键 SAUL 注册或USEMODULE vfs_defaultSD 卡 FAT 文件系统自动引入fatfs_vfs与mtd。结语SeeedStudio GD32 RISC-V 开发板是 RIOT 在 RISC-V 生态中的代表性板级支持之一从 80 个 GPIO、双 ADC 单元到 USB FS OTG其boards/seeedstudio-gd32目录完整展示了板级支持包的推荐组织方式——board.h负责板载组件引脚periph_conf.h负责外设控制器配置gpio_params.h提供 SAUL 映射Makefile 系列则完成特性声明与模块依赖。开发者既可按本文流程直接上手烧录与调试也可将该目录作为模板理解并复刻一套新的 RISC-V 板卡支持。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表