|
最近用LPC2378+ISP1161做一个USB host项目,除下了几个问题,拿出来和大家讨论一下:
批量传输问题。一次读或写操作有三个阶段:命令、数据、状态。调用三次批量传输实现三个阶段。在我的程序中,我的一次读写操作是都是读或者写512字节,也就是刚好一个扇区数据。读操作没有问题,但是写操作过程中,命令阶段后面,程序必须延时以等待命令执行。请教过别人之后,说是因为U盘接受到你的写命令之后首先要准备你要写的扇区(即U盘要先将你要写的flash擦除,这需要时间),然后在随后的数据阶段,才能接受主机发送来的数据。现在的问题是,就算是这样,且我的程序中不用延时等待,按照1161数据手册的说法,1161也应该会在命令阶段之后的数据阶段中收到设备返回的NAK信号,若收到NAK信号,1161在处理时就不会将PTD的active位由1更新为0,在下一次扫描中,1161会将active位为1的数据在处理一次,只有成功后才将active位由1更新为0,并退出数据阶段,执行随后的状态阶段。但是,我现在的实际情况是每次命令阶段之后的数据阶段,好像1161并没有按照1161数据手册描述的那样处理,而是在收到NAK信号后就直接退出数据阶段并返回出错信息,错误为“实际传送的数据量与期望传送的数据量不符”。我现在的解决方法是在命令阶段之后加入延时,等待U盘准备好接受数据后再发送数据。这样做有两个明显的缺陷:(1),由于在延时的过程中不知道U盘是何时准备好的,所以只能傻傻的等固定的延时后再去送数据,所以导致写速度很慢;(2),由于各个U盘厂商的U盘固件程序不同,命令阶段后的等待时间也不同,而我在程序中要么给个很大的延时以支持较多的设备而导致速度相当慢,到了坚决无法忍受的地步,要么加入短延时支持仅有的少量设备而使时间控制在可以忍受的范围内。我想问的是有没有一种办法,比如说中断,来告诉我的程序,U盘已经准备好的,可以进入数据阶段了!!
谢谢!!!
|
|