[STM32F1] STM32单片机模拟SAM模块的问题

[复制链接]
1769|21
 楼主| JY-DX-JY 发表于 2016-8-10 17:36 | 显示全部楼层 |阅读模式
我们单位是做身份*读卡器的。最近要做一款产品,需要用STM32模拟SAM模块的USB口。
SAM模块是公安部给的一种模块,带USB接口,用来读身份*用的。
现在让我来做这个工作。
我把SAM模块通过USB口接到电脑上,用Bus Hound抓下枚举的数据,如下:
sam-usb2.JPG
初步分析了一下,首先电脑询问配置描述符,而不是通常的设备描述符。
请问高手,如何做才能让电脑首先询问配置描述符啊?
难道SAM模块就不是一个设备吗?谢谢!
 楼主| JY-DX-JY 发表于 2016-8-11 08:44 | 显示全部楼层
高手支招啊
 楼主| JY-DX-JY 发表于 2016-8-11 08:56 | 显示全部楼层
我把SAM模块用USB线连上电脑,设备管理器显示密码设备,而Bus Hound里显示STD USB设备。
1.jpg 2.jpg
第二幅图的那个unknown Device不是。
icecut 发表于 2016-8-11 10:04 | 显示全部楼层
还是描述符重要.你就抓到一个模拟一个就好了.不要在意顺序.但是你不能不懂 usb.有些会重复请求...
 楼主| JY-DX-JY 发表于 2016-8-11 10:39 | 显示全部楼层
icecut 发表于 2016-8-11 10:04
还是描述符重要.你就抓到一个模拟一个就好了.不要在意顺序.但是你不能不懂 usb.有些会重复请求... ...

谢谢!你是说我直接模拟配置描述符吗?我担心一上电电脑直接询问设备描述符
我就傻眼了。
icecut 发表于 2016-8-11 12:24 | 显示全部楼层
JY-DX-JY 发表于 2016-8-11 10:39
谢谢!你是说我直接模拟配置描述符吗?我担心一上电电脑直接询问设备描述符
我就傻眼了。 ...

肯定先问配置.然后才选默认配置.这是驱动来选的.
 楼主| JY-DX-JY 发表于 2016-8-11 12:34 | 显示全部楼层
icecut 发表于 2016-8-11 12:24
肯定先问配置.然后才选默认配置.这是驱动来选的.

谢谢!我试试。
 楼主| JY-DX-JY 发表于 2016-8-11 13:19 | 显示全部楼层
我试了一下,根本不能枚举成功。
我把配置描述符改成SAM模块的,
3.jpg
设备描述符设成NULL,意思是把设备描述符屏蔽。
 楼主| JY-DX-JY 发表于 2016-8-11 16:13 | 显示全部楼层
改了一下描述符,枚举成功了。
可是用的是批量传输,接下来不知道怎么搞了。高手支招啊!
1223657347 发表于 2016-8-11 16:27 | 显示全部楼层
从bus hound数据来看,该usb设备为自定义设备类,使用两个端点,EP1 Bulk IN和EP1 Bulk OUT。楼主只要改好标准设备描述符(USB Standard Device Descriptor)中VID, PID,以及照抄设备配置描述符(device Configuration Descriptor)即可
 楼主| JY-DX-JY 发表于 2016-8-11 16:49 | 显示全部楼层
1223657347 发表于 2016-8-11 16:27
从bus hound数据来看,该usb设备为自定义设备类,使用两个端点,EP1 Bulk IN和EP1 Bulk OUT。楼主只要改好 ...

谢谢!请问,批量传输和中断传输传输数据有什么区别吗?
原来用中断传输方式可以读身份*,现在改成批量传输就读不了了。
1223657347 发表于 2016-8-11 16:52 来自手机 | 显示全部楼层
JY-DX-JY 发表于 2016-8-11 16:49
谢谢!请问,批量传输和中断传输传输数据有什么区别吗?
原来用中断传输方式可以读身份*,现在改成批量 ...

传输由主机发起,只要分析出数据协议,设备只管进行响应就行。这和何种传输方式无关。
 楼主| JY-DX-JY 发表于 2016-8-11 17:14 | 显示全部楼层
谢谢!还要麻烦你问个问题,原来是中断传输,有一段程序如下,初始化端点的。
3.jpg
是不是把这个初始化的地方改成批量传输端点啊?
可是原来有中断端点,和控制端点。
我有点迷糊,中断传输怎么还有控制端点?
请大神多指教,谢谢!
1223657347 发表于 2016-8-11 17:23 来自手机 | 显示全部楼层
JY-DX-JY 发表于 2016-8-11 17:14
谢谢!还要麻烦你问个问题,原来是中断传输,有一段程序如下,初始化端点的。

是不是把这个初始化的地方改 ...

我并不使用标准库。ep0就是控制传输,是必需的,用于设备枚举。
1223657347 发表于 2016-8-11 17:24 来自手机 | 显示全部楼层
JY-DX-JY 发表于 2016-8-11 17:14
谢谢!还要麻烦你问个问题,原来是中断传输,有一段程序如下,初始化端点的。

是不是把这个初始化的地方改 ...

楼主可以基于cdc的例子改一改,这样比较方便
 楼主| JY-DX-JY 发表于 2016-8-11 17:32 | 显示全部楼层
1223657347 发表于 2016-8-11 17:23
我并不使用标准库。ep0就是控制传输,是必需的,用于设备枚举。

谢谢!
 楼主| JY-DX-JY 发表于 2016-8-11 17:34 | 显示全部楼层
1223657347 发表于 2016-8-11 17:24
楼主可以基于cdc的例子改一改,这样比较方便

谢谢!你是说STM32库里的CDC例程吗?
1223657347 发表于 2016-8-11 17:39 来自手机 | 显示全部楼层
JY-DX-JY 发表于 2016-8-11 17:34
谢谢!你是说STM32库里的CDC例程吗?

是的,cdc例程端点也是只使用了ep0,ep1 bulk in,ep1 bulk out。
 楼主| JY-DX-JY 发表于 2016-8-11 17:42 | 显示全部楼层
1223657347 发表于 2016-8-11 17:39
是的,cdc例程端点也是只使用了ep0,ep1 bulk in,ep1 bulk out。

太感谢了。
bd2jq 发表于 2022-10-9 14:49 | 显示全部楼层
你好 你做过阅读器是吧 能加我微信 1526618 我想做个项目需要找个技术
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:晴天响霹雳,平地一声雷。

245

主题

3351

帖子

30

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