想查查U盘初始化的子程序,但没有找到,想问一下U盘初始化到底做了那些事情?能不能贴出一个子程序?当然我是指除了对控制传输之外的。
这是CH375初始化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盘已经成功初始化 */ }
loveapple ,这个程序在哪边找的啊?
到网上下载Ch375EVT.ZIP/PUB/MCS51/MISCELL例子程序中有
请问loveapple,在公司例程序里,没找到初始化子函数,请问在CH375DiskConnect()函数里是不是调用了 mInitDisk( )函数?谢谢!还有我做扇区读写实验时返回了错误代码4F,没有查到相关代码,请问怎么回事啊?
你是使用文件级子程序库对U盘进行读写文件操作的吗?插上U盘CH375DiskConnect()返回什么状态,CH375DiskConnect()没有处理,CH375DiskReady()有没有通过.CH375DiskReady()处理了.
你采用的是什么单片机?想采用我们的库来读写U盘,还是参考我们读物理扇区的例子自己写文件系统? 如果采用我们子程序库的话,U盘的初始化在CH375DiskReady( )里做了处理,CH375DiskConnect()只是检测是否连接。
CH375DiskReady()已经通过,我用的是例程序8我把程序贴是主循环里的程序: while(CH375DiskStatus { if(CH375DiskConnect()==ERR_SUCCESS)break; mDelaymS(100); } LED_OUT_ACT( ); /* LED亮 */ mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盘总是返回未准备好,不过可以被忽略 */ mDelaymS( 100 ); printf( "Ready ?\n" ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好 */ } mCopyCodeStringToIRAM( mCmdParam.Open.mPathName,"/MY_ADC.TXT"); i=CH375FileOpen(); if(i==ERR_SUCCESS) { mCmdParam.Locate.mSectorOffset = 0xffffffff; i=CH375FileLocate(); mStopIfError(i); total=CH375vFileSize&511; /*这样防止就把扇区的数据放到XRAM的头部,下次再写入的数据将会接着往下写*/ CH375vFileSize+=511; mCmdParam.Read.mSectorCount = 1; i=CH375FileRead (); mStopIfError(i); CH375vFileSize-=511; mCmdParam.Locate.mSectorOffset = 0xffffffff; i = CH375FileLocate( ); mStopIfError( i ); } else if(i==ERR_MISS_FILE) { i=CH375FileCreate(); mStopIfError(i); total=0; } else mStopIfError(i); mFlushBufferToDisk(0); total+=sprintf(FILE_DATA_BUF+total,"TIME=%d:%d:%d TEMP=%d.%d",hor,min,miao,tmp,tmp_d); if(!(min%30))mFlushBufferToDisk(1); /*强制定时刷新缓冲区,防止数据丢失*/ else mFlushBufferToDisk(0); //if(force) mFlushBufferToDisk(1); mCmdParam.Close.mUpdateLen=0; /*不必更新文件长度,自动刷新时已经自动更新*/ i=CH375FileClose( ); mStopIfError(i);
我用的是公司提供的LIB及程序库,大概是这个地方出现的问题 CH375vFileSize+=511; mCmdParam.Read.mSectorCount = 1; i=CH375FileRead(); mStopIfError(i); 执行到这个地方的时候,程序出现错误!现在返回错误代码5C
你的意思是在i=CH375FileRead中返回错误代码吗?你用的是什么单片机?晶振是多少?
问题一以解决!谢谢大家的帮助!