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

[复制链接]
2848|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?
香水城 发表于 2011-8-30 11:39 | 显示全部楼层
多谢,我问为什么只有一个endpoint?
angryBird 发表于 2011-8-30 11:15


很多Class都只有一个endpoint,比如HID,endpoint 0用来传命令。
 楼主| angryBird 发表于 2011-8-30 11:43 | 显示全部楼层
5# 香水城


82h 表示方向是deviece->host的啊,可以双向使用吗?我可以从host端,也用这个端点向device发送数据吗?
不好意思,stm32 usb新手,多问几个问题,好尽快入门,多谢啊
香水城 发表于 2011-8-30 13:21 | 显示全部楼层
5# 香水城


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


不可以!!
 楼主| angryBird 发表于 2011-8-30 15:01 | 显示全部楼层
不可以!!
香水城 发表于 2011-8-30 13:21


香主,那我是不是只能用那个数据端点发送at指令数据进去?
盼复,因为晚上要做实验的。多谢!
香水城 发表于 2011-8-30 15:53 | 显示全部楼层
对不起,我没有研究过Communication Interface Class,你还是看规范文本吧。
 楼主| angryBird 发表于 2011-8-30 15:56 | 显示全部楼层
上午我看了一些文档,其实就是CDC,只不过我要实现一个host端的CDC,不像例程上,以及大家做得比较多的device模式。我还没有找到谁在STM32上,实现一个host的CDC。所以,枚举之后是什么流程,我有些不清楚。哪位知道的话,不吝赐教。
香水城 发表于 2011-8-30 16:43 | 显示全部楼层
做Host比做Slave好做多了,Host可以随心所欲,只要符合规范,做什么都行,因为Host是主动的;而Device(slave)是被动的,只能Host让干什么就干什么,自由度比较低。
wangliubo 发表于 2011-8-30 23:10 | 显示全部楼层
下次找你聊聊
 楼主| angryBird 发表于 2011-8-31 16:13 | 显示全部楼层
昨晚at命令应该通了
枚举完成后,按照枚举得到的endpoint信息,进行初始化,打开这两个channel,向out方向的ep通过bulkdatasend函数,写"at\r\n",由bulkdatareceive函数可以收到OK字符串
开始时,中间步骤想得有点多了,感觉不好下手。多谢版主提供的思路。后面要详细规划程序。发现ST的固件库里面,有软件Bug存在。比如其保存描述符数据时,定义的两维数组没有用对,只保存了后一个interface的endpoint数据,前一个控制接口的没有保存上。害我化了几个小时找原因。
香水城 发表于 2011-8-31 18:11 | 显示全部楼层
LZ的能力还是很强的,赞!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

78

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部