阅读:2729回复:14
EHCI中的问题
EHCI中的 altNextQtd域和dt域如何处理?
|
|
沙发#
发布于:2004-12-09 08:07
altNextQtd 设置为1 就行。
dt是指什么? |
|
板凳#
发布于:2004-12-09 08:36
老大的EHCI调的怎么样了
1.看规范上写:altNextQtd是用于当in transfer类型的short packet情况时用的,设为1,意思是说不用altNextQtd了? 2.另外可能存在这种情况:当从设备端获取数据时,主机端可能开的空间(100byte)大于实际传输的字节数(10byte),那这时当10字节传输完后,HC是否会报错还是认为是传输结束? 3.我的说的dt域是指data toggle |
|
地板#
发布于:2004-12-09 11:02
呵呵,我现在就是没用到 altNextQtd 所以就把它设置成1 了。
2 会认为是传输结束,你可以在发送完成后读取 qTD Token 中的 Total Bytes to Transfer. 位来判断一下,是否全部读完了。 从而进行相应的处理 3 每次urb 都从 dt = 0 开始,每次发送一个包就改变一次 dt 的值。 应该就是指 data0,data1。 |
|
地下室#
发布于:2004-12-09 11:39
楼主如果知道 altNextQtd 该怎么用,麻烦通知一下。
|
|
5楼#
发布于:2004-12-09 16:52
谢谢
现在已经可以进行控制传输了,不过我现在用的2.0移动硬盘的device subclass 居然是SFF-8070i (0x05),以前我用的u盘测出来的是scsi类(0x06),不知道SFF-8070i是否是scsi的子集? |
|
6楼#
发布于:2004-12-10 18:34
可以进行bulk传输了,不过只能传输16K大小的字节,我怀疑是data toggle 的原因,因为当只有一个bulk qtd时 传输才正确。
|
|
7楼#
发布于:2004-12-11 08:13
#define QTD_TOGGLE (1 << 31)
发送时 token ^= QTD_TOGGLE; bulk 传输好象只有本次发送为 0x5000 时,才需要 token ^= QTD_TOGGLE; [编辑 - 12/11/04 by wdy9927] |
|
8楼#
发布于:2004-12-11 09:37
我现在也是每次 bulk 传输都只有1个qtd, 最多能一次传输20k。
这样就足够了吧? 有必要传输多个qtd 么? [编辑 - 12/11/04 by wdy9927] |
|
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控制器)? |
|
10楼#
发布于:2004-12-13 15:23
楼上的兄弟,我也在看vxWorks下EHCI协议,不知你进展如何?
|
|
11楼#
发布于:2004-12-13 15:25
我也正在研究,它好像有个转换传输层,检测到不是高速设备会相应的转到1。1控制器处理
|
|
12楼#
发布于:2004-12-14 08:02
好象是有,但我还没做出来。
现在我只做了 批量传输,控制传输。但是速度很慢。 :( |
|
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传输的代码。 |
|
14楼#
发布于:2004-12-15 08:09
每次几十兆?
速度是 2m ? 不会吧,速度是怎么测试的? 难道一次传输要用几十秒钟? |
|