做U盘转存是不是也要和打印机一样获取设备描述符呀? 谢了!
你所说的转存是不是通过375将一个U盘中的文件转存到另一个U盘中吗?375内置固件处理海量存储设备的专用通讯协议,并不需要获取描述符。
不是 就是将东西直接存到U盘,往U盘里写数据
不需要,你下载CH375EVT.ZIP,其中CH375EVT\PUB\MCS51C\MISCELL\CH375EV0.C是将U盘当作存储器以扇区直接操作的例子。
如果是操作物理扇区的话,那么可以参考上面所说的,如果是以文件系统的方式的话,那么请参考我们的库来操作
我是在等待你们的库,我们用的EZ80的CPU 没有现成的库可以用 还在等待你们的文件系统方式的通用代码
如果没有库 我初始化U盘是可以的吧 现在到U盘是否准备好这里就不行了 请问可能出现的原因是什么 返回值0x1f
USB存储器操作失败
检测到U盘连接上来后,初始化U盘你用下面的代码试试看: UINT8 mInitDisk( void ) { /* 初始化磁盘 */ UINT8 Status,i,j=0; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */ Status = CH375_RD_DAT_PORT( ); if ( Status == USB_INT_DISCONNECT ) return( Status ); /* USB设备断开 */ CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存储器 */ Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status != USB_INT_SUCCESS ) return( Status ); /* 出现错误 */ while(1){j++; CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 获取USB存储器的容量 */ Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status == USB_INT_SUCCESS ) break; /* 出现错误 */ mDelaymS( 250 ); if(j==5) return(Status); } CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 检查USB 存储设备的错误 */ Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status == USB_INT_SUCCESS ){ /* 出现错误 */ for(i=0;i!=5;i++){ printf("Ready\n"); CH375_WR_CMD_PORT( CMD_DISK_READY ); /* 检查USB 存储设备是否就绪*/ Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status == USB_INT_SUCCESS ) break; /* 出现错误 */ } } return( 0 ); /* U盘已经成功初始化 */ }
我们的硬件电路是通过cpu可口控制中断的 开了中断如果将初始化都放进去 那么整个初始化过程就是在中断里执行的了
不应该按照你说的这种说法来做,应该是初始化是在你的主程序里面来做,首先上来延时50-100MS,接下来就是设置模式,设置完模式之后就是检测设备连接,如果检测到设备连接之后就进行设备的初始化,如果是U盘的话,那么就按照上面的例子程序对U盘进行初始化,初始化完成之后就需要对U盘进行操作
那就是说在对U盘操做的时候CPU还是可以做其他工作的吗?