QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3755|回复: 12

usb设备的地址问题

[复制链接]
发表于 2004-4-19 11:20:57 | 显示全部楼层 |阅读模式
刚刚自己看了点usb的介绍。对usb中地址的实现很不理解,看了一下规范也没有找到具体说这方面的内容的。谁比较了解的介绍一下?
usb应该是组成一个树状结构的。一般来说每个集线器的端口是1-4,那么设想中来自主控制器的地址信息应该是这样的。1:3:1...这样表示根集线器端口1的子集线器的端口3..... 但是令牌包里的地址部分定义是:地址(0-6):端口(0-3) 这样的话如何发送到子集线器上的设备呢?我想不可能像tcpip那样能在集线器里实现包的剥离吧?而且这个地址0-6又是从何而来的?
发表于 2004-4-26 09:25:46 | 显示全部楼层
集线器也是USB设备。
回复

使用道具 举报

 楼主| 发表于 2004-4-26 10:08:00 | 显示全部楼层
集线器也是USB设备

是啊 可是这个设备如何知道转发到那个子设备上呢? 这就是我问的地址实现。
回复

使用道具 举报

发表于 2004-4-27 12:00:00 | 显示全部楼层
USB是单主结构,USB主机策动所有活动。

设备(非HUB)加到总线上时,HUB能感知。USB主机在查询HUB时就知道有一新设备。
有空就来枚举它啦。

具体的,看HUB协议,有一章专门说HUB的。
回复

使用道具 举报

 楼主| 发表于 2004-4-27 12:26:56 | 显示全部楼层
这些我知道啊 我不是说查询阶段
看:
如何发送到子集线器上的设备

解释一下 就是比方主控要发一个数据包到某个集线器下的设备 这个时候的地址是如何被解释成为:根集线下面端口1下面的集线器的端口2对应的设备?
回复

使用道具 举报

发表于 2004-4-27 21:38:20 | 显示全部楼层
我不太清楚您的意思。

USB的地址是统一的啊,7bit地址,地址0是默认地址,共127个设备可用地址。

我想USB HUB能记录下它的每个接口上设备的地址。


另USB网络是广播方式的。
回复

使用道具 举报

 楼主| 发表于 2004-4-28 09:42:21 | 显示全部楼层
对!怪就怪在这个统一地址
打个比方,ip也是统一编址的,那么从一个子网(可以类比是usb下一个根集线器的所有端口)到他内部的子网(类比成根集线器下的子集线器的端口),需要的是路由或者包解析(比方说大的ip包里被解开了是小的ip包)
以usb一个集线器几百个门电路的规模,绝对不可能加入如此复杂的机制,那么我就奇怪,他的地址如何被解析呢?

比方:
A(根)
|
|——————
|                   |
B(hub)        C(hub)
|                  |
D(dev)      E(dev)

如果0001100是设备d的地址,那么在发送包到B,C这一层的时候,BC怎么知道0001100是不是他的哪个端口,是否要继续往下发送呢?
如果是由hub记录的话,他又如何知道自己下面是0001100呢?因为地址的分配是连接上后在内存中实现的,而且我看起始的查询的回应包(设备发出)是没有再回应的,设备内部应该是不知道自己被分配了什么地址的。
所以以我的设想广播只能是到最小的hub这里,hub发往指定的端口。但这样一来又无法解释这个实现。
或者换句话说,他为什么不直接使用端口+子端口这样来实现呢?因为即使用地址,实际上在内存里还是要记录端口+子端口的信息的,为了避免重复设置地址?
回复

使用道具 举报

发表于 2004-4-28 19:41:18 | 显示全部楼层
"usb一个集线器几百个门电路的规模"
--说实话,我不知道几百个门能提供多少计算动力,也不知道您是怎么知道USB HUB是几百个门的电路。但是USB协议是复杂的,所以所有的USB设备包括HUB都是“智能”的。你可以看看一些实现USB HUB的芯片,我想它们绝对不止几百个门。
我正在做的设计中同时使用了一个8051和一个USB接口器件D12,后者仅仅完成USB相应和部分协议的自动应答。D12售价16圆,89C52买11圆。 您还可以参考相关的单芯片如CY7C63xxx,这个便宜4块钱,但是是最简单的。HUB的芯片绝对不止。

我还是建议您看看USB规范是如何定义HUB的,因为我没有专门看过HUB这块。

继续讨论。我做USB很郁闷的。
回复

使用道具 举报

发表于 2004-4-28 19:44:10 | 显示全部楼层
另,设备知道自己被分配的什么地址,主控要把地址发给设备的。
回复

使用道具 举报

发表于 2004-4-28 19:51:35 | 显示全部楼层
还有啊,您说的那个B怎么会发包给C呢?

USB只允许主机和设备间的直接通讯,并且一个时间片只和一个设备有连接(考虑单主的概念)。

回复

使用道具 举报

 楼主| 发表于 2004-4-29 09:39:41 | 显示全部楼层
具体芯片我当然也没做过 (因为我不做这方面的 只是感兴趣自己看看)看到usb和几种其他的主流接口对比上面说的:一个很大的好处是硬件实现简单 一个hub只需要几百个门电路等等 不过我想应该不复杂阿 我们曾经用到的一个arm内核的处理器就是集成了usb控制器的,不过这部分也不是我们这里做的。
我那里不是说b要发给c,而是说c和b到底谁还要往下面的端口发这个包,或者都急需发?
你的意思是不是说设备是要自己记住地址的?然后在令牌广播的时候认出这个自己的地址?
但是我看协议有这么个矛盾:地址是主机这里分配的,而且设备接上后被查询到会回一个响应,但是主机生成地址后就没有再回消息了,那样的话设备如何知道它被分了什么地址呢?
另一个问题是:如果设备要来认出这个地址,不是说设备需要有分析usb包结构的能力了么?包括同步字段Nz编码等等?这些我一直感觉应该是在hub里面做的,给到设备就只是设备需要的数据形式了。是这样么?
还有就是,令牌包完成之后,我的理解是除了那个特定的设备的通路,其他都应该处于一种“停工状态”以避免接受后面的实际数据(正如你说的,这个时间片是独占的)是这样么?如果是,这种状态又是如何被产生和触发解除的呢?
回复

使用道具 举报

发表于 2004-4-29 15:21:21 | 显示全部楼层
是的,当然,设备会知道它的地址,并持续监听。所有的包都要有响应的。比如,主控告诉设备要发地址了,于是发地址,受到地址后,准备要响应的。

设备有拆包能力。在我用的D12+89C52中,D12把各种数据读到它的内部RAM中,然后发中断给51,51固件执行对应的操作。

您说的最有一句话,我没有看明白…
回复

使用道具 举报

发表于 2004-4-29 15:23:42 | 显示全部楼层
还有,您可以提升当前控制台printk日值级别,然后准备好,插入一个USB设备看看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-21 22:37 , Processed in 0.058200 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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