375與單片機連接

我現(xiàn)在 發(fā)CMD_CHECK_EXIST 55 能夠返回aa 但是發(fā)讀版本 和其他的返回的 都是5f 這是什么原因呢 void WriteCmd(UINT8 mCmd)//外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 { mDelay1uS( ); mDelay1uS( ); /* 至少延時1uS */ /* *(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; 通過并口直接讀寫CH375而非普通I/O模擬 */ Set_Bit(PORTB,A);///* 輸出A0=1 寫入命令代碼 PORTA = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ DDRA = 0xFF; /* 并口D0-D7輸出 */ /* 輸出有效寫控制信號, 寫CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ Set_Bit(PORTB,A); Clr_Bit(PORTC,CS); Clr_Bit(PORTB,WR); Set_Bit(PORTB,RD); DDRA = 0xFF; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ /* 輸出無效的控制信號, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */ //Set_Bit(PORTB,A); Set_Bit(PORTC,CS); Set_Bit(PORTB,WR); Set_Bit(PORTB,RD); DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */ Clr_Bit(PORTB,A); /* 輸出A0=0; 可選操作 */ mDelay1uS( ); mDelay1uS( ); /* 至少延時2uS */ } void WriteData(UINT8 mData )// 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) { /* *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; 通過并口直接讀寫CH375而非普通I/O模擬 */ PORTA = mData; /* 向CH375的并口輸出數(shù)據(jù) */ DDRA = 0xFF; /* 并口D0-D7輸出 */ /* 輸出有效寫控制信號, 寫CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=0; RD=1; */ Clr_Bit(PORTB,A); Clr_Bit(PORTC,CS); Clr_Bit(PORTB,WR); Set_Bit(PORTB,RD); DDRA = 0xFF; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ /* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ //Clr_Bit(PORTB,A); Set_Bit(PORTC,CS); Set_Bit(PORTB,WR); Set_Bit(PORTB,RD); DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */ mDelay1uS( ); /* 至少延時1.2uS */ }unsigned char ReadData(void)/* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; /* mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR; 通過并口直接讀寫CH375而非普通I/O模擬 */ mDelay1uS( ); /* 至少延時1.2uS */ DDRA = 0x00; /* 數(shù)據(jù)輸入 */ /* 輸出有效讀控制信號, 讀CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */ Clr_Bit(PORTB,A); Clr_Bit(PORTC,CS); Set_Bit(PORTB,WR); Clr_Bit(PORTB,RD); DDRA = 0x00; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ mData = PINA; /* 從CH375的并口PA輸入數(shù)據(jù) */ /* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ //Clr_Bit(PORTB,A); Set_Bit(PORTC,CS); Set_Bit(PORTB,WR); Set_Bit(PORTB,RD); return( mData ); }

UINT8 USBTestwrite( void ) { UINT8 ii; UINT8 uTemp, jj; UINT8 *pFileTemp; int dwTemp1, dwTemp2; char *pTemp = "/TestUSB.DAT";

printf(" Create USB File = \"%s\" \n", pTemp); strcpy( (char *)mCmdParam.Create.mPathName, pTemp ); /* 新文件名,在根目錄下 */ ii = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ if ( ii != ERR_SUCCESS ) { printf(" Create File fail \n"); return 0x03; } printf(" Write File Now \n"); mCmdParam.ByteWrite.mByteCount = 64; for( ii = 0; ii < 64; ii++ ) mCmdParam.ByteWrite.mByteBuffer[ii] = ii; ii = CH375ByteWrite ( ); { if ( ii != ERR_SUCCESS ) { printf("CH375ByteWrite fail \n"); return 0x05; } } printf(" close File Now \n"); mCmdParam.Modify.mFileSize = 64; mCmdParam.Modify.mFileDate = 0xffff; mCmdParam.Modify.mFileTime = 0xffff; mCmdParam.Modify.mFileAttr = 0xff; CH375FileModify( );

#if 1 mCmdParam.Close.mUpdateLen = 1; /* 自動計算文件長度,以字節(jié)為單位寫文件,建議讓程序庫關閉文件以便自動更新文件長度 */ #endif ii = CH375FileClose( ); if ( ii != ERR_SUCCESS ) { printf(" Close File fail \n"); return 0x06; } strcpy( (char *)mCmdParam.Open.mPathName, "/TestUSB.DAT" ); /* Key文件名固定 */ uTemp = CH375FileOpen( ); /* 打開key文件 */ if ( uTemp != ERR_SUCCESS ) /* 打開key文件失敗 */ { printf("/n Error: Open File Error,uTemp= %x\n ",uTemp); return 0x01; } printf("/n Open File OK\n ");

dwTemp1 = MAX_FILE_LENG;/*上傳的最大文件長度為2M*/ dwTemp2 = 0;/*存放讀取的文件長度*/ pFileTemp = &FILE_DATA_BUF[0];/*Key文件存放緩沖區(qū)*/

dwTemp1 = FILE_DATA_BUF_LEN; while ( dwTemp1 ) { if ( dwTemp1 > MAX_BYTE_IO ) uTemp = MAX_BYTE_IO; /* 剩余數(shù)據(jù)較多,限制單次讀寫的長度不能超過 sizeof( mCmdParam.ByteRead.mByteBuffer ) */ else uTemp = dwTemp1;/* 最后剩余的字節(jié)數(shù) */ mCmdParam.ByteRead.mByteCount = uTemp; /* 請求讀出幾十字節(jié)數(shù)據(jù) */ jj = CH375ByteRead( ); /* 以字節(jié)為單位讀取數(shù)據(jù)塊,單次讀寫的長度不能超過MAX_BYTE_IO,第二次調(diào)用時接著剛才的向后讀 */ if ( jj != ERR_SUCCESS ) { CH375FileClose( ); printf("CH375ByteRead return Error %d\n", jj); return 0x02; } dwTemp1 -= mCmdParam.ByteRead.mByteCount; /* 計數(shù),減去當前實際已經(jīng)讀出的字符數(shù) */ dwTemp2 += mCmdParam.ByteRead.mByteCount; for ( jj = 0; jj != mCmdParam.ByteRead.mByteCount; jj++ ) *pFileTemp++ = mCmdParam.ByteRead.mByteBuffer[jj]; /* 將文件轉到緩沖區(qū),請注意:此地方可以做進一步的優(yōu)化 */

printf( "Reading File, len: 0x%x\n", mCmdParam.ByteRead.mByteCount ); for ( jj = 0; jj != mCmdParam.ByteRead.mByteCount; jj++ ) printf( "File: 0x%x\n", mCmdParam.ByteRead.mByteBuffer[jj] ); if ( mCmdParam.ByteRead.mByteCount < uTemp ) /* 實際讀出的字符數(shù)少于要求讀出的字符數(shù),說明已經(jīng)到文件的結尾 */ { printf( "Read File %s Over,the length is 0x%x\n", "/ZYDQ_KEY.DAT", dwTemp2 ); break; } } CH375FileClose( );/*關閉源文件*/ return 0; }


大哥你回答些什么啊


時序上面有點問題: void WriteCmd(UINT8 mCmd)//外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 { mDelay1uS( ); mDelay1uS( ); /* 至少延時1uS */ /* *(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; 通過并口直接讀寫CH375而非普通I/O模擬 */ Set_Bit(PORTB,A);///* 輸出A0=1 寫入命令代碼 PORTA = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ DDRA = 0xFF; /* 并口D0-D7輸出 */

/* 輸出有效寫控制信號, 寫CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ Set_Bit(PORTB,A); Set_Bit(PORTB,RD); Clr_Bit(PORTC,CS); Clr_Bit(PORTB,WR);

DDRA = 0xFF; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */

/* 輸出無效的控制信號, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */ //Set_Bit(PORTB,A); Set_Bit(PORTB,WR); Set_Bit(PORTC,CS); Set_Bit(PORTB,RD);

DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */ Clr_Bit(PORTB,A); /* 輸出A0=0; 可選操作 */ mDelay1uS( ); mDelay1uS( ); /* 至少延時2uS */ } void WriteData(UINT8 mData )// 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) { /* *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; 通過并口直接讀寫CH375而非普通I/O模擬 */ PORTA = mData; /* 向CH375的并口輸出數(shù)據(jù) */ DDRA = 0xFF; /* 并口D0-D7輸出 */

/* 輸出有效寫控制信號, 寫CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=0; RD=1; */ Clr_Bit(PORTB,A); Set_Bit(PORTB,RD); Clr_Bit(PORTC,CS); Clr_Bit(PORTB,WR);

DDRA = 0xFF; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */

/* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ //Clr_Bit(PORTB,A); Set_Bit(PORTB,WR); Set_Bit(PORTC,CS); Set_Bit(PORTB,RD);

DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */ mDelay1uS( ); /* 至少延時1.2uS */ }unsigned char ReadData(void)/* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; /* mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR; 通過并口直接讀寫CH375而非普通I/O模擬 */ mDelay1uS( ); /* 至少延時1.2uS */

DDRA = 0x00; /* 數(shù)據(jù)輸入 */

/* 輸出有效讀控制信號, 讀CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */ Clr_Bit(PORTB,A); Set_Bit(PORTB,WR); Clr_Bit(PORTC,CS); Clr_Bit(PORTB,RD);

DDRA = 0x00; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */

mData = PINA; /* 從CH375的并口PA輸入數(shù)據(jù) */

/* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */

//Clr_Bit(PORTB,A); Set_Bit(PORTB,RD); Set_Bit(PORTC,CS); Set_Bit(PORTB,WR);

return( mData ); } 你按照上面的時序來操作下看可以不可以,還有就是做測試命令的時候,你不能只做一組數(shù)據(jù),需要做2組數(shù)據(jù)才是最安全的,也就是你可以先做0X55數(shù)據(jù),看返回什么樣的數(shù)據(jù),接著在做0XAA數(shù)據(jù),看返回什么樣的數(shù)據(jù)就可以了。


我試驗 了一下 每次發(fā)送測試命令都可以返回正確的值 連續(xù)幾次都可以 就是發(fā)別的 沒反應 把優(yōu)盤插進去 沒反應 但是拔下來 能返回0x16! 真奇怪 我在看看我的硬件吧


有可能是插入U盤時,U盤耗電過大,造成電源不穩(wěn)定。 給USB口電源加個100uF左右的電容試試。


當你設置好模式6之后,在插上U盤,看下375的中斷引腳是高還是低??


真是奇怪啊奇怪 我加了100uf電容了! 我已經(jīng) 連續(xù)的讀 測試命令都對 但是讀版本的時候就返回0x5f 如果我的時序 和連線不對 是不是 測試命令就返回不了正確的了呢?


那你看下設置模式之后返回的是什么呢???返回的還是0x5f?


不好用啊見鬼!了! 他要是測試命令 返回也錯了也好 知道有錯的??!愛!!


設置模式之后 返回還是0x5f 怎么讀模式呢?


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频