请求帮助啊

我到了CH375FileCreate()就返回0xA1 我测过我的RAM 是好的,我用了两个不同牌子的U盘也没有,就是返回给我错误。谢谢老师帮助

好的RAM 用了两个牌子的U盘,还有什么可能是不行啊。告诉我啊


CH375LibInit() -> CH375DiskConnect -> CH375DiskReady() 全部都通过没有? 有没有试试CH375FileOpen()?


FILEOPEN也是一样啊,其他的都通过了,我换了个U盘,发现错误有变化了,变成0X1F了,怎么回事啊,我的RAM我用小程序测试过了,着急的很啊,大家帮助我啊,老板要骂死我了啊。高手可以罗列一下,可能造成错误的原因吗?最好加上调试的方法,谢谢啊。


重点查这几个方面,一,在你调用DISK-READY这个函数的时候,函数给你返回什么样的值?如果不是0X00的话,你需要去检查下你的USB口这边是否有问题,也就是UD+和UD-是否接反,晶振是否为12M,USB口串接的电阻不能超过5欧姆,电源供电是否充足以及你可以用示波器去看下UD+和UD-是否有信号出来。二,如果DISK-READY通过的话,那么,你就需要看下你的三个读写子函数是否满足命令与命令之间,命令与数据之间需要延时2US,数据与数据之间需要延时1US的时序要求。


我的USB口上U+和U-上没有串电阻,我DISK-READY返回的事0X00,你所说的数据和命令之间要2US是什么意思啊?我直接调用贵公司的操作文件的子程序库的,不是自己写的函数。


你是不是使用的51单片机还是其他的单片机,你可以这样做一个测试,你调用我们的CH375-FILE-OPEN这个函数,在出错之后,你看下DISK_BASE_BUF里面的值是什么样的??


我用的是AT89C55WD的单片机哦,那我去测试一下啊,谢谢你啊!


#include #include #include

sbit Led=P3^5; sbit WatchDog=P3^4;

#define MAX_BYTE_IO 35 /* ÒÔ×Ö½ÚΪµ¥Î»µ¥´Î¶ÁдÎļþʱµÄ×î´ó³¤¶È,ĬÈÏÖµÊÇ29,Öµ´óÔòÕ¼ÓÃÄÚ´æ¶à,ֵСÔò³¬¹ý¸Ã³¤¶È±ØÐë·Ö¶à´Î¶Áд */

/* ÒÔ϶¨ÒåµÄÏêϸ˵Ã÷Çë¿´CH375HF6.HÎļþ */ #define LIB_CFG_DISK_IO 1 /* ´ÅÅ̶ÁдµÄÊý¾ÝµÄ¸´ÖÆ·½Ê½,1Ϊ"µ¥DPTR¸´ÖÆ",2Ϊ"Ë«DPTR¸´ÖÆ",3Ϊ"µ¥DPTRºÍP2+R0¸´ÖÆ" */ #define LIB_CFG_FILE_IO 1 /* Îļþ¶ÁдµÄÊý¾ÝµÄ¸´ÖÆ·½Ê½,0Ϊ"Íⲿ×Ó³ÌÐò",1Ϊ"µ¥DPTR¸´ÖÆ",2Ϊ"Ë«DPTR¸´ÖÆ",3Ϊ"µ¥DPTRºÍP2+R0¸´ÖÆ" */ #define LIB_CFG_INT_EN 0 /* CH375µÄINT#Òý½ÅÁ¬½Ó·½Ê½,0Ϊ"²éѯ·½Ê½",1Ϊ"ÖжϷ½Ê½" */ /*#define LIB_CFG_FILE_IO_DEFAULT 1*/ /* ʹÓÃCH375HF6.HÌṩµÄĬÈÏ"Íⲿ×Ó³ÌÐò" */ /*#define LIB_CFG_UPD_SIZE 1*/ /* ÔÚÌí¼ÓÊý¾ÝºóÊÇ·ñ×Ô¶¯¸üÐÂÎļþ³¤¶È: 0Ϊ"²»¸üÐÂ",1Ϊ"×Ô¶¯¸üÐÂ" */ /* ĬÈÏÇé¿öÏÂ,Èç¹ûÉÈÇøÊý/×Ö½ÚÊý²»Îª0ÄÇôCH375FileWrite/CH375ByteWriteÖ»¸ºÔðдÈëÊý¾Ý¶ø²»ÐÞ¸ÄÎļþ³¤¶È, Èç¹ûÐèҪÿ´ÎдÍêÊý¾Ýºó»á×Ô¶¯ÐÞ¸Ä/¸üÐÂÎļþ³¤¶È,ÄÇô¿ÉÒÔʹȫ¾Ö±äÁ¿CH375LibConfigµÄλ4Ϊ1, Èç¹û³¤Ê±¼ä²»Ð´ÈëÊý¾ÝÔòÓ¦¸Ã¸üÐÂÎļþ³¤¶È,·ÀֹͻȻ¶ÏµçºóÇ°ÃæдÈëµÄÊý¾ÝÓëÎļþ³¤¶È²»Ïà·û, Èç¹ûÈ·¶¨²»»áͻȻ¶Ïµç»òÕߺóÃæºÜ¿ìÓÐÊý¾Ý²»¶ÏдÈëÔò²»±Ø¸üÐÂÎļþ³¤¶È,¿ÉÒÔÌá¸ßËٶȲ¢¼õÉÙUÅÌËðºÄ(UÅÌÄÚ²¿µÄÄÚ´æÊÙÃüÓÐÏÞ,²»ÒËƵ·±¸Äд) */

#define CH375_CMD_PORT_ADDR 0xEDF1 /* CH375ÃüÁî¶Ë¿ÚµÄI/OµØÖ· */ #define CH375_DAT_PORT_ADDR 0xECF0 /* CH375Êý¾Ý¶Ë¿ÚµÄI/OµØÖ· */ /* ֻʹÓõ¥Æ¬»úÄÚÖõÄ1KBÍⲿRAM: 0000H-01FFH Ϊ´ÅÅ̶Áд»º³åÇø, ÒÔ×Ö½ÚΪµ¥Î»¶ÁдÎļþ²»ÐèÒªÎļþÊý¾Ý¶Áд»º³åÇøFILE_DATA_BUF */ #define DISK_BASE_BUF_ADDR 0x8000 /* ÍⲿRAMµÄ´ÅÅÌÊý¾Ý»º³åÇøµÄÆðʼµØÖ·,´Ó¸Ãµ¥Ôª¿ªÊ¼µÄ»º³åÇø³¤¶ÈΪSECTOR_SIZE */ #define DISK_BASE_BUF_LEN 1024 #define FILE_DATA_BUF_ADDR 0x8400 /* ÍⲿRAMµÄÎļþÊý¾Ý»º³åÇøµÄÆðʼµØÖ·,»º³åÇø³¤¶È²»Ð¡ÓÚÒ»´Î¶ÁдµÄÊý¾Ý³¤¶È,×Ö½Úģʽ²»Óøûº³åÇø */ /* ÓÉÓÚµ¥Æ¬»úÄÚÖõÄÍⲿRAMÖ»ÓÐ1KB, ÓÐЩµ¥Æ¬»ú»¹ÒªÈ¥µô256×Ö½ÚÄÚ²¿RAM, ֻʣÏÂ768×Ö½ÚµÄÍⲿRAM, ÆäÖÐÇ°512×Ö½ÚÓÉCH375×Ó³ÌÐòÓÃÓÚ´ÅÅÌÊý¾Ý»º³å */ //#define FILE_DATA_BUF_LEN 1024 /*ÍⲿRAMµÄÎļþÊý¾Ý»º³åÇø,»º³åÇø³¤¶È²»Ð¡ÓÚÒ»´Î¶ÁдµÄÊý¾Ý³¤¶È,×Ö½Úģʽ²»Óøûº³&ari


#include #include #include

sbit Led=P3^5; sbit WatchDog=P3^4;

#define MAX_BYTE_IO 35

#define LIB_CFG_DISK_IO 1 #define LIB_CFG_FILE_IO 1 #define LIB_CFG_INT_EN 0

#define CH375_CMD_PORT_ADDR 0xEDF1 /* CH375ÃüÁî¶Ë¿ÚµÄI/OµØÖ· */ #define CH375_DAT_PORT_ADDR 0xECF0 /* CH375Êý¾Ý¶Ë¿ÚµÄI/OµØÖ· */

#define DISK_BASE_BUF_ADDR 0x8000 #define DISK_BASE_BUF_LEN 1024 #define FILE_DATA_BUF_ADDR 0x8400 //#define FILE_DATA_BUF_LEN 1024

#define CH375_INT_WIRE INT0

#define NO_DEFAULT_CH375_F_ENUM 1 #define NO_DEFAULT_CH375_F_QUERY 1

#include "CH375HF6.H"

void mDelaymS(UINT8 delay ) { unsigned char i, j, c; WatchDog = !WatchDog; for ( i = delay; i != 0; i -- ) { for ( j = 200; j != 0; j -- ) c += 3; /* ÔÚ24MHzʱÖÓÏÂÑÓʱ500uS */ for ( j = 200; j != 0; j -- ) c += 3; /* ÔÚ24MHzʱÖÓÏÂÑÓʱ500uS */ } }

void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* ²Ù×÷³É¹¦ */ Led = 0; while ( 1 ) { mDelaymS(200); } }

main( ) { /* TestVarible = 56; if(TestVarible == 56)Led = 1; else Led = 0;*/ unsigned char idata i; unsigned char idata j; mDelaymS(100); Led = 0; CH375Reset(); i = CH375LibInit(); mStopIfError( i ); mDelaymS(500);

j=0; do{ mDelaymS(500); i = CH375DiskConnect(); if (i != ERR_SUCCESS){ Led = 0; }else{ Led = 1; j = 1; } //d = !Led; mDelaymS(100); }while( j == 0 ); Led = 0; mDelaymS(500); for ( j = 0; j < 10; j ++ ) { mDelaymS( 500 ); if ( (i = CH375DiskReady( )) == ERR_SUCCESS ) break; }

if (i != ERR_SUCCESS){ Led = 0; }else{ Led = 1; } mDelaymS(500); Led = 0; mDelaymS(1); strcpy(mCmdParam.Create.mPathName, "\\B.TXT"); mDelaymS(1); i = CH375FileCreate(); // CH375FileClose(); // Led = 1; if (i == 0x1f){ Led = 1; } while ( 1 ) { mDelaymS(200); } } 根据我自己的线路板做了个简单的测试的程序,就是过不了,不知道错在哪里,DISKREADY过了,返回是0x00就是FILECREATE过不了


你可以不可以告诉我你的RAM地址是从什么地方开始的?是从0X0000开始的还是从哪边开始的??


0x8000开始的RAM


那你需要在编译的时候按照下面的图片来编译我们的库 2007121813263476.jpg


大哥您真的是太有才了,如果以后你来上海一定要请你吃饭,MSN:个人信息保护,已隐藏 我以前没用过KEIL,我是写汇编的,这次搞定了可以睡个安稳觉了。


只有登录才能回复,可以选择微信账号登录