[求助]關(guān)于CH375寫扇區(qū)的問題

是不是寫扇區(qū)的時候只有在寫入64個字節(jié)才可以產(chǎn)生USB_INT_SUCCESS,要是寫入一個字節(jié)或不滿64個字節(jié)能產(chǎn)生此中斷嗎.或者說有其他什么簡單辦法可以嘗試著讀寫扇區(qū).謝謝[Emot]13[/Emot]

一定要寫64個字節(jié),因為數(shù)據(jù)都是512的倍數(shù)來傳輸?shù)? 另外你說其他辦法是什么意思?


;寫扇區(qū) MOV DPTR,#CMD ;寫命令 MOV A,#56H MOVX @DPTR,A

MOV DPTR,#DAT ;寫入5個數(shù)據(jù) MOV A,#32H ;LBA地址最低字節(jié) MOVX @DPTR,A MOV A,#00H ;較低字節(jié) MOVX @DPTR,A MOV A,#00H ;較高字節(jié) MOVX @DPTR,A MOV A,#00H ;最高字節(jié) MOVX @DPTR,A MOV A,#01H ;此字節(jié)為扇區(qū)數(shù) MOVX @DPTR,A ;獲取中斷狀態(tài) MOV DPTR,#CMD MOV A,#22H MOVX @DPTR,A ;1EH為請求數(shù)據(jù)寫入中斷

;將數(shù)據(jù)寫入指定扇區(qū),用WR_USB_DATA7命令 MOV DPTR,#CMD ;命令 MOV A,#2BH MOVX @DPTR,A MOV DPTR,#DAT ;寫數(shù)據(jù) MOV A,#64 ;64個字節(jié) MOVX @DPTR,A MOV A,#11H ;連續(xù)64個,此處省略 MOVX @DPTR,A

;繼續(xù)寫,用DISK_WR_GO MOV DPTR,#CMD MOV A,#57H MOVX @DPTR,A

;獲取中斷狀態(tài) MOV DPTR,#CMD MOV A,#22H MOVX @DPTR,A

這是我寫扇區(qū)的部分程序,其中寫數(shù)據(jù)時候連續(xù)寫了64個11H,(此處已刪除其余63個)即64個字節(jié),但是寫完后沒有USB_INT_SUCCESS中斷產(chǎn)生,請問我該如何寫入這64個字節(jié)才可以成功寫入扇區(qū).謝謝!(我是用單步執(zhí)行的)


寫完數(shù)據(jù)后,應(yīng)該去等待中斷到來再去讀中斷狀態(tài),而不是直接寫完馬上就去讀,另外寫完64個字節(jié)后要發(fā)送繼續(xù)寫數(shù)據(jù)的命令,你才可能等到返回成功的中斷狀態(tài). 返回的狀態(tài)也不是成功的狀態(tài)而是USB_INT_DISK_WRITE USB存儲器寫數(shù)據(jù)塊, 請求數(shù)據(jù)寫入, 參考如下程序: for ( mBlockCount = iSectorCount * BlockPerSector; mBlockCount != 0; mBlockCount -- ) { /* 數(shù)據(jù)塊計數(shù) */ mIntStatus = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( mIntStatus == USB_INT_DISK_WRITE ) { /* USB存儲器寫數(shù)據(jù)塊,請求數(shù)據(jù)寫入 */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向CH375緩沖區(qū)寫入數(shù)據(jù)塊 */ mLength = CH375_BLOCK_SIZE; CH375_WR_DAT_PORT( mLength ); /* 后續(xù)數(shù)據(jù)的長度 */ while ( mLength ) { /* 根據(jù)長度寫入數(shù)據(jù) */ CH375_WR_DAT_PORT( *mBufferPoint ); /* 將數(shù)據(jù)寫入 */ mBufferPoint ++; mLength --; } /* do { 對于C51,這個DO+WHILE結(jié)構(gòu)比上面的WHILE效率高,速度快 CH375_WR_DAT_PORT( *mBufferPoint ); mBufferPoint ++; } while ( -- mLength );*/ CH375_WR_CMD_PORT( CMD_DISK_WR_GO ); /* 繼續(xù)執(zhí)行USB存儲器的寫操作 */ }


我不太明白您說的等待中斷的意思,是延時嗎,我是單步運行程序的. USB_INT_DISK_WRITE中斷是在寫扇區(qū)的命令DISK_WRITE后面的吧,這個是可以的.得到此中斷后我用WR_USB_DATA7命令,再寫數(shù)據(jù)塊的長度(為64),和數(shù)據(jù)流(64個11H),然后DISK_WR_GO命令,接著不是應(yīng)該可以讀到USB_INT_SUCCESS中斷了嗎? 還有就是我寫數(shù)據(jù)的時候就直接寫64個11H沒有用緩沖區(qū),這個會不會影響USB_INT_SUCCESS中斷的產(chǎn)生.


發(fā)送完DISK_WR_GO之后,CH375會返回一個中斷狀態(tài)USB_INT_DISK_WRITE,這時你可以繼續(xù)寫入數(shù)據(jù).


當(dāng)你寫完數(shù)據(jù)后的狀態(tài)是成功,不滿512的話就不是返回USB_INT_SUCCESS,你看一下C語言的流程,當(dāng)循環(huán)的時候, if ( mIntStatus == USB_INT_DISK_WRITE ),當(dāng)寫完的時候 if ( mBlockCount == 0 ) { mIntStatus = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( mIntStatus == USB_INT_SUCCESS ) return( 0 ); /* 操作成功 */ } 參考:CH375EVT\PUB\MCS51C\MISCELL\CH375EV0.C


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

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