阅读:886回复:3
请教:usb 主机芯片是怎么向下传urb的
我用的芯片是 via 的 vt6202 。模式是ehci 。
1 我照着协议把 qh 写好(就是那些地址,端口之类),把qh的地址添到 ASYNCLISTADDR 寄存器中。 并使能 Asynchronous Schedule。Asynchronous Schedule Status 寄存器也设置为1了。 协议上说,Asynchronous Schedule Status 和 Asynchronous Schedule enable 都为1的时候, Asynchronous Schedule 才有效。主机才能够从这里取得描述符,从而发送数据。 我的理解是这时候芯片硬件会自动把qh中的内容解读并把数据按地址, 端口发出去。 但是我的数据根本没有向下传递。 郁闷~ :( 是不是我哪里理解的不对? qh 或许没有完全写对,不敢保证(因为没有可以借鉴的)。 2 看协议上说,发送的数据包,除了要传递的数据还包括一些其他的东西。 sync, setup ,addr, endp,crc5,idle 等等 但这些有些都是芯片自己搞定的吧(有的是从描述符中取得,有的是定死的,有的是芯片自己计算出的),软件是不是不用管它是怎么发这些东西的? 3 哪位比较了解主机芯片流程,可以说说么?1.1的主机芯片流程也行,估计应该是差不多。 还请各位多多指教。 [编辑 - 9/6/04 by wdy9927] |
|
沙发#
发布于:2004-09-06 16:24
看看Linux的源代码吧,里边有主机控制器驱动程序
|
|
板凳#
发布于:2004-09-06 17:04
感谢楼上的。
我现在就是仿照 linux 的代码来写的。但估计是哪里我没有搞清楚,所以到现在还是不行。希望各位能给提个醒。 |
|
地板#
发布于:2004-09-07 09:42
我看到 Transfer Overlay 寄存器已经添好。 但是 status 中的 Halted 竟然是1,说明发送的时候出现错误。 可能的错误在哪呢? 超时? 超时芯片是怎么计算超时的? |
|