我到了CH375FileCreate()就返回0xA1 我測過我的RAM 是好的,我用了兩個不同牌子的U盤也沒有,就是返回給我錯誤。謝謝老師幫助
好的RAM 用了兩個牌子的U盤,還有什么可能是不行啊。告訴我啊
CH375LibInit() -> CH375DiskConnect -> CH375DiskReady() 全部都通過沒有? 有沒有試試CH375FileOpen()?
FILEOPEN也是一樣啊,其他的都通過了,我換了個U盤,發(fā)現(xiàn)錯誤有變化了,變成0X1F了,怎么回事啊,我的RAM我用小程序測試過了,著急的很啊,大家?guī)椭野。习逡R死我了啊。高手可以羅列一下,可能造成錯誤的原因嗎?最好加上調試的方法,謝謝啊。
重點查這幾個方面,一,在你調用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的單片機哦,那我去測試一下啊,謝謝你?。?/p>
#include #include #include
sbit Led=P3^5; sbit WatchDog=P3^4;
#define MAX_BYTE_IO 35 /* ò?×??ú?aμ¥??μ¥′??áD′???tê±μ?×?′ó3¤?è,??è??μê?29,?μ′ó?ò??ó??ú′??à,?μD??ò3?1y??3¤?è±?D?·??à′??áD′ */
/* ò????¨ò?μ??ê???μ?÷???′CH375HF6.H???t */ #define LIB_CFG_DISK_IO 1 /* ′??ì?áD′μ?êy?Yμ??′??·?ê?,1?a"μ¥DPTR?′??",2?a"??DPTR?′??",3?a"μ¥DPTRoíP2+R0?′??" */ #define LIB_CFG_FILE_IO 1 /* ???t?áD′μ?êy?Yμ??′??·?ê?,0?a"ía2?×ó3ìDò",1?a"μ¥DPTR?′??",2?a"??DPTR?′??",3?a"μ¥DPTRoíP2+R0?′??" */ #define LIB_CFG_INT_EN 0 /* CH375μ?INT#òy??á??ó·?ê?,0?a"2é?ˉ·?ê?",1?a"?D??·?ê?" */ /*#define LIB_CFG_FILE_IO_DEFAULT 1*/ /* ê1ó?CH375HF6.Hìá1?μ???è?"ía2?×ó3ìDò" */ /*#define LIB_CFG_UPD_SIZE 1*/ /* ?úìí?óêy?Yoóê?·?×??ˉ?üD????t3¤?è: 0?a"2??üD?",1?a"×??ˉ?üD?" */ /* ??è??é????,è?1?éè??êy/×??úêy2??a0???′CH375FileWrite/CH375ByteWrite???o?eD′è?êy?Y??2?DT?????t3¤?è, è?1?Dèòa??′?D′íêêy?Yoó?á×??ˉDT??/?üD????t3¤?è,???′?éò?ê1è???±?á?CH375LibConfigμ???4?a1, è?1?3¤ê±??2?D′è?êy?Y?òó|???üD????t3¤?è,·à?1í?è???μ?oó?°??D′è?μ?êy?Yó????t3¤?è2??à·?, è?1?è·?¨2??áí?è???μ??ò??oó??oü?ìóDêy?Y2???D′è??ò2?±??üD????t3¤?è,?éò?ìá???ù?è2¢??éùU?ì?eo?(U?ì?ú2?μ??ú′?êù?üóD?T,2?ò??μ·±??D′) */
#define CH375_CMD_PORT_ADDR 0xEDF1 /* CH375?üá????úμ?I/Oμ??· */ #define CH375_DAT_PORT_ADDR 0xECF0 /* CH375êy?Y???úμ?I/Oμ??· */ /* ??ê1ó?μ¥???ú?ú??μ?1KBía2?RAM: 0000H-01FFH ?a′??ì?áD′?o3???, ò?×??ú?aμ¥???áD′???t2?Dèòa???têy?Y?áD′?o3???FILE_DATA_BUF */ #define DISK_BASE_BUF_ADDR 0x8000 /* ía2?RAMμ?′??ìêy?Y?o3???μ??eê?μ??·,′ó??μ¥?a?aê?μ??o3???3¤?è?aSECTOR_SIZE */ #define DISK_BASE_BUF_LEN 1024 #define FILE_DATA_BUF_ADDR 0x8400 /* ía2?RAMμ????têy?Y?o3???μ??eê?μ??·,?o3???3¤?è2?D?óúò?′??áD′μ?êy?Y3¤?è,×??ú?£ê?2?ó????o3??? */ /* óéóúμ¥???ú?ú??μ?ía2?RAM??óD1KB, óDD?μ¥???ú?1òaè¥μ?256×??ú?ú2?RAM, ??ê£??768×??úμ?ía2?RAM, ???D?°512×??úóéCH375×ó3ìDòó?óú′??ìêy?Y?o3? */ //#define FILE_DATA_BUF_LEN 1024 /*ía2?RAMμ????têy?Y?o3???,?o3???3¤?è2?D?óúò?′??áD′μ?êy?Y3¤?è,×??ú?£ê?2?ó????o3&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êy?Y???úμ?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; /* 2ù×÷3é1| */ 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
那你需要在編譯的時候按照下面的圖片來編譯我們的庫
大哥您真的是太有才了,如果以后你來上海一定要請你吃飯,MSN:個人信息保護,已隱藏 我以前沒用過KEIL,我是寫匯編的,這次搞定了可以睡個安穩(wěn)覺了。