你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USB CDC类开发疑问

[复制链接]
wylew 提问时间:2018-2-9 13:07 /
我的研究背景是将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测试出来的速率可信吗?因为计时发现完全不对。。。
希望能得到大家的帮助
cdc速率.JPG
串口工具.JPG
设备管理器.JPG
圈圈.JPG
收藏 评论6 发布时间:2018-2-9 13:07

举报

6个回答
anobodykey 回答时间:2018-2-9 18:31:16
1、上位机和你的USB接口进行数据传输时,的确是通过data类接口的两个批量端点来进行的。你这个USB OTG与上位机通信是直接与USB模块来通信的,和圈圈讲的上位机通信流程不一样,圈圈的那个应该是针对的usb转串口模块,即与st提供的官方例程vcp流程一致,你的是没有外接串口的,要想理解这一流程你最好是画了一个数据流草图,来方便你了解数据的流向。
2、Bus Hound测试出来的速率可信吗?因为计时发现完全不对,对于这个问题就不太了解了,你可以拿一个现成的usb转串口线来测试,看下可不可信

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

wylew 回答时间:2018-2-9 19:50:39
anobodykey 发表于 2018-2-9 18:31
1、上位机和你的USB接口进行数据传输时,的确是通过data类接口的两个批量端点来进行的。你这个USB OTG与上 ...

有疑问想请教一下,两个高速批量端点的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数组中无法传输出去,就会被覆盖吗?
这样的理解能帮忙分析下吗?
feixiang20 回答时间:2018-2-9 21:24:01
你可以找一个相似的案例进行对比实验,数据的变化经过设置和重复以后,如果无法得到利用,自然是没用的

点评

感觉说了等于没说,大家觉得呢  发表于 2018-2-11 09:05
wylew 回答时间:2018-2-9 21:48:17
feixiang20 发表于 2018-2-9 21:24
你可以找一个相似的案例进行对比实验,数据的变化经过设置和重复以后,如果无法得到利用,自然是没用的 ...

不是很明白。。。
anobodykey 回答时间:2018-2-9 22:01:51
你的问题还是比较多的,建议还是先浏览一下相关的usb文档以及stm32相关的usb知识,这样有了储备才容易理解你的程序
1、setup事务是针对端点0而言的,所以不涉及到你批量端点的DMA操作。
2、OUT/IN端点的DMA地址问题,我觉得得看下stm32参考手册中usb的内存分配知识,otg我还不太了解。
3、数据应该是会被覆盖的

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版