阅读:1076回复:9
熟悉USBN9604的请进,我的READ10过不去了。
U盘开发,走到READ10,读第一个block的数据(512字节)。但是发送完之后,产生bus reset。使用bus hound和串口调试,现把现象说明如下,请各位帮忙分析。
使用bus hound发现,主机会发三次read10命令,然后会发送mode sense,read capacity等命令,但是我的程序中没有收到后来发送的这些命令。用串口调试发现,在第三次发送read10命令后,读取rxs1寄存器,就是接收状态寄存器,发现toggle位的值是不变的,在我的程序中,rxs1的值一直是0x1f,1表示的toggle位的值。我想知道是什么原因导致接收包的toggle位不发生变化。 |
|
沙发#
发布于:2004-04-21 16:29
那肯定是因为你发送数据长度与要求不符合。或长或短。另外要注意发完数据后再发CSW。
一句话:你的数据发送程序有问题。查查吧。 |
|
板凳#
发布于:2004-04-21 16:39
数据长度,我用bus hound看了,没有问题。
在usbn9604中如果数据是传输缓冲区的长度的整数倍的话,在数据传输结束后,要发送一个零长度数据包。以前我是在txfifo1中发送的零长度数据包。看了别人的程序,好像这样是错的。改成在txfifo0中发送(就是endpoint0)中发送,好像,结果是正确的了。 现在的问题是,在read10后,主机发送的toggle位总是一样的,正确的应该是0,1交替才对啊? |
|
地板#
发布于:2004-04-21 17:38
toggle位0,1交替是有你固件控制的呀,你看看那个TXEN3_PID的宏定义就清楚了。
|
|
地下室#
发布于:2004-04-21 17:40
那肯定是因为你发送数据长度与要求不符合。或长或短。另外要注意发完数据后再发CSW。 LJ1978兄 也是用的USBN9603?我的USBN9603的PC驱动遇到了一些问题,想请教你一下。 |
|
5楼#
发布于:2004-04-21 17:47
bbiliu兄:
你是自己做的板,还是购买的? |
|
6楼#
发布于:2004-04-21 22:24
怎么又是read10的问题。
|
|
7楼#
发布于:2004-04-21 22:27
数据长度,我用bus hound看了,没有问题。 好像我的usb也有这样的问题,在硬件提供商给的代码中有这样的情况,如果是最后剩下的数据正好是包size,他会减掉几个,留几个下次发,够变态的。 但是我没有这么做,512自己的read10也过去了,真是ft的一踏弧度,疯了。 |
|
8楼#
发布于:2004-04-22 08:56
我的read10好像过去了。原来在usbn9603下规定如果要传输的数据长
是传输缓冲的整数倍,那么在发送完后要发送一个0长度数据包。 可是对于 bulk only传输的endpoint1(tx通道),好像不用发送0长度数据包,反而会出错。哪位也遇到这种情况,确认一下。 |
|
9楼#
发布于:2004-04-22 08:56
各位老大:
谁有9604的PC驱动呀?我的ARM+9603的速度太慢了,我不知道是不是驱动程序的缘故,请各位DX指点一下好吗?! |
|
|