阅读:1222回复:6
难!U盘格式化时的问题!
小弟现在在做u盘,现在到了对write10命令的响应这一步了,但是在格式化时遇到了一个问题,请各位大哥帮忙解决一下,给小弟提个方向。
我的电路是51+d12+flash,因为51的单片机只有有限的内存空间,我现在用了512字节作为接收数据的缓冲区,因为D12的 bulk-endpoint只有64字节的双缓冲区,而且flash只能一页(512)一页的写入,所以我程序里就这样处理:当收到了write10命令时就准备接收数据,在接收数据时就计数,当接到512字节时,进行flash的写入操作,这个时候要花些时间,可是当写入的数据不止512字节时,主机还会继续送数据,为了不破坏正在写入的数据,我在这个时候就会关掉所有的中断,这个时候问题出现了,写完了512字节后,打开中断,主机不送数据了,bus hound上出现没反映,还出现了发送reset包。 请问大侠们,在这种情况下,你们应该怎么做? 还有,因为在write10时占用了很多时间,结果在发送CSW时,主机就认为你没有响应了,应该怎么办?? |
|
沙发#
发布于:2004-08-06 13:30
我同意楼上说的,不要关中断,实际上USB传输中一般不会出现超时错的,他的延时时间很长,我在单步跟踪时都不会出问题的!但千万不要关中断!
|
|
|
板凳#
发布于:2004-07-30 15:51
你用的flash具体是什么?我用的是CF卡,你这样的问题我见过,现在解决了,你用的是C还是汇编语言?
|
|
地板#
发布于:2004-07-30 09:24
不清d12的中断,请问怎么理解?如果不清中断,中断标志就一直为一,中断一直产生,那么程序就没有办法运行了呀! 我用的是下降缘触发,不去读D12中断寄存器是不会恢复高电平的。你用的是电平触发吧,电平的不行,可能要用后面那种方法。 |
|
地下室#
发布于:2004-07-30 08:53
大哥,跑到哪去了!!??
|
|
5楼#
发布于:2004-07-29 13:40
不清d12的中断,请问怎么理解?如果不清中断,中断标志就一直为一,中断一直产生,那么程序就没有办法运行了呀!
|
|
6楼#
发布于:2004-07-29 10:04
小弟现在在做u盘,现在到了对write10命令的响应这一步了,但是在格式化时遇到了一个问题,请各位大哥帮忙解决一下,给小弟提个方向。 恩,不要关中断,只是不去处理d12的中断。这样的话不读数据、不清中断,主机应该不会再发数据过来。超时的时间限制挺长的,足够写512了。如果实在是超时了,主机会询问错误,报告becoming ready或者busy的话,应该会再发一次的。 [编辑 - 7/29/04 by clementzhao] |
|