我用STM32 I/O口模拟并口读U盘CH376.TXT文件CheckCH376Exist() SetCH376Mode(0x06)CH376DiskConnect() CH376DiskMount() CH376OpenFile(buf)都正返回正确的状态,但是CH376ByteRead( )时返回的中断状态就是不是1DH,不能正常的读到文件的数据?
那返回的错误代码是多少?你要说明。
返回的错误代码是4BH。我还没有读数据为什么返回状态就是4BH啊? 我看了PARA_SW.C修改了一下我的程序,前面的测试程序,还有初始化都对,现在CH376OpenFile(buf)不能成功,返回数据是69H,而且执行CH376SetFileName(name)的时候输入文件名看返回状态也不是51H。 我在main()一开始的地方先进行了一下CH376ResetAll(),出现的问题是有的时候U盘查上去不能出现中断CheckCH376Exist() 等都不能返回正确的状态有的时候是00H有的时候是22H。 strcpy( buf, "\\CH376.TXT\0" );在CH376OpenFile()中有一句是if ( name[0] == DEF_SEPAR_CHAR1 || name[0] == DEF_SEPAR_CHAR2 ) { CH376WriteVar32( 0x64, 0 ); }怎么解释啊,看不明白 楼上大哥帮忙看看吧!
大哥们那位能帮忙解答一下啊!
在CH376初始化完成之后,检测到U盘连接之后,CH376DISKMOUNT()这个函数返回多少?你前面的错误属于非正常错误,需要看下U盘初始化函数也就是CH376DISKMOUNT()函数返回多少?
不知道是什么缘故,在打开之前先关闭一次文件,CH376ByteRead( )时返回的中断状态现在是1D了。CH376ReadBlock()这个函数能读到文件的大小,不能读到数据,换了一个优盘还是同样的问题,读数据的时候读到数组里面的值是文件大小的值,但是前面文件大小的值已经读过了,不明白! 还有PUINT8 buf 我用u8* buf 代替行吗? /*****************读文件*************************/ strcpy( buf, "\\YY.TXT\0" ); a = CH376OpenFile(buf); CH376FileClose( TRUE ); strcpy( buf, "\\YY.TXT\0" ); // a = CH376FileOpenPath(buf); a = CH376OpenFile(buf); if(a == USB_INT_SUCCESS) { for(i=0;i<30;i++) { buf[i]=0; } // CH376ReadBlock( buf ); CH376ByteRead( buf, 30, &RealCount ); } CH376FileClose( TRUE );/**/ 困扰中好几天了!要崩溃了!望大哥们给解答一下!先谢谢了!
修改为: strcpy( buf, "\\YY.TXT" ); 试验一下。
strcpy( buf, "\\YY.TXT" );是打开根目录下的文件吗。我是在U盘的打开之后就建了一个YY.txt文件。 还是不行,u8 CH376ReadBlock( PUINT8 buf ) /* 从当前主机端点的接收缓冲区读取数据块,返回长度 */ { u8 s, l,i=0; u8 a[30]; CH376WriteCmd( 0x27 ); s = l = CH376ReadData(); /* 长度 */ if ( l ) { do { *buf = CH376ReadData( ); //a[i] = CH376ReadData( ); buf ++; i++; } while ( -- l ); } return( s ); } 其中的l能返回正常的文件大小,但是buf里面就是没有文件里面的数据。
建议你监控下buf里面的数据是多少?还有按照这样的复制方式来复制数据: strcpy( (char *)buf,(const char *)"\\YY.TXT" );