打印

请教香主关于usb接口的问题

[复制链接]
2399|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
angryBird|  楼主 | 2011-8-30 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
平台:STM32 F207
使用usb host 模式和另外一台设备通信,从打印信息看枚举全过程,有两个interface,如下:
if_descriptor->bLength=0x09
if_descriptor->bDescriptorType=0x04     USB_INTERFACE_DESCRIPTOR_TYPE           
if_descriptor->bInterfaceNumber=0x00   
if_descriptor->bAlternateSetting=0x00
if_descriptor->bNumEndpoints=0x01          //One endpoints used
if_descriptor->bInterfaceClass=0x02           //Communication Interface Class
if_descriptor->bInterfaceSubClass=0x02     //Abstract Control Model
if_descriptor->bInterfaceProtocol=0x01      //Common AT commands
if_descriptor->iInterface=0x00
这个接口的endpoint:
p_descriptor->bLength=0x07
ep_descriptor->bDescriptorType=0x05    USB_ENDPOINT_DESCRIPTOR_TYPE            
ep_descriptor->bEndpointAddress=0x81   
ep_descriptor->bmAttributes=0x03          Interrupt
ep_descriptor->wMaxPacketSize=0x40
ep_descriptor->bInterval=0x01
后面数据接口:
if_descriptor->bLength=0x09
if_descriptor->bDescriptorType=0x04    USB_INTERFACE_DESCRIPTOR_TYPE           
if_descriptor->bInterfaceNumber=0x01    第二个接口
if_descriptor->bAlternateSetting=0x00
if_descriptor->bNumEndpoints=0x02      Two endpoints used
if_descriptor->bInterfaceClass=0x0a       CDC
if_descriptor->bInterfaceSubClass=0x00
if_descriptor->bInterfaceProtocol=0x00
if_descriptor->iInterface=0x00

两个endpoint的地址分别是 82h 和 02h

我想请教,前面的命令接口为什么只有一个endpoint,方向是从device到host的。那host向device发送命令,怎么处理呢?

枚举完了以后,我需要向这个设备发送at指令,请问是从命令接口发送,还是从数据接口发送?

谢谢!
沙发
giftyouth| | 2011-8-30 10:30 | 只看该作者
帮楼主顶起!

使用特权

评论回复
板凳
香水城| | 2011-8-30 11:08 | 只看该作者
既然已经知道是Communication Interface Class,你就可以找相关的规范文本看,你要的答案都在文本里面。

还有一个办法是,把这个USB设备插到PC上,然后观察它们之间的通信。

使用特权

评论回复
地板
angryBird|  楼主 | 2011-8-30 11:15 | 只看该作者
既然已经知道是Communication Interface Class,你就可以找相关的规范文本看,你要的答案都在文本里面。

还有一个办法是,把这个USB设备插到PC上,然后观察它们之间的通信。 ...
香水城 发表于 2011-8-30 11:08


多谢,我问为什么只有一个endpoint?

使用特权

评论回复
5
香水城| | 2011-8-30 11:39 | 只看该作者
多谢,我问为什么只有一个endpoint?
angryBird 发表于 2011-8-30 11:15


很多Class都只有一个endpoint,比如HID,endpoint 0用来传命令。

使用特权

评论回复
6
angryBird|  楼主 | 2011-8-30 11:43 | 只看该作者
5# 香水城


82h 表示方向是deviece->host的啊,可以双向使用吗?我可以从host端,也用这个端点向device发送数据吗?
不好意思,stm32 usb新手,多问几个问题,好尽快入门,多谢啊

使用特权

评论回复
7
香水城| | 2011-8-30 13:21 | 只看该作者
5# 香水城


82h 表示方向是deviece->host的啊,可以双向使用吗?我可以从host端,也用这个端点向device发送数据吗?
不好意思,stm32 usb新手,多问几个问题,好尽快入门,多谢啊 ...
angryBird 发表于 2011-8-30 11:43


不可以!!

使用特权

评论回复
8
angryBird|  楼主 | 2011-8-30 15:01 | 只看该作者
不可以!!
香水城 发表于 2011-8-30 13:21


香主,那我是不是只能用那个数据端点发送at指令数据进去?
盼复,因为晚上要做实验的。多谢!

使用特权

评论回复
9
香水城| | 2011-8-30 15:53 | 只看该作者
对不起,我没有研究过Communication Interface Class,你还是看规范文本吧。

使用特权

评论回复
10
angryBird|  楼主 | 2011-8-30 15:56 | 只看该作者
上午我看了一些文档,其实就是CDC,只不过我要实现一个host端的CDC,不像例程上,以及大家做得比较多的device模式。我还没有找到谁在STM32上,实现一个host的CDC。所以,枚举之后是什么流程,我有些不清楚。哪位知道的话,不吝赐教。

使用特权

评论回复
11
香水城| | 2011-8-30 16:43 | 只看该作者
做Host比做Slave好做多了,Host可以随心所欲,只要符合规范,做什么都行,因为Host是主动的;而Device(slave)是被动的,只能Host让干什么就干什么,自由度比较低。

使用特权

评论回复
12
wangliubo| | 2011-8-30 23:10 | 只看该作者
下次找你聊聊

使用特权

评论回复
13
angryBird|  楼主 | 2011-8-31 16:13 | 只看该作者
昨晚at命令应该通了
枚举完成后,按照枚举得到的endpoint信息,进行初始化,打开这两个channel,向out方向的ep通过bulkdatasend函数,写"at\r\n",由bulkdatareceive函数可以收到OK字符串
开始时,中间步骤想得有点多了,感觉不好下手。多谢版主提供的思路。后面要详细规划程序。发现ST的固件库里面,有软件Bug存在。比如其保存描述符数据时,定义的两维数组没有用对,只保存了后一个interface的endpoint数据,前一个控制接口的没有保存上。害我化了几个小时找原因。

使用特权

评论回复
14
香水城| | 2011-8-31 18:11 | 只看该作者
LZ的能力还是很强的,赞!

使用特权

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

本版积分规则

5

主题

78

帖子

1

粉丝