CH375V使用CH375HFC.LIB,版本为3.0,前面测试、初始化、等待U盘插入、是否准备好、读取U盘大小返回值都是0 xWriteCH375Cmd(CMD_CHECK_EXIST); xWriteCH375Data(0x0f); result=xReadCH375Data(); i = CH375LibInit( ); mStopIfError( i ); while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; i= CH375DiskSize( ); mStopIfError( i ); 执行i = CH375FileOpen( );是返回0x2B,头文件里只说代码2XH-3XH用于USB主机方式的通讯失败代码,由CH375返回 ,那0x2B是什么意思呢? 先前我用CH375HF5.LIB时没有问题,因为库5是在SMALL模式下编译,有模式不兼容警告(我的单片机是C8051F040,LARGE模式),以及字节写函数调用时出现单片机发给DSP的数据出错,在技术支持工程师的建议下,换这个库试试。 PS:查询中断脚时没有设置寄存器页地址,呵呵,弄了一下午,最后还是用UltraCompare这个对比软件在密密麻麻的.H文件里找到。不容易啊。
请按照我们的例子程序去做,上面的问题主要是延时导致的,操作的过快.为保证CH375DiskReady( )通过要循环做.你上面好象根本没有延时,这样的话可能U盘还没准备好.参考如下: while ( CH375DiskStatus < DISK_CONNECT ) { /* 查询CH375中断并更新中断状态,等待U盘插入 */ if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus */ mDelay100mS( ); } LED_OUT_ACT( ); /* LED亮 */ mDelay100mS( ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ mDelay100mS( );
/* 检查U盘是否准备好,但是某些U盘必须要执行这一步才能工作 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盘总是返回未准备好,不过可以被忽略 */ mDelay100mS( ); printf( "Ready ?\n" ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好 */ }
返回0X2B的话,这个错误代码代表的是超时,现在我们最新的库的版本是V3。5,你可以拿这个库去测试下,同时,库5和库C的区别在于库C使用的全部是外部变量,而库5使用了部分的内部变量,这样的话,库C的运行效率会比库5的运行效率要低很多,如果是采用模拟I/O口或者串口的话,需要将三个读写子函数的运行速度稍微的提高点或者将波特率提高点,同时你要检查下你的RAM的使用是否存在问题。 还有就是在你不和DSP进行SPI通信而直接通过串口中断来接收数据同时在写U盘的话,会不会出现数据出错了?