ch375b讀寫u盤的問題

另外庫的連接方式是沒有什么問題的,我直接用的keil寫的,直接將庫加進(jìn)來的, ram測試程序在粘貼的時候有點(diǎn)問題, 重發(fā)一次: #include #include #include #include #define uchar unsigned char #define nop() _nop_() unsigned char xdata *add;//這里定義是一定要注意數(shù)據(jù)類型,這里的類型是指地址里的內(nèi)容的數(shù)據(jù)類型 unsigned char temp[30]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43};

void mInitSTDIO( void ) {/* 僅用于調(diào)試用途及顯示內(nèi)容到PC機(jī),與該程序功能完全無關(guān) */ SCON = 0x50; PCON = 0x80; TMOD = 0x20; TH1 = 0xfa; TR1=1; TI=1; /* 9600bps */ } void write() { uchar i; add=0x0000;//數(shù)據(jù)存儲的起始地址 for(i=0;i<14;i++)//連續(xù)存儲14個數(shù)據(jù) { *add=temp[i]; add++; }

} void read() {uchar i,t; add=0x0000; //讀取數(shù)據(jù)的起始地址 for(i=0;i<14;i++)//連續(xù)讀取14個數(shù)據(jù) { t=*add; add++; printf("Read Data is %x\n",t); } /*if(0x43==t) { P0=0xf7; } */ } void main() { mInitSTDIO(); write(); read(); while(1); }

返回結(jié)果是:

Read Data is 3000 Read Data is 3100 Read Data is 3200 Read Data is 3300 Read Data is 3400 Read Data is 3500 Read Data is 3600 Read Data is 3700 Read Data is 3800 Read Data is 3900 Read Data is 4000 Read Data is 4100 Read Data is 4200 Read Data is 4300

結(jié)果貌似沒有問題, 是否需要DISK_BASE_BUF_ADDR、DISK_BASE_BUF_LEN、FILE_DATA_BUF_ADDR 的宏定義改了, 好像和這個沒什么關(guān)系吧


這個函數(shù)我復(fù)制粘貼的時候老是對不上了喃, *add=temp[i];這句后的[i]老是顯示不出來。 是下面這樣的:

void write() { uchar i; add=0x0000;//數(shù)據(jù)存儲的起始地址 for(i=0;i<14;i++)//連續(xù)存儲14個數(shù)據(jù) { *add=temp[i]; add++; }

}


非常奇怪【i】這個東西在這個網(wǎng)頁上顯示不出來,


這個函數(shù)我復(fù)制粘貼的時候老是對不上了喃, *add=temp【i】;這句后的【i】老是顯示不出來。 是下面這樣的:

void write() { uchar i; add=0x0000;//數(shù)據(jù)存儲的起始地址 for(i=0;i<14;i++)//連續(xù)存儲14個數(shù)據(jù) { *add=temp【i】; add++; }

}

看來只有用中文個格式的【i】才顯示得出來。


我又發(fā)現(xiàn)了一個問題,我的62256地址范圍理論上是0000H----7FFFFH,都是我吧測試程序改為 #include #include #include #include #define uchar unsigned char #define nop() _nop_() unsigned char xdata *add;//這里定義是一定要注意數(shù)據(jù)類型,這里的類型是指地址里的內(nèi)容的數(shù)據(jù)類型 unsigned char temp[30]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43};

void mInitSTDIO( void ) {/* 僅用于調(diào)試用途及顯示內(nèi)容到PC機(jī),與該程序功能完全無關(guān) */ SCON = 0x50; PCON = 0x80; TMOD = 0x20; TH1 = 0xfa; TR1=1; TI=1; /* 9600bps */ } void write() { uchar i; add=0x7000;//數(shù)據(jù)存儲的起始地址 for(i=0;i<14;i++)//連續(xù)存儲14個數(shù)據(jù) { *add=temp【i】; add++; }

} void read() {uchar i,t; add=0x7000; //讀取數(shù)據(jù)的起始地址 for(i=0;i<14;i++)//連續(xù)讀取14個數(shù)據(jù) { t=*add; add++; printf("Read Data is %x\n",t); } /*if(0x43==t) { P0=0xf7; } */ } void main() { mInitSTDIO(); write(); read(); while(1); }

就只是把讀寫地址改了一下,讀出數(shù)據(jù)就為:

Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00 Read Data is ff00

好像62256有問題,都是到底是哪里出問題了呢,為什么沒改地址前面能夠讀寫,改了之后就不能讀寫了呢?


再次把62256的測試程序改為遍歷訪問:結(jié)果更出乎意料:

void write_test01() { for(add=0x0000;add<0x8000;add++)//連續(xù)存儲14個數(shù)據(jù) { *add=0x55; }

}

void read_test01() { uchar t; for(add=0x0000;add<8000;add++)//連續(xù)讀取14個數(shù)據(jù) { t=*add; printf("Read Data is %x\n",t); } }

結(jié)果前面一部分都是對了

Read Data is 0x55 Read Data is 0x55 Read Data is 0x55 Read Data is 0x55 Read Data is 0x55 Read Data is 0x55 Read Data is 0x55 ....... 后面的就成了雜亂無章的了: t0 e afdRaDfa t0 e adsa0Dait0 e afsRaDfait0 afsRaDfait0 e afsRa0fai 0 afdRa0Dai t0 e afdsR0Dfait0 afdRa0Dfa t0 adsR0Dfa t0 e afdRa0fait0 afdsa0Dfait0 e afdsRa0fai 0 e fdsRaDfait0 adsRaDfait0 e adsRaDfa t0 e fdsa0Dfait0 e afdRa0fai 0 e afdsR0Dfa t0 e afdsa0Dfa t0 afsRaDfa t0 e afdRa0fai 0 afdsa0Dfi t e afdRa0Dfa t0 e afdsa0Dfait0 e adsR0Dfi t0 e afsRaDfa t0 afdRa0fai 0 afdsR0Dfai t e adsRa0fai t0 afds

不知道是什么問題,這是不是就證明了62256有問題?


這個就需要知道你的硬件連接以及算的地址是否正確!


連接就是依次連接,A15接cs#,那算的地址就是0000----7ffff啊, 這個是可以肯定的。


我就是按照官方的原理圖做的板子, 不過在P0口加了上拉電阻, 這個沒什么影響吧。


在徹底無望之后 我用網(wǎng)上非常流行的180句u盤測試程序測試ch375b, 入下:

#include #include "CH375INC.H" #include /* 以下定義適用于MCS-51單片機(jī),其它單片機(jī)參照修改 */ #define UINT8 unsigned char #define UINT16 unsigned short #define UINT32 unsigned long #define UINT8X unsigned char xdata #define UINT8VX unsigned char volatile xdata UINT8VX CH375_CMD_PORT _at_ 0xBDF1; /* CH375命令端口的I/O地址 */ UINT8VX CH375_DAT_PORT _at_ 0xBCF0; /* CH375數(shù)據(jù)端口的I/O地址 */ #define CH375_INT_WIRE INT0 /* P3.2, 連接CH375的INT#引腳,用于查詢中 斷狀態(tài) */ UINT8X DISK_BUFFER[512*32] _at_ 0x0000; /* 外部RAM數(shù)據(jù)緩沖區(qū)的起始地址 */

UINT32 DiskStart; /* 邏輯盤的起始絕對扇區(qū)號LBA */ UINT8 SecPerClus; /* 邏輯盤的每簇扇區(qū)數(shù) */ UINT8 RsvdSecCnt; /* 邏輯盤的保留扇區(qū)數(shù) */ UINT16 FATSz16; /* FAT16邏輯盤的FAT表占用的扇區(qū)數(shù) */

/* ********** 硬件USB接口層,無論如何這層省不掉,單片機(jī)總要與CH375接口吧 */

void mDelaymS( UINT8 delay ) { UINT8 i, j, c; for ( i = delay; i != 0; i -- ) { for ( j = 200; j != 0; j -- ) c += 3; for ( j = 200; j != 0; j -- ) c += 3; } }

void CH375_WR_CMD_PORT( UINT8 cmd ) { /* 向CH375的命令端口寫入命令 */ CH375_CMD_PORT=cmd; for ( cmd = 2; cmd != 0; cmd -- ); /* 發(fā)出命令碼前后應(yīng)該各延時2uS */ } void CH375_WR_DAT_PORT( UINT8 dat ) { /* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù) */ CH375_DAT_PORT=dat; /* 因?yàn)镸CS51單片機(jī)較慢所以實(shí)際上無需延時 */ } UINT8 CH375_RD_DAT_PORT( void ) { /* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù) */ return( CH375_DAT_PORT ); /* 因?yàn)镸CS51單片機(jī)較慢所以實(shí)際上無需延時 */ } UINT8 mWaitInterrupt( void ) { /* 等待CH375中斷并獲取狀態(tài),返回操作狀態(tài) */ while( CH375_INT_WIRE ); /* 查詢等待CH375操作完成中斷(INT#低電平) */ CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 產(chǎn)生操作完成中斷,獲取中斷狀態(tài) */ return( CH375_RD_DAT_PORT( ) ); }

/* ********** BulkOnly傳輸協(xié)議層,被CH375內(nèi)置了,無需編寫單片機(jī)程序 */

/* ********** RBC/SCSI命令層,雖然被CH375內(nèi)置了,但是要寫程序發(fā)出命令及收發(fā)數(shù)據(jù) */

UINT8 mInitDisk( void ) { /* 初始化磁盤 */ UINT8 Status; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) */ Status = CH375_RD_DAT_PORT( ); if ( Status == USB_INT_DISCONNECT ) return( Status ); /* USB設(shè)備斷開 */ CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存儲器 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ //printf("Init_Point1\n");//函數(shù)內(nèi)測試1 if ( Status != USB_INT_SUCCESS ) return( Status ); /* 出現(xiàn)錯誤 */ CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 獲取USB存儲器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ //printf("Init_Point2\n");//函數(shù)內(nèi)測試點(diǎn)2 if ( Status != USB_INT_SUCCESS ) { /* 出錯重試 */ /* 對于CH375A芯片,建議在此執(zhí)行一次CMD_DISK_R_SENSE命令 */ mDelaymS( 250 ); CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 獲取USB存儲器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ } //printf("Init_Point3\n"); if ( Status != USB_INT_SUCCESS ) return( Status ); /* 出現(xiàn)錯誤 */ //printf("Init_Point4\n"); return( 0 ); /* U盤已經(jīng)成功初始化 */ }

UINT8 mReadSector( UINT32 iLbaStart, UINT8 iSectorCount, UINT8X *oDataBuffer ) { UINT16 mBlockCount; UINT8 c; CH375_WR_CMD_PORT( CMD_DISK_READ ); /* 從USB存儲器讀數(shù)據(jù)塊 */ CH375_WR_DAT_PORT( (UINT8)iLbaStart ); /* LBA的最低8位 */ CH375_WR_DAT_PORT( (UINT8)( iLbaStart >> 8 ) ); CH375_WR_DAT_PORT( (UINT8)( iLbaStart >> 16 ) ); CH375_WR_DAT_PORT( (UINT8)( iLbaStart >> 24 ) ); /* LBA的最高8位 */ CH375_WR_DAT_PORT( iSectorCount ); /* 扇區(qū)數(shù) */ for ( mBlockCount = iSectorCount * 8; mBlockCount != 0; mBlockCount -- ) { c = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( c == USB_INT_DISK_READ ) { /* 等待中斷并獲取狀態(tài),請求數(shù)據(jù)讀出 */ CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 從CH375緩沖區(qū)讀取數(shù)據(jù)塊 */ c = CH375_RD_DAT_PORT( ); /* 后續(xù)數(shù)據(jù)的長度 */ while ( c -- ) *oDataBuffer++ = CH375_RD_DAT_PORT( ); CH375_WR_CMD_PORT( CMD_DISK_RD_GO ); /* 繼續(xù)執(zhí)行USB存儲器的讀操作 */ } else break; /* 返回錯誤狀態(tài) */ } if ( mBlockCount == 0 ) { c = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( c== USB_INT_SUCCESS ) return( 0 ); /* 操作成功 */ } return( c ); /* 操作失敗 */ }

/* ********** FAT文件系統(tǒng)層,這層程序量實(shí)際較大,不過,該程序僅演示極簡單的功能,所 以精簡 */

UINT16 mGetPointWord( UINT8X *iAddr ) { /* 獲取字?jǐn)?shù)據(jù),因?yàn)镸CS51是大端格式 */ return( iAddr[0] | (UINT16)iAddr[1] << 8 ); } /********************************************************************/ UINT8 mIdenDisk( void )/* 識別分析當(dāng)前邏輯盤 */ { UINT8 Status; DiskStart = 0; /* 以下是非常簡單的FAT文件系統(tǒng)的分析,正式應(yīng)用絕對不應(yīng)該如此簡單 */ Status = mReadSector( 0, 1, DISK_BUFFER ); /* 讀取邏輯盤引導(dǎo)信息 */ if ( Status != 0 ) return( Status ); printf("Reach IdenDisk01...\n"); if ( (DISK_BUFFER[0] != 0xEB) && (DISK_BUFFER[0] != 0xE9) ) {/* 不是邏輯引導(dǎo)扇區(qū) */ DiskStart = DISK_BUFFER[0x1C6] | ((UINT16)DISK_BUFFER[0x1C7] << 8) | ((UINT32)DISK_BUFFER[0x1C8] << 16 )| ((UINT32)DISK_BUFFER[0x1C9] << 24); Status = mReadSector( DiskStart, 1, DISK_BUFFER ); if ( Status != 0 ) return( Status ); printf("Reach IdenDisk02...\n"); } SecPerClus = DISK_BUFFER[0x0D]; /* 每簇扇區(qū)數(shù) */ RsvdSecCnt = DISK_BUFFER[0x0E]; /* 邏輯盤的保留扇區(qū)數(shù) */ FATSz16 = mGetPointWord( &DISK_BUFFER[0x16] ); /* FAT表占用扇區(qū)數(shù) */ return( 0 ); /* 成功 */ }

UINT16 mLinkCluster( UINT16 iCluster ) { /* 獲得指定簇號的鏈接簇 */ /* 輸入: iCluster 當(dāng)前簇號, 返回: 原鏈接簇號, 如果為0則說明錯誤 */ UINT8 Status; Status = mReadSector( DiskStart + RsvdSecCnt + iCluster / 256, 1, DISK_BUFFER ); if ( Status != 0 ) return( 0 ); /* 錯誤 */ return( mGetPointWord( &DISK_BUFFER[ ( iCluster + iCluster ) & 0x01FF ] ) ); }

UINT32 mClusterToLba( UINT16 iCluster ) { /* 將簇號轉(zhuǎn)換為絕對LBA扇區(qū)地址 */ return( DiskStart + RsvdSecCnt + FATSz16 * 2 + 32 + ( iCluster - 2 ) * SecPerClus ); }

void mInitSTDIO( void ) { /* 僅用于調(diào)試用途及顯示內(nèi)容到PC機(jī),與該程序功能完全無 關(guān) */ SCON = 0x50; PCON = 0x80; TMOD = 0x20; TH1 = 0xfa; TR1=1; TI=1; /* 24MHz, //已更改為f9,實(shí)際使用的為12mhz的晶振 9600bps */ } void mStopIfError( UINT8 iErrCode ) { /* 如果錯誤則停止運(yùn)行并顯示錯誤狀態(tài) */ if ( iErrCode == 0 ) return; printf( "Error status, %02X\n", (UINT16)iErrCode ); }

main( ) { UINT8 Status; UINT8X *CurrentDir; UINT16 Cluster; mDelaymS( 200 ); /* 延時200毫秒 */ mInitSTDIO( ); CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); /* 初始化CH375,設(shè)置USB工作模式 */ CH375_WR_DAT_PORT( 6 ); /* 模式代碼,自動檢測USB設(shè)備連接 */ while ( 1 ) { printf( "Insert USB disk\n" ); while ( mWaitInterrupt( ) != USB_INT_CONNECT ); /* 等待U盤連接 */ mDelaymS( 250 ); /* 延時等待U盤進(jìn)入正常工作狀態(tài) */ Status = mInitDisk( ); /* 初始化U盤,實(shí)際是識別U盤的類型,必須進(jìn)行此步驟 */ mStopIfError( Status ); printf("%02x\n",Status); //測試錯誤 Status = mIdenDisk( ); /* 識別分析U盤文件系統(tǒng),必要操作 */ //printf("%x\n",Status); //測試錯誤 mStopIfError( Status ); printf("Reach TestPoint1\n"); Status = mReadSector( DiskStart + RsvdSecCnt + FATSz16 * 2, 32,DISK_BUFFER ); mStopIfError( Status ); /* 讀取FAT16邏輯盤的根目錄,通常根目錄占用32個扇區(qū)*/ for ( CurrentDir = DISK_BUFFER; CurrentDir[0] != 0; CurrentDir += 32 ) { if ( ( CurrentDir[0x0B] & 0x08 )


把上面一小段改為:

也就是不讓它檢查是不是c文件都顯示出來 // if ( ((DISK_BUFFER[0x0B]&0x08)==0) && (DISK_BUFFER[0]!=0xE5) && (DISK_BUFFER[8]=='C') ) // { Cluster = mGetPointWord( &DISK_BUFFER[0x1A] ); /* 文件的首簇 */ while ( Cluster < 0xFFF8 ) { /* 文件簇未結(jié)束 */ if ( Cluster == 0 ) mStopIfError( 0x8F );/* 對于首簇,可能是0長度文件*/ Status = mReadSector( mClusterToLba( Cluster ), SecPerClus,DISK_BUFFER ); mStopIfError( Status ); /* 讀取首簇到緩沖區(qū) */ DISK_BUFFER[30] = 0; printf( "Data: %s\n", DISK_BUFFER ); /* 顯示首行*/ Cluster = mLinkCluster( Cluster ); /* 獲取鏈接簇,返回0說明錯誤 */ } // } while ( mWaitInterrupt( ) != USB_INT_DISCONNECT ); /* 等待U盤拔出 */ mDelaymS( 250 );

結(jié)果為:

Insert USB disk 00 Reach IdenDisk01... Reach IdenDisk02... Reach TestPoint1 Name: CH375HFTC Error status, 8F Data:


哭訴:::: :::我調(diào)了好久的62256了 還是沒調(diào)出來,只有前面一部分寫入的是和讀出的值是一樣的,后面的都不一樣:::: ?。。?!救命?。。。。。。。。。。。。。。。。。?!

只有把前面的地址addr改為0000讀出的數(shù)是ff66,改為1000和以上的值就為7600了,

我要瘋了啊,62256調(diào)了這么久,什么時候才能調(diào)u盤?。???

#include "reg52.h" #include "absacc.h" #include "stdio.h" #define uchar unsigned char #define uint unsigned int uchar xdata *addr; //地址變量 void mInitSTDIO( void ); void main() { int i,j; for(j=0;j<2000;j++); mInitSTDIO(); /*TMOD=0x20; SCON=0xd8; TH1=TL1=0xfa; // 9600,8,n,1 TR1=1; */ addr=0x0000; //for(addr=0x7fff;addr>0x0000;addr--)//用遍歷的方式對RAM寫0X55 //{ //*addr=0x55; //} for(i=0;i<10;i++) { *addr=0x66; addr++; }

//for(addr=0x0000;addr<0x8000;addr++)//再用遍歷的方式讀出來,并發(fā)送到串口 //{ for(i=0;i<10;i++) {//printf("%d=",i); printf("%x\n",*addr); addr--; } //SBUF=*addr; // while(!TI); // TI=0;

while(1); }

void mInitSTDIO( void ) { SCON = 0x50; PCON = 0x80; TMOD = 0x20; TH1 = 0xfa; TR1=1; TI=1; /* 9600bps */ }


請問調(diào)試結(jié)果 “結(jié)果為:

Insert USB disk 00 Reach IdenDisk01... Reach IdenDisk02... Reach TestPoint1 Name: CH375HFTC Error status, 8F Data:


各位大俠:我用的是ch375B 讀寫u盤。單片機(jī)為at89s52。ch375b工作于串行方式。波特率為9600pbs. 程序有如下:      void rtyuri(uchar ryug) { SBUF=ryug; while(!TI); TI=0; _nop_(); _nop_(); _nop_(); }

void pos_usb(void) { uchar ucar; _nop_(); _nop_(); TB8=1; rtyuri(0x15); TB8=0; rtyuri(0x05); times_10us(3); //切換至已啟用的USB主機(jī)模式5 while(!RI); RI=0; ucar=SBUF; if(ucar==0x51) { TB8=1; rtyuri(0x16); //自動檢查USB的連接狀態(tài) _nop_(); _nop_(); EX0=1; times_20ms(8); //等待200ms EX0=0; green1=1; } else { TB8=1; rtyuri(0x05); times_20ms(4);//執(zhí)行一次usb硬件復(fù)位

rtyuri(0x15); TB8=0; rtyuri(0x05);//設(shè)定為模式5 times_10us(4);//延時等待40us while(!RI); RI=0; ucar=SBUF; if(ucar==0x51) { EX0=1; times_20ms(8); //等待200ms EX0=0; green1=1; } else { while(1) { times_1s(); times_1s(); blue=!blue; } }

} }

void pss_usb(void) { uchar pst; uchar spoy; uchar eerys; _nop_(); _nop_(); TB8=1; rtyuri(0x06); _nop_(); _nop_(); TB8=0; eerys=0x57; rtyuri(eerys); while(!RI); RI=0; blue=0; spoy=SBUF; if(~spoy==eerys)//0xa8 pos_usb(); //說明ch375工作正常,調(diào)用ch375初始化函數(shù) else { //復(fù)位執(zhí)行usb硬件復(fù)位 for(pst=100;pst!=0;pst--) { _nop_(); _nop_(); TB8=1; rtyuri(0x05); times_20ms(4);//執(zhí)行多次硬件復(fù)位 TB8=1; rtyuri(0x06); _nop_(); _nop_(); TB8=0; eerys=0x55; rtyuri(eerys);//發(fā)送一個字節(jié)的數(shù)據(jù) while(!RI);//等待接收數(shù)據(jù) RI=0; spoy=SBUF; if(~spoy==eerys) break; } if(pst==0) { while(1) { red=!red; times_1s(); times_1s(); } } else pos_usb(); //說明ch375工作正常,調(diào)用ch375初始化函數(shù) } }    void int0_ex0(void) interrupt 0 { uchar yous; ryeiu++; TB8=1; rtyuri(0x22); //獲取中斷狀態(tài) ,等待接收狀態(tài)碼,并且取消中斷請求 while(!RI); RI=0; green1=0; // yous=SBUF; if(ryeiu==1) { if(yous==0x15||0x82) //檢測到usb設(shè)備的連接事件 { TB8=1; rtyuri(0x15); TB8=0; rtyuri(0x07);//重新復(fù)位usb總線 times_30us(); TB8=1; rtyuri(0x15); TB8=0; rtyuri(0x06);//切換到已經(jīng)啟用的usb模式6 delay_times1s(); } else ryeiu=0; } else if(ryeiu==2) { if(yous==0x15) { TB8=1; rtyuri(0x51);//初始化usb存儲器,自動配置枚舉 } else ryeiu=0; } else if(ryeiu==3) { if(yous==0x14)//usb事務(wù)或者枚舉傳輸操作成功 { { ryeiu=0; yes_sucess=0; } else { if(yous==0x17)//傳輸數(shù)據(jù)出錯,重試 { TB8=1; rtyuri(0x51);//重新初始化usb存儲器,自動配置枚舉 } else ryeiu=0; } } else if(ryeiu==4) { ryeiu=0; if(yous==0x14) yes_sucess=0; else red=0; } IE0=0; }

調(diào)試兩天了,發(fā)現(xiàn)當(dāng)u盤插入時,進(jìn)入了中斷。 但發(fā)送rtyuri(0x22); 獲取中斷狀態(tài)的命令時,返回的狀態(tài)碼 怎么總是_DISK_DISCON 0x82 /* 磁盤尚未連接,可能磁盤已經(jīng)斷開 */ 而不是0x15呢? 我把U盤插入WIN xp 下。能正常工作。我更換新的ch375b芯片,還是一樣。我的硬件也沒有什么問題?。≌垎柛魑淮髠b指點(diǎn),這是怎么一回事呀????


如果出現(xiàn)了0X82的話,那么需要你去檢查下: 1,供電電壓是否充足,在給U盤供電的時候一定要5V電源. 2,USB口的4根信號線是否連接正確,正確的連接方法為VCC,D-,D+,GND 3,設(shè)置模式的時候需要設(shè)置模式6,而不是模式5


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

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