当前位置: 首页 > news >正文

【GD32F527_EVAL】USB 驱动移植 和 USB CDC Device 接入PC实验

文章目录

  • 本篇写给RT-Thread社区和GigaDevice原厂
  • 入坑摘要 -
  • 已有资料梳理
    • GD32F5xx_usb_library/
    • RT官方/社区已完成vs未完成
  • USB驱动架构图
  • 驱动移植标准流程
    • 新增文件架构
    • menuconfig中的菜单
  • 测试成功:USB-FS 虚拟串口枚举
    • Win11上,设备管理器,枚举成功。
    • 设备的VID和PID与原厂一致
  • 代码已上传到gitee

本篇写给RT-Thread社区和GigaDevice原厂

入坑摘要 -

1/ 查看硬件,优选从USB-FS开始,HS的硬件复制非常多;
2/ 记得配置48MHz的时钟,还有电源脚(PD13);
3/ 串口和USB-FS,硬件居然要跳线,调试起来很麻烦;
4/ 调试输出,rt_kprintf,比LOGI,好用;
5/ 驱动移植完整流程 + 调试;

已有资料梳理

GD32F5xx_usb_library/

├── driver/ # USB底层硬件驱动
│ ├── Include/
│ │ ├── drv_usb_core.h # USB核心驱动
│ │ ├── drv_usb_dev.h # USB Device驱动
│ │ ├── drv_usb_hw.h # USB硬件配置
│ │ ├── drv_usb_regs.h # USB寄存器定义
│ │ └── drv_usbd_int.h # USB Device中断
│ └── Source/
│ ├── drv_usb_core.c
│ ├── drv_usb_dev.c
│ └── drv_usbd_int.c

├── device/ # USB Device功能层
│ ├── core/ # Device核心
│ │ ├── Include/
│ │ │ ├── usbd_core.h
│ │ │ ├── usbd_enum.h # 枚举处理
│ │ │ └── usbd_transc.h # 传输处理
│ │ └── Source/
│ │ ├── usbd_core.c
│ │ ├── usbd_enum.c
│ │ └── usbd_transc.c
│ │
│ └── class/ # Device类驱动
│ ├── cdc/ # 虚拟串口
│ ├── msc/ # 大容量存储
│ ├── hid/ # 人机接口
│ ├── audio/ # 音频
│ ├── dfu/ # 固件升级
│ ├── iap/ # 在线编程
│ └── printer/ # 打印机

└── ustd/ # USB标准定义
├── common/usb_ch9_std.h # USB规范定义
└── class/ # 类标准定义

位置 -
./gd32527I-eval/packages/gd32-arm-series-latest/GD32F5xx/、

备注 -

  • 这是GD官方固件库
  • 作用:提供底层硬件访问的HAL层
  • 包含:标准外设库和USB库
  • 特点:直接操作寄存器,不依赖操作系统

RT官方/社区已完成vs未完成

已完成移植的驱动:

  1. drv_adc - ADC驱动
  2. drv_can - CAN驱动
  3. drv_dma - DMA驱动
  4. drv_gpio - GPIO驱动
  5. drv_hard_i2c - 硬件I2C驱动
  6. drv_hwtimer - 硬件定时器驱动
  7. drv_pwm - PWM驱动(基于TIMER)
  8. drv_rtc - RTC驱动
  9. drv_sdio - SDIO驱动
  10. drv_sdram - SDRAM驱动(基于EXMC)
  11. drv_spi - SPI驱动
  12. drv_spi_flash - SPI Flash驱动
  13. drv_usart - USART驱动(含v2版本)
  14. drv_wdt - 看门狗驱动(FWDGT)

尚未移植到RT-Thread的驱动:

  1. CAU - 加密加速单元(AES/DES/TDES)
  2. CRC - 循环冗余校验
  3. CTC - 时钟调整控制器
  4. DAC - 数模转换器
  5. DBG - 调试接口
  6. DCI - 数字摄像头接口
  7. ENET - 以太网控制器
  8. EXTI - 外部中断(可能集成在GPIO中)
  9. FMC - Flash存储器控制器
  10. HAU - 哈希加速单元(SHA/MD5)
  11. IPA - 图像像素加速器
  12. IREF - 内部参考电压
  13. MISC - 杂项功能
  14. PKCAU - 公钥加密加速单元
  15. PMU - 电源管理
  16. RCU - 复位和时钟单元(框架层可能已包含)
  17. SAI - 串行音频接口
  18. SYSCFG - 系统配置
  19. TLI - TFT-LCD接口
  20. TRNG - 真随机数生成器
  21. WWDGT - 窗口看门狗

位置 -
./libraries/gd32_drivers/

备注 -

  • 这是RT-Thread的驱动适配层,
  • 作用:将GD芯片的硬件功能适配到RT-Thread的设备框架,
  • 提供统一的RT-Thread API接口,如 rt_device_t、rt_spi_bus、rt_serial
  • 包含:drv_xxx.c/h文件,它们实现了RT-Thread的设备ops接口
  • 特点:需要实现RT-Thread的设备注册、初始化、读写等标准接口
  • 通过rt_hw_xxx_init()注册到RT-Thread系统

USB驱动架构图

┌─────────────────────────────────────────────────────────┐
│                   应用层 (Application)                    │
│  usb_cdc_test.c / 用户USB应用                            │
└───────────────────┬─────────────────────────────────────┘│
┌───────────────────┴─────────────────────────────────────┐
│          RT-Thread设备驱动框架 (Device Framework)         │
│  rt_device / rt_usb_device                               │
└───────────────────┬─────────────────────────────────────┘│
┌───────────────────┴─────────────────────────────────────┐
│    RT-Thread USB适配层 (libraries/gd32_drivers/)        │
│  drv_usbd.c - USB Device适配驱动                        │
│  ? USB硬件初始化                                         │
│  ? GPIO/时钟配置                                         │
│  ? 中断处理                                              │
│  ? RT-Thread设备注册                                     │
└───────────────────┬─────────────────────────────────────┘│ 调用
┌───────────────────┴─────────────────────────────────────┐
│   GD32 USB库 (packages/.../GD32F5xx_usb_library/)       │
│  ┌─────────────────────────────────────────────────┐   │
│  │ device/class/  - CDC/MSC/HID类驱动              │   │
│  │ device/core/   - USB Device核心                 │   │
│  │ driver/        - USB底层硬件驱动                │   │
│  │ ustd/          - USB标准定义                    │   │
│  └─────────────────────────────────────────────────┘   │
└───────────────────┬─────────────────────────────────────┘│ 操作
┌───────────────────┴─────────────────────────────────────┐
│              GD32F527硬件寄存器                          │
│  USBFS / USBHS 外设                                      │
└─────────────────────────────────────────────────────────┘

驱动移植标准流程

0/ 工具链
在ConEmu中,

  • 更新软件包 - pkgs --update
  • 生成MDK5工程 - scons --target=mdk5
    在Keil中,调试器选举openocd,
  • Rebuild All
  • Download

1/ 确认芯片原厂官方bsp存在,
./gd32527I-eval/packages/gd32-arm-series-latest/GD32F5xx/usb_library/
├── driver/ # USB底层驱动(已存在)
├── device/ # USB Device功能(已存在)
├── host/ # USB Host功能(已存在)
└── ustd/ # USB标准定义(已存在)

2/ 确认rt框架层驱动不存在,编写 -
usbd.h/c usbd_conf.h (USB通用);
usbd.h/c usbd_conf.h (USB Device通用);

3/ 添加编写的,构建文件

    .\libraries\gd32_drivers\SConscript# add usb device drivers.if GetDepend('BSP_USING_USBD'):src += ['drv_usbd.c']

4/ 添加,对应构建包中,原厂package中,相关的文件

    .\gd32527I-eval\packages\gd32-arm-series-latest\GD32F5xx\SConscript

5/ 添加,对应,menuconfig的,配置
.\gd32527I-eval\board\Kconfig
6/ 编写测试文件,
.\gd32527I-eval\applications\usb_cdc_test.c

7/ 在menuconfig中配置,更新配置并重新生成工程,编译,下载,运行测试。

新增文件架构

gd32527I-eval/
├── board/
│ ├── usb_conf.h ? 新建
│ ├── usbd_conf.h ? 新建
│ └── SConscript ? 修改
├── applications/
│ └── usb_cdc_test.c ? 新建
└── libraries/gd32_drivers/
├── drv_usbd.h ? 新建
├── drv_usbd.c ? 新建
└── SConscript ? 修改

packages/gd32-arm-series-latest/GD32F5xx/
└── SConscript ? 已修改

menuconfig中的菜单

Hardware Drivers Config  --->On-chip Peripheral Drivers  --->[*] Enable USB Device  --->USB Device Type (CDC (Virtual COM Port))  --->(X) CDC (Virtual COM Port)( ) MSC (Mass Storage)( ) HID (Keyboard/Mouse)(0) USB Speed (0:FS, 1:HS)

8/ 测试,debug;

测试成功:USB-FS 虚拟串口枚举

Win11上,设备管理器,枚举成功。

screenshot_image.png

设备的VID和PID与原厂一致

screenshot_image.png

串口Log -

screenshot_{907B7AE8-6ACD-43E0-9F48-C44BD775468A}.png

代码已上传到gitee

https://gitee.com/jomoly/gd32f5_usbd_test

感谢社区,看都看到这里了,小伙伴给三连一下呗!!
在这里插入图片描述

http://www.dtcms.com/a/495513.html

相关文章:

  • 网站开发网站定制查看网站源代码建站可以
  • stm32_QT6怎么打包
  • c 做网站流程如何做做网站
  • 深度剖析大模型Function Calling:从原理到优化策略
  • SQL入门:表关联-从基础到优化实战
  • YOLOv3 技术总结
  • 为什么有些前端开发者能快速交付,有些还在纠结架构设计
  • Calibre(开源电子书管理软件) v8.13.0 官方便携版
  • wordpress数据库端口娄底seo排名
  • 途牛旅游网站建设方案临安区做网站的公司
  • 【原理扫描】SSL/TLS 服务器瞬时 Difie-Hellman 公共密钥过弱
  • Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
  • QML学习笔记(四十)QML的FileDialog和FolderDialog
  • 泉州做网站设计歌词插件wordpress
  • NLP意图识别
  • 智能科技 光速东莞网站建设番禺制作网站企业
  • 李宏毅机器学习笔记25
  • 大连模板建站哪家好网站如何加入百度联盟
  • 当大模型遇上 HTTP:一次“无状态”的相似性思考
  • 衡阳网站设计ss0734如何做公司官网
  • asp网站做文件共享上传手机个别网页打不开
  • 做网站图网页搭建环境
  • 山西 网站制作wifi扩展器做网站
  • 利用VOSviewer快速可视化文献全过程(以Web of science为例)
  • appcms程序怎么做网站网站管理公司
  • [Qt] 什么是qmake与cmake
  • DevOps学习笔记
  • DevOps是什么,有什么作用,一般用来干嘛
  • Go语言:关于导包的两个重要说明
  • 21 种网络攻击方式,如何有效防护!