GD32E505 USB分析


GD32E505 USBHS模块特性:

  1. 包含一个4KB的FIFO RAM
  2. 主机模式下,支持12个通道,包含2个发送FIFO(周期性发送FIFO和非周期性发送FIFO)和1个接收FIFO(由所有通道共享)。
  3. 在设备模式下,支持6个OUT端点和6个IN端点。 – 有点少…
  4. 在设备模式下,包含6个发送FIFO(每个IN端点一个发送FIFO)和1个接收FIFO(由所有的OUT端点共享)
  5. 在设备模式下,USBHS在初始化后保持掉电状态,利用VBUS引脚上的5V电源连接USB主机后或者置位USBHS_GCCFG寄存器中VDEN控制位,USBHS将进入供电状态。USBHS首先打开DP信号线上的上拉电阻,之后主机会检测到一个连接事件。
  6. USBHS支持软件断开,通过置位USBHS_DCTL寄存器中SD控制位进行强制断开,SD控制位置位后,如果当前设备为高速,USBHS会首先返回到全速设备,然后关闭DP信号线上的上拉电阻,如果是全速,USBHS会直接关闭上拉电阻,这样USB主机会在USB总线上检测到设备断开。

例程分析

  1. usb_rcu_config() : 配置USB的时钟,目测只支持配置system_clock为48M、72M、120M和168M,所以默认程序配置的为168M,没有配置为180M。
  2. usb_timer_init() : 配置了TIMER2作为USB的延时定时器,usb_mdelay和usb_udelay都是调用了hw_delay来实现的,其他在使用定时器时需要避免使用TIMER2.
  3. 程序中会判断是否需要检测VBUS,配置VBUS_SENSING_ENABLED,在usb_conf.h中屏蔽使能。
  4. USB设备描述符居然藏在GD32E50x_usbhs_library\device\class\cdc\Source\cdc_acm_core.c,鄙视之!为毛不单独整个文件啊!如果需要修改VID和PID,是在cdc_dev_desc中。
  5. 基本上不需要做什么修改,USB CDC的例程很容易就跑起来了。

文章作者: xArm
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xArm !
评论