3GO模拟飞行网|3GO Cyber Air Force

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: hbk0401

我的DIY——USB 光电5轴游戏控制器-写在圣诞节(已上图)

[复制链接]
发表于 2011-1-15 00:11:17 | 显示全部楼层
看了一会儿,上面的都没问题,Report的结构有点怪。MB困了,明天调整一下给你发一份试试。
另外注意一下硬件,确定D-线接上拉了?阻抗匹配不?AVR软件模拟的USB通讯只能是低速。
发表于 2011-1-15 00:28:18 | 显示全部楼层
本帖最后由 darkarch 于 2011-1-15 00:34 编辑
我发现我弄的这个好像挑机器:只能在我的台机上识别,在笔记本电脑上就成了“不可识别的设备”,不知道什么 ...
hbk0401 发表于 2011-1-13 22:59



    这个我也发现了,我做的MJOY16板也是如此。

我还试了,在笔记本上接一个USB HUB(前两年买的),再在HUB上接板子,正常

难道这也是版主说的只支持低速的原因?

另外LZ 有空将资料发我一份吧。。越详细越好 8715204@qq.com 谢谢
发表于 2011-1-15 15:48:17 | 显示全部楼层
我用的IC都是内置USB模块的,也就是纯硬件USB的,而且我都是做全速或者高速通讯,所以没出现过不兼容的问题。

我感觉你们的兼容现象跟总线枚举过程有直接的关系,Report Descriptor即使有问题应该也不至于连设备都不识别,所以对于那个我也只是猜测。

看了前面的几套描述符,从软件结构上讲都是没有问题的。在说硬件之前,这里先提一下USB协议1.x vs 2.x版、Full-speed vs. Low-speed之间的差别。

首先注意到这个定义
.equ USBversion  =0x0100  ;for what version USB is that (1.00)
这个值用0x0100和0x0200分别代表USB1.00和USB2.00版本协议。我们知道USB2.0协议对USB1.x最明显的扩充是增加了High-speed模式,其中包含一个Device Qualifier描述符。如果设备不支持High-speed模式,其实Full-speed模式和Low-speed模式的设备用USB1.x和USB2.0协议性能应该是一样的。不过声明了USBversion  =0x0200的设备必须能够正确处理类型为Device Qualifier的Get Descriptor标准请求,尽管它并不支持high-speed模式。

除了上述一点之外,对于USB1.x和USB2.0,Full-speed和Low-speed的差别是一样的,主要差别是传输速率,其次是max packet size的值。
.db 0x00,0x08  ;6 byte - protocol code
                        ;7 byte - FIFO size in bytes
这里Device Descriptor里偏移量为7的字节是Max packet size,表示Endpoint 0每次可传输的最大字节数。一个Low-speed设备的值只能是0x08,Full-speed设备的值可以是8/16/32/64。对于一个Max packet size = 0x08的Full-speed来说,它与一个Low-speed设备的唯一差别就是总线传输速率了。而这一点差别要想让主机知道,恰好又是不能通过软件实现的。USB外设通过硬件拉高一条数据线来声明自己的速度等级。如果一个Low-speed设备错将自己声明为Full-speed设备,主机会把它当作一个Max packet size=0x08的设备对待,并用超过外设接口处理能力的速率发送请求。外设无法同步,自然不会响应。外设一出现超时,根集线器就会报错。

有兴趣的话可以试试,不用任何电路板,只要一条USB电缆。用一支1.5K电阻把VBUS线和任意一条数据线连接起来,然后插到电脑上。电脑照样会显示发现新硬件,过一会儿就显示无法识别的设备。这个就是总线超时的现象。

除了速度不匹配之外,我暂时没有别的猜测。
发表于 2011-1-15 20:44:16 | 显示全部楼层
人才啊。佩服。
 楼主| 发表于 2011-1-15 22:49:37 | 显示全部楼层
回复 33# RCtech
D-接电阻的Vbus,这个在我开始学习时就试验过。我插在本本上协议软件什么信息都没有出现,说明就没有走到信息交互那一步。
确定D-线接上拉.。阻抗匹配不,这个请版主帮我看看原理图吧!因为我手里刚好没有合适的电阻,所以里面红色的都是最后找来的相近阻值的电阻!
sticksmall.jpg
这是我的代码,比较庞大!
final_2mode_5axle_ 6buttonToggle_MJoy0115.rar (16.29 KB, 下载次数: 137)
 楼主| 发表于 2011-1-15 22:53:49 | 显示全部楼层
回复 32# darkarch


    我曾以为是本本的供电不足,那你那个HUB没有用外接电源吗?
    你用的是ATMEGA16吗?
    资料就楼上这些了,应该已经很详细了。
    如果还有问题我们可以QQ技术交流一下:57922497
发表于 2011-1-15 23:38:26 | 显示全部楼层
回复 35# hbk0401


    越看越感觉是阻抗匹配的问题。因为标准USB收发器的电源都是3.3V的,我先细看一下协议再详细回复。
发表于 2011-1-16 02:44:13 | 显示全部楼层
本帖最后由 darkarch 于 2011-1-16 02:46 编辑

似乎与信号电压无太大关系
我在用如图的方式对D-上拉后测量为2.9-3.3V之间都测试过,均是如此 1.5k电阻用上3.0V 不用3.3V

pullup.JPG

通过USBlyser查看 应该是在reset之后进行KmIO某种操作时出错,重复reset+kmio三次后就disable了端口
没有Get Descriptor from device

to hbk0401:
已下载学习,谢谢。我的HUB也没有外接电源的。我是按照国外网站那个MJoy16做的,用的ATMEGA16A-PU (店家说和16-16PU一样)
发表于 2011-1-16 11:14:56 | 显示全部楼层
似乎与信号电压无太大关系
我在用如图的方式对D-上拉后测量为2.9-3.3V之间都测试过,均是如此 1.5k电阻用上 ...
darkarch 发表于 2011-1-16 02:44



    我说的不只是简单的单线电压问题,是差分总线的共模电压、阻抗匹配、信号反射什么的。单线电压影响的是主机对attach操作的检测,共模电压、阻抗、反射则是影响到了差分波形的畸变。要是有双踪示波器可以看看就好了。

    不知道你们插到台式机上测试的时候用的是前面板端口还是后面板的。如果前后面板都好使则是另一说,如果后面板端口和笔记本端口都有问题,是否可以推测前面板端口上那根4芯排线的阻抗在这里起到了一定的作用?或许有点荒唐,因为LZ换用来串在D+、D-上的电阻已经偏大,照理说应该不是因为“偏小”所致。兴许还有别的什么可能。

    说RESET之后的内核模式IO,RESET之后第一个操作就是长度为8字节的Get_Descriptor请求。这个请求也属于kernel mode IO的一种,至于USBlyzer不显示为标准请求,我这里没法看。USBlyzer没有x64版本。我的建议是在一定范围内调整电阻的值,多试几个值看看如何。
发表于 2011-1-16 23:08:27 | 显示全部楼层
楼主你说实话,你确定j20的研发你真没参加?
 楼主| 发表于 2011-1-17 14:42:39 | 显示全部楼层
回复 40# FLY398

我不参与总体的,级别不够,呵呵!
 楼主| 发表于 2011-1-17 14:43:45 | 显示全部楼层
回复 39# RCtech


版主:我就想知道,本本和台机的USB接口到底有什么差异?
发表于 2011-1-17 18:58:11 | 显示全部楼层
本帖最后由 RCtech 于 2011-1-17 18:59 编辑

回复 42# hbk0401


   
    本子的U口不会像台式机那样分前面板和后面板,因此每个U口都是直接焊接在主板上的,台式机前面板的U口通过一段一尺来长的排线连接到主板上,阻抗不一样。如果插台式机后面板也好用的话就不是排线阻抗的问题。但仍然可能跟阻抗有关系,为啥就不能用串并联的方式调整一下阻抗?
    你们实验用的本子是什么型号?
发表于 2011-1-17 19:17:24 | 显示全部楼层
5V CMOS电平的IO口与3.3V CMOS电平的D+、D-之间隔着两个阻抗匹配电阻,你的图纸原设计是82R,实际焊的是33R。我在39L第二段看走眼了,以为你焊的比设计的电阻要大。

那两个电阻在3.3V的USB2.0高速设备上可以不连,但要求使用50R阻抗的USB电缆。你这个设计里因为AVR的IO是5V CMOS电平,那两个电阻除了驱动阻抗匹配之外还要担当电平转换、幅值衰减的任务。82R电阻用33R的代替,阻抗偏小。如果插在台式机前面板上,机箱中间那段线或许起到了补偿阻抗的作用。这个只是猜测。要想排除这个猜测,至少用一个100R或者两个47R串联起来换掉那个33R试试。
 楼主| 发表于 2011-1-17 19:56:03 | 显示全部楼层
本帖最后由 hbk0401 于 2011-1-17 19:57 编辑

回复 44# RCtech


    版主:我刚才插了一下台机后面的USB口,一样能识别的!看来我明天得换个100的看看了
       PS:本本是ASUS A8H23
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|3GO模拟飞行网|3GO Cyber Air Force ( 沪ICP备08002287号|沪ICP备14050587号 )

GMT+8, 2024-5-2 14:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表