bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1897回复:11

高手请进:EHCI的问题

楼主#
更多 发布于:2004-09-11 16:17
1.queue head的中的queue horizontal Link pointer说31~5是做为下一个queue head的地址,但是通常的地址是32位,如何填充?
2.queue head 中的next qtd pointer和alter next qtd pointer有什么区别?
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-09-11 17:23
终于见到同志了。

落泪ing 。。。。


先声明,我也是刚做,很多东西都是半模糊状态,希望和楼主多切磋切磋。

1 你qh地址的 31~5 是可以是1, 4~0 必须是0 (0~4 留给其他的东西用了。)。 这个是地址对齐的问题。 也就是说,你的地址必须是 0xffffffe0 这样的。

2 这2个寄存器都是指下一个qtd的位置。其中,我觉得常用的是 nextqtd pointer , alter 你把它的 t 位置1 就行。 hc 会自动忽略这里的值。 可能alter 有其他的用途,但我现在还没有用到。等用到了,再仔细研究。


另: 可否留下联系方式。我们做的东西一样,我也是刚做,一起切磋,一定比一个人瞎猛好。



[编辑 -  9/11/04 by  wdy9927]
bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-13 11:35
谢了
1.对于第一个问题我已经知道了,是地址对齐的问题,也即是在分配内存时得到的地址必须最低5位必须为0,其他的如buffer pointer也是一样的道理,必须是4Kbyte 对齐

2.关于next pointer 和alter next pointer 的问题可能与short packet 和IN的输入类型有关,具体尚不清楚。

再问:
1.加一个qtd(new)到qh时,qh可能正在处理最后一个qtd(last),因此hc认为last之后就没有qtd可处理了,但实际上我们已经加了new 在last之后,这个应该是软件和硬件之间的竞争问题,我看EHCI Spec好像没怎么说明?


另我做的vxworks下的,不知wdy做的是哪个os下的,我在看Linux下的EHCI,真是难看 呵呵
我的qq:84042790
email:zhougbnw@126.com
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-09-13 15:02
我在往psos 移植。
也是在看linux 代码。正郁闷呢。

你的问题1,我觉得好象不太可能出现这样的情况吧? 也许有,但我现在没考虑到,还不清楚了。

楼主做到哪一步了?

我现在连setup 包都没发下去呢。
bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-13 15:20
代码还没写呢
自己写算了 但可以借鉴linux的流程 如果有qq 可以讨论一下

wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-09-13 15:28
老板不让开qq  :(

晚上会在。 但一般隐身
qq: 8591757
bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-13 16:36
新问题:^_^
qh中的current qtd pointer 、next qtd pointer 和alternate next pointer 该由HCD来填充的把,在EHCI 1.0规范80页4.10.1的上面说qh至少初始化为1.有效的端点状态,2.填充next qtd pointer,我的理解是qtd current ponter是当前正在处理的qtd,而next qtd pointer 是当前qtd的下一个qtd,要填充的话也应该首先填充current qtd pointer,而不是next qtd  pointer,next和 alternate next qtd pointer在qtd中都有,如果知道了current qtd pointer 就可以知道next qtd pointer ,在qh中为什么还用重复这两项呢?
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2004-09-13 16:53
具我目前的了解 current qtd pointer  不是我们的程序添的。而是 host controller 根据 next qtd pointer 或者 alternate next pointer 来添的。

也就是说,你只要添好 next qtd pointer 和alternate next pointer 其中一个,然后使能 sync 就ok了。

hc 会自动把 next qtd pointer 或 alternate next pointer 的值添到 current 并发送。


bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-13 17:19
有道理,我看到了,在后面的协议中说,HC获取next qtd pointer后,检查该qtd 的active 位,如果该位置1,则用next qtd pointer填充current qtd pointer 域。
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2004-09-13 17:25
恩。 是的。

但用起来就不那么简单了。 哈哈,我倒现在还没正确的传递下去一个数据呢。

:(  郁闷ing ~~~
bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-09-13 18:18
^_^
看来你的代码是写的差不多了 ,准备开工调试了?
你是基于哪个片子的,我用的ISP1561
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2004-09-13 18:46
我是写一点调一点。

不可能等全写完再调啊。 唉。我是照着linux 来的。

可真是麻烦。

我用的是 via的 6202,本来也考虑1561的,但因为以前用过via的片子,所以这次也选他们的片子。

游客

返回顶部