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

EHCI中的问题

楼主#
更多 发布于:2004-12-08 16:03
EHCI中的 altNextQtd域和dt域如何处理?
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-12-09 08:07
altNextQtd 设置为1 就行。
dt是指什么?

bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-09 08:36
老大的EHCI调的怎么样了
1.看规范上写:altNextQtd是用于当in transfer类型的short packet情况时用的,设为1,意思是说不用altNextQtd了?
2.另外可能存在这种情况:当从设备端获取数据时,主机端可能开的空间(100byte)大于实际传输的字节数(10byte),那这时当10字节传输完后,HC是否会报错还是认为是传输结束?
3.我的说的dt域是指data toggle


wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-12-09 11:02
呵呵,我现在就是没用到 altNextQtd 所以就把它设置成1 了。

2 会认为是传输结束,你可以在发送完成后读取 qTD Token 中的 Total Bytes to Transfer. 位来判断一下,是否全部读完了。 从而进行相应的处理

3 每次urb 都从 dt = 0 开始,每次发送一个包就改变一次 dt 的值。 应该就是指  data0,data1。

wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-12-09 11:39
楼主如果知道 altNextQtd 该怎么用,麻烦通知一下。
bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-09 16:52
谢谢
现在已经可以进行控制传输了,不过我现在用的2.0移动硬盘的device subclass 居然是SFF-8070i (0x05),以前我用的u盘测出来的是scsi类(0x06),不知道SFF-8070i是否是scsi的子集?


bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-10 18:34
可以进行bulk传输了,不过只能传输16K大小的字节,我怀疑是data toggle 的原因,因为当只有一个bulk qtd时 传输才正确。
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2004-12-11 08:13
#define QTD_TOGGLE (1 << 31)


发送时
token ^= QTD_TOGGLE;

bulk 传输好象只有本次发送为 0x5000 时,才需要 token ^= QTD_TOGGLE;


[编辑 -  12/11/04 by  wdy9927]
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2004-12-11 09:37
我现在也是每次 bulk 传输都只有1个qtd, 最多能一次传输20k。

这样就足够了吧? 有必要传输多个qtd 么?



[编辑 -  12/11/04 by  wdy9927]
bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-12-13 14:50
传输多个qtd是必要的,我现在用的os是vxworks(windows也一样),数据IO一般是异步的,如writeFile(),调用后马上返回,而把需要传输的数据放到一个缓冲区,如果每次写1K字节,总共写100次,操作系统在缓冲区内生成的是100K的数据,这样,送到usb主控制器时需要传输的是100K数据,根据100K数据长度来生成n个qtd,不会生成100个qtd。
wdy9927 你可以连续写一下,看生成的是多少个qtd。
另外想问一下,如果插入的一个设备是1.0,EHCI如何通知OHCI(其他的1.0控制器)?




breeze_wang
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2006-03-01
  • 粉丝0
  • 关注0
  • 积分66分
  • 威望10点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-12-13 15:23
楼上的兄弟,我也在看vxWorks下EHCI协议,不知你进展如何?
breeze_wang
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2006-03-01
  • 粉丝0
  • 关注0
  • 积分66分
  • 威望10点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-12-13 15:25
我也正在研究,它好像有个转换传输层,检测到不是高速设备会相应的转到1。1控制器处理
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2004-12-14 08:02
好象是有,但我还没做出来。

现在我只做了 批量传输,控制传输。但是速度很慢。
 :(
bengbengsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-05-31
  • 最后登录2005-05-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-12-14 16:36
1.现在每次可以传输大概几十兆数据,但如果数据大了系统要死掉,不知道这是系统缓冲的原因还是别的。而且有点不稳定,不知道与外界的干扰有没有关系。

2.测了一下速度:在2Mbyte/s,比1.0的要快点(大概在500K左右)。不过在PC上我测了一下速度好像也在1~2Mbyte/s左右。

3.to breeze_wang,我是从网友那要了ehci的driver,代码实在太多就没看,是对照1.0的框架写了ehci的bulk和control传输的代码。
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2004-12-15 08:09
每次几十兆?

速度是 2m ?

不会吧,速度是怎么测试的? 难道一次传输要用几十秒钟?
游客

返回顶部