请教一下大虾. 读U盘出现FA是什么错误. 我用串口异步通信,mInitCH376Host..初始化OK.通信波特率使用9600 函数都是使用FILE_SYS_C51.C里面的. xWriteCH376Cmd(CMD01_GET_IC_VER); /* 获取芯片及固件版本 */ res = xReadCH376Data( ); 返回0x15.刚开始使用时返回41. res = CH376DiskConnect();/* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ if(res == USB_INT_SUCCESS){ res = 1; //返回正常.. } else if(res == ERR_DISK_DISCON){ __wait_nop(); //未连接时. res = 0; } __wait_nop(); i = 0; if(res != 0){ while(i<200){ s = CH376DiskMount(); if(s == USB_INT_SUCCESS) i = 200; i++; } i = CH376DiskCapacity(ChkDiskCap); __wait_nop(); // i = CH376DiskQuery(ChkDiskCap); __wait_nop(); __wait_nop(); i = CH376DiskReadSec( Rxive_Buf,0,1); __wait_nop(); __wait_nop(); 返回U盘容量.仅在开始时2次.返回正确的.1EFBF 我的U盘是64M的. 现在返回都 1EFBF04.请问一下是什么原因.程式我都没有更改. 返回U盘剩余空间.出错.FF.为什么错误呢? 剩余空间为00000 最后读第一区时.返回值为..FA..是什么错误呢? Rxive_Buf.里面的数值都是..000000 请问是什么原因呢?
res = CH376DiskConnect();/* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ if(res == USB_INT_SUCCESS){ res = 1; } else if(res == ERR_DISK_DISCON){ __wait_nop(); //未连接时. res = 0; } __wait_nop(); i = 0; if(res != 0){ while(i<200){ s = CH376DiskMount(); if(s == USB_INT_SUCCESS) i = 200; i++; }
i = CH376DiskReadSec( Rxive_Buf,0,1); __wait_nop(); __wait_nop(); 就算是这样.也是读不了.第一个区的. 返回也是FA错误的. 返回..512..个数中.仅前面的. 40 EB 3C 90 4D 53 57 49 4E 34 2E 31 ;030C 00 02 04 08 00 01 00 02 00 00 F8 7C 00 3F 00 FF 00 00 00 00 00 00 00 00 00 00 其他的全是零... 请问是什么原因呢?
返回0xfa可能是中断引脚那部分有问题, 看看中断引脚连接有没有问题,以及程序上面在查询中断的地方有没有错误
谢谢_study_ 我使用的是.CH376T.目前中断引脚是悬空的. UINT8 Wait376Interrupt( void ) { /* while ( Query376Interrupt( ) == FALSE ); /* 一直等中断 return( CH376GetIntStatus( ) ); 检测到中断 */
unint i; for ( i = 0; i < 10000; i ++ ) { /* 计数防止超时,默认的超时时间,与单片机主频有关 */ if ( Query376Interrupt( ) ) return( CH376GetIntStatus( ) ); /* 检测到中断 */ /* 在等待CH376中断的过程中,可以做些需要及时处理的其它事情 */ } return( ERR_USB_UNKNOWN ); /* 不应该发生的情况 */ } 中断的函数是这样的.
没有使用CH376的中断引脚,那么你使用的哪种方式查询CH376的中断呢?
我使用的是串口查询方式. 是否有接到数据.
res = CH376DiskQuery(ChkDiskCap); __wait_nop(); __wait_nop(); 现在就是差这个是返回为FA...其他的..U盘的大小与.读第一扇区的信息都OK了. 刚才出错是.串口通信清..接收数据的标志位不对... 现在就是查找..U盘剩余空间...返回不对..请教..高手..
UINT8 CH376DiskQuery( PUINT32 DiskFre ) { UINT8 s; s = CH376SendCmdWaitInt( CMD0H_DISK_QUERY ); if ( s == USB_INT_SUCCESS ) { /* 参考CH376INC.H文件中CH376_CMD_DATA结构的DiskQuery */ xWriteCH376Cmd( CMD01_RD_USB_DATA0 ); xReadCH376Data( ); /* 长度总是sizeof(CH376_CMD_DATA.DiskQuery) */ xReadCH376Data( ); /* CH376_CMD_DATA.DiskQuery.mTotalSector */ xReadCH376Data( ); xReadCH376Data( ); xReadCH376Data( ); ExchgBuf[3] = xReadCH376Data( ); /* CH376_CMD_DATA.DiskQuery.mFreeSector */ ExchgBuf[2] = xReadCH376Data( ); ExchgBuf[1] = xReadCH376Data( ); ExchgBuf[0] = xReadCH376Data( ); *DiskFre = *(PUINT32)ExchgBuf; //xReadCH376Data( ); /* CH376_CMD_DATA.DiskQuery.mDiskFat */ //这一个.要与不都不对. //xEndCH376Cmd( ); } else *DiskFre = 0; return( s ); }