我也是這么想的,可我剛才實驗了一下,好像還是有問題,我發(fā)送命令22H,結(jié)果發(fā)送寄存器中的數(shù)據(jù)是15,而且有奇偶錯誤狀態(tài)出現(xiàn)!該怎么解決呢?
請教一下:主控芯片和375之間電平相同不用加max232,但因為我用的是以前的板子,直接用跳線連接的375,板子上面還是有一個232在工作,會不會影響數(shù)據(jù)的發(fā)送???
我也是這么想的,可我剛才實驗了一下,好像還是有問題,我發(fā)送命令22H,結(jié)果發(fā)送寄存器中的數(shù)據(jù)是15,而且有奇偶錯誤狀態(tài)出現(xiàn)!該怎么解決呢?
請教一下:主控芯片和375之間電平相同不用加max232,但因為我用的是以前的板子,直接用跳線連接的375,板子上面還是有一個232在工作,會不會影響數(shù)據(jù)的發(fā)送???
我用寄存器保存了從開始到磁盤準備好過程中發(fā)送和接收到得數(shù)據(jù)(都是16進制的): 發(fā)送出的數(shù)據(jù)(命令和數(shù)據(jù)):06 65 01 15 06 22 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 接收到得數(shù)據(jù):09 FF B7 15 FF 15 A1 15 A1 15 A1 15 A1 15 A1 15 A1 15 A1 15 A1 15 A1 15 請幫忙分析一下可對?我對著375的命令說明有很多與它不對應(yīng),發(fā)送的數(shù)據(jù)不相同!為什么?幫忙看看我的u盤可初始化好了?可能進行讀寫?謝謝!
說明:初始化和查看磁盤是否準備好都已經(jīng)通過![Emot]27[/Emot]
把串口上的max232去掉,測試命令是否可以通過,可以先不使用庫函數(shù),直接讀寫U盤的物理扇區(qū),看看是否可以成功?參考CH375EVT\PUB\MCS51C\MISCELL下面的例程.
上面的數(shù)據(jù)都是去掉232以后的測試數(shù)據(jù)!從數(shù)據(jù)看測試可以通過,但好像獲取最大邏輯單元號一直不能發(fā)送38H,謝謝_study_ ,我就先按照你的辦法測試一下!
對于直接讀寫u盤的物理扇區(qū),CH375的命令端口和數(shù)據(jù)端口的地址如下: 這個地址是什么意思?怎么理解,我可以直接使用?
這個地址是通過CS、AO計算出來的,符合要求的很多,這只是其中一種 CS = 0, A0 = 1:命令口地址 CS = 0, A0 = 0:數(shù)據(jù)口地址 其中CS是有A15,A14,A13、A12譯碼產(chǎn)生,A0接A8 下載EV375PCB.ZIP,參考原理圖,只要你的硬件連接也可以產(chǎn)生這個地址且不與其他器件沖突,就可以用
這是51下面用總線方式設(shè)置的地址(由硬件決定),你是用串口的,只需要使用串口讀寫的三個子函數(shù)就可以了
謝謝!這個問題我本來想刪掉的,結(jié)果沒看到哪里有刪除!程序修改中。。。
我按照CH375EVT\PUB\MCS51C\MISCELL把程序修改了,還是不行!初始化都是好的,但在獲得獲取設(shè)備描述符的時候只能得到數(shù)據(jù)長度,然后讀取數(shù)據(jù)的時候就會一直等待了?好像程序就不能連續(xù)讀取數(shù)據(jù)似的?。?!
請教一下:獲取的設(shè)備描述符只有17個字節(jié),有沒有錯誤?現(xiàn)在usb地址已經(jīng)設(shè)置好了,我怎么操作來讀取扇區(qū)呢?
17個不對,應(yīng)該是18個,很奇怪,怎么少一個,你把你獲取的描述符貼出來看以下,少了哪個字節(jié). 至于怎么讀扇區(qū),你參考的程序里面已經(jīng)有了,建議您先仔細看一下整個程序的詳細步驟操作流程后再做實驗,避免不必要的錯誤.
不好意思 是18個!我現(xiàn)在遇到一個很奇怪的問題,我按例程寫的程序,全速運行怎么都運行不了獲取設(shè)備描述符,但我在仿真環(huán)境下在設(shè)置工作模式為7后停一下再運行就可以很順利的完成操作,一開始我以為是延時的問題,可我在停的地方加上10秒的延時它照樣還是不能讀描述符!這是為什么? 全速運行得到的描述符長度是20!不是18 ?。。?!暈了 !
按照這個流程: set_usb_mode( 6 ); /* 設(shè)置USB主機模式 */ while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待USB設(shè)備連接上來 */ set_usb_mode( 7 ); mDelaymS( 10 ); set_usb_mode( 6 ); mDelaymS( 100 ); while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待USB設(shè)備連接上來 */ ***** 正常操作 **** 測試以下.設(shè)置模式7后一定要延時,但是不能這么長,這是一個復(fù)位信號.
uint8 CH375LibInit( void ) /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ { unsigned char c,i; xWriteCH375Cmd(0x15); xWriteCH375Data(6); for(i=0xff;i!=0;i--) { c=xReadCH375Data(); if(c==CMD_RET_SUCCESS)break; } if(i!=0)return(USB_INT_SUCCESS); else return(0xff); }
i = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ mStopIfError( i ); while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ //mDelaymS( 200 ); /* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */ while( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); xWriteCH375Cmd(0x15); xWriteCH375Data(7);//reset 375 mDelaymS( 10 ); CH375DiskStatus=0; xWriteCH375Cmd(0x15); xWriteCH375Data(6); mDelaymS( 100 ); //i=CH375LibInit();// initial 375 //mStopIfError( i );// judge whether 375 is successfully initialed while( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); i=mCtrlGetDescr(1);//to get the USB's signature longth=mReadCH375Long();
這是我的程序,設(shè)置模式7后不管延時不延時得到的longth都是20!是我哪里有問題嗎?
這是它讀到得20位描述符數(shù)據(jù)(十六進制):12 12 01 00 02 00 00 00 40 07 13 65 01 00 01 01 02 03 01最后一位一直是讀不到得,這是前19位,正確的數(shù)據(jù)應(yīng)該是:12 01 00 02 00 00 00 40 07 13 65 01 00 01 01 02 03 01 幫忙分析一下,謝謝!為什么會使兩個12