打印
[GW低功耗蓝牙MCU]

GW3323的USB分析

[复制链接]
372|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Lana636|  楼主 | 2024-8-27 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Lana636 于 2024-8-27 15:42 编辑

#申请原创# GW3323-USB分析GW3323的PB3\PB4作为USB引脚时,内部有接有上拉电阻。DP(PB3)上拉1.5k欧姆内阻,DM(PB4)上拉200欧姆内阻。输出阻抗是36ohm;差分阻抗是90ohm。
GW3323的USB既可以作为主机,也可以作为从机;但是未开放作为USB主机的任何资料和例程。
GW3323的USB从机可以做耳机、键盘、鼠标、打印机、U盘等设备。config_desc_usb_device配置此芯片充当的设备描述符。

Device Descriptor:------------------------------
bLength            18    (大小:18字节)
bDescriptorType     1    (描述符类型:设备)
bcdUSB            2.00  (USB版本:2.00)
bDeviceClass        0    (设备类代码)
bDeviceSubClass     0    (设备子类代码)
bDeviceProtocol     0    (设备协议代码)
bMaxPacketSize0    64   (端点0的最大包大小:64字节)
idVendor         0x1234 (厂商ID)
idProduct        0x5678 (产品ID)
bcdDevice         1.00  (设备版本:1.00)
iManufacturer      1    (厂商字符串索引)
iProduct           2    (产品字符串索引)
iSerialNumber      3    (序列号字符串索引)
bNumConfigurations 1    (配置数量)


Interface Descriptor:
---------------------------------
0x09,/* 描述符的长度:9字节 */
4,/* 描述符的类型:0x04接口描述符(Interface) */
0x00,/* 选择此接口的索引号,从0开始计算:0 */
0x00,/* 用于选择此设置的索引号:0 */
0x01,/* 实现此接口需要使用的端点数目:1 */
0x03,/* 此接口所遵循的类:HID Class */
0x01,/* 此接口所遵循的子类:1=BOOT, 0=no boot */
0x02,/* 此接口所支持的协议:0自定义、1键盘、2鼠标 */
0,/* 用于描述此接口的字符描述符的索引号 */


设备类型
类代码(Class Code)
子类代码(Subclass Code)
接口协议代码(Protocol Code)
描述
HID(人机接口设备)
0x03
0x01
0x01
键盘(Keyboard)

0x01
0x02
鼠标(Mouse)
打印机
0x07
0x01
0x01
打印机(Printer)
CDC(通信设备类)
0x02
0x02
0x00
0x01
ACM(Abstract Control Model)
ACM(Abstract Control Model,虚拟串口设备)

0x06
0x00
ECM(Ethernet Control Model)
音频
0x01
0x01
0x00
音频控制(Audio Control)

0x02
0x00
音频流(Audio Streaming)

0x03
0x00
MIDI(MIDI Streaming)
图片
0x06
0x01
0x01
静止图像捕获(Still Image Capture)
存储设备
0x08
0x06
0x50
SCSI传输(SCSI Transparent Command Set)
视频
0x0E
0x01
0x00
视频控制(Video Control)

0x02
0x00
视频流(Video Streaming)
无线控制器
0xE0
0x01
0x01
蓝牙编程接口(Bluetooth Programming Interface)
供应商特定设备
0xFF
供应商特定(Vendor Specific)


  • 官方USB规范文档:[color=var(--color-accent-fg)]https://www.usb.org/documents

bsp_sys.c中可以看到,每5ms,GW3323调用usb_detect()监测USB的状态。

1、USB插拔时过程分析:     main主函数while(1)中每19ms就读取msg的状态。用户while(1)中执行内容不同,所用时间不同,此处19ms仅是当前工程的测量值。
     func_usbdev_exit();//在160MHz主频下需要131us
     pc_remove();//在160MHz主频下需要600ns


2、USB流控时过程分析:
    PC发给GW3323:1b40...(GW3323收到了,所以回复的是ack)
    但GW3323实行USB流控,未调用ude_rx_ack()
    所以PC再给芯片发数据:0000...(芯片回复nack)   
    等芯片合盖后,调用ude_rx_ack(),PC再给芯片发数据:0000...(芯片回复ack)









使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

9

帖子

0

粉丝