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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版