我的研究背景是将USB OTG接口初始化成USB转串口,USB模块定义CDC时用了两个接口,CDC通信类接口和data类接口,接在Windows上在设备管理器中也能识别为“Communications Port(COM5)”。。。用串口工具对COM5串口进行传输数据测试,并用Bus Hound进行抓包和获取速率。。。问问:1、上位机和我的USB接口进行数据传输时,枚举时是通过通信类接口的0端点和中断端点进行通信,枚举之后进行的数据收发应该就是通过data类接口自定义的两个批量端点来进行的,是吗?因为我这个是USB OTG接口,所以与上位机通信是直接与USB模块来通信的,和圈圈讲的上位机发来的数据需要先通过串口再与USB进行数据交互的过程不一样吧??? 2、Bus Hound测试出来的速率可信吗?因为计时发现完全不对。。。 希望能得到大家的帮助 |
如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据,需要相关例程,感谢各位大佬拯救一下我啊!????
使用STM32G431做HID Keyboard与CDC符合设备,发现根本做不成,可能是ST提供的库的问题
STM32U073的usb问题。
STM32F103标准库配置的虚拟串口,设备描述符请求失败
STM32L4R9最大支持SD卡的容量是?支持SDXC 64G卡吗?
usb虚拟多个串口如何操作?
USBX在F407上创建CDC不能正常使用
stm32F407作为usb device时,PC发数据下去,为什么会收到一样的数据?
USB复合设备MSC+CDC,MSC异常影响CDC收发
STM32F407 作USB host 驱动 声卡 问题
2、Bus Hound测试出来的速率可信吗?因为计时发现完全不对,对于这个问题就不太了解了,你可以拿一个现成的usb转串口线来测试,看下可不可信
评分
查看全部评分
有疑问想请教一下,两个高速批量端点的FIFO大小是512字节:
_ux_dcd_otg_register_write(dcd_otg, UX_DCD_OTG_FS_DOEPDMA0, 0x40000000)设置OUT端点DMA的目的地址,目的地址是share memory的首地址;
_ux_dcd_otg_register_write(dcd_otg, UX_DCD_OTG_FS_DIEPDMA0, 0x40001000)设置IN端点DMA的目的地址;
_ux_device_class_cdc_acm_read(cdc , usbx_buffer, UX_DEMO_BUFFER_SIZE, &actual_read_length)是cdc设备接收host发来的数据的函数,usbx_buffer是应用程序定义的数组,UX_DEMO_BUFFER_SIZE是数据的大小;
_ux_device_class_cdc_acm_write(cdc , usbx_buffer, actual_read_length, &actual_write_length)是cdc设备向host发送数据的函数,参数同上;
1、当host向device发数据到out端点FIFO后,填满FIFO后触发out端点中断,然后通知CPU到OUT端点的目的地址去处理数据,如果是setup事务,需要将数据搬送到usbx_buffer数组空间里去解析吗?
2、还有,看OUT端点和IN端点之间是相差0x1000,这意思是OUT端点的DMA目的地址能存8个wMaxPacketSize吗?那这个OUT端点中断的触发是当发送一个512字节的包给out端点就触发呢,还是当DMA目的地址存满8个512才触发呢?同理IN。。。
3、如果只是测试device接收数据,那device接收的数据存在usbx_buffer数组中无法传输出去,就会被覆盖吗?
这样的理解能帮忙分析下吗?
不是很明白。。。
1、setup事务是针对端点0而言的,所以不涉及到你批量端点的DMA操作。
2、OUT/IN端点的DMA地址问题,我觉得得看下stm32参考手册中usb的内存分配知识,otg我还不太了解。
3、数据应该是会被覆盖的
评分
查看全部评分