阅读:2022回复:9
u盘只能读,不能写?
写的时候系统发来一条write10指令,接着就发来数据,而接收完这些数据,把它写入flash后。再发送csw给系统,系统再发一个write10指令,但是没有数据了,是什么问题呢?是不是速度问题,对flash操作花的时间太长了,系统认为超时了?
|
|
沙发#
发布于:2003-08-03 15:45
没有人做过?
|
|
板凳#
发布于:2003-08-04 11:55
写的时候系统发来一条write10指令,接着就发来数据,而接收完这些数据,把它写入flash后。再发送csw给系统,系统再发一个write10指令,但是没有数据了,是什么问题呢?是不是速度问题,对flash操作花的时间太长了,系统认为超时了? 很有可能就是速度的问题,我遇到过和你一样的问题 比如在一个write10指令中传输64kB数据时,就只能接收其中的一部分,然后就超时,后来我将代码进行优化,采取空间换取时间的策略,就可以了。 还有可能就是在你接收到CBW命令时,没有使能接收FIFO,从而在下一个OUT时,设备状态不对,也就不会再发数据了 在pc端,用bus hound查看一下,在write后是什么原因导致这个问题,如果是“timeover”的话,就应该优化你的代码 |
|
|
地板#
发布于:2003-08-04 21:34
flycat0101:
看来你以前遇到过类似情况,我用的mcu是89c55wd。所以速度是个问题。但现在只能是就事论事,说说你那个空间换取时间的策略,可以吗?先谢过了! |
|
地下室#
发布于:2003-08-04 21:36
flycat0101:
你是在bulk in 和 bulk out 中断里处理数据吗?还是在主程序里呢? |
|
5楼#
发布于:2003-08-05 17:19
还有谁知道?
|
|
6楼#
发布于:2003-08-07 18:25
NewTech:
快来帮帮我啊! 对闪存的读写是放在端点2的中断里吗?还是放在主循环里? |
|
7楼#
发布于:2003-08-08 00:54
中断负责接受数据,可以在主循环里来写flash!
|
|
8楼#
发布于:2003-08-10 21:53
写flash的时候是不是要关掉中断?如果关了中断,会出现超时现象吗?我现在也碰到frank_wang曾遇到的问题,就是系统发来一个扇区512字节时,每次发64字节,结果只发7次就停止了,这时如果返回csw,就会发来最后一个64字节数据。那要是一次发8个扇区字节呢?会不会每发7次就会等待csw呢?
|
|
9楼#
发布于:2003-08-11 18:28
是不是处理flash时间过长,老是出现no response?
|
|