具體是在初始化后,讀U盤0扇區(qū),讀出的是商標(biāo),版本信息(36個(gè)字節(jié))。不是DBR或MBR.我在讀寫數(shù)據(jù)口,命令口時(shí)沒(méi)有怎么延時(shí),會(huì)不會(huì)影響? ;*************************/* 從USB存儲(chǔ)器讀數(shù)據(jù)塊子函數(shù)*/************************ MREADS:
LDB R10,C ;需要讀的扇區(qū)數(shù)
LDB A,#CMD_DISK_READ 讀數(shù)據(jù)指令 STB A,CH375_CMD_PORT MREADS2: STB W1,CH375_DAT_PORT;;/* LBA的最低8位 */ STB W2,CH375_DAT_PORT;;/* LBA的次低8位 */ STB W3,CH375_DAT_PORT;;/* LBA的次高8位 */ STB W4,CH375_DAT_PORT;;/* LBA的最高8位 */ STB R10,CH375_DAT_PORT; /* 扇區(qū)數(shù) */ MULUB R10,#8 叁扇區(qū)數(shù)×中斷數(shù) JBC POR2,2,$ ;判中斷引腳,是低到高躍變時(shí)中斷,后來(lái)未用 MREADS3: LCALL DIS_ZERO_16H 僅僅為了延時(shí) LDB A,#CMD_GET_STATUS 讀中斷狀態(tài)并獲取狀態(tài),請(qǐng)求數(shù)據(jù)寫入 STB A,CH375_CMD_PORT LDB A,CH375_DAT_PORT 讀
CMPB A,#1DH 判斷是否是讀 JNE MREADS
LDB A,#CMD_RD_USB_DATA /*往CH375緩沖區(qū)寫入數(shù)據(jù)塊 */ STB A,CH375_CMD_PORT
LDB SSI,CH375_DAT_PORT /* ssi=后續(xù)數(shù)據(jù)的長(zhǎng)度 */
MREADS4: MREADS5: LDB A,CH375_DAT_PORT ;根據(jù)ssi讀數(shù)據(jù) STB A,[W5]+ DJNZ SSI,MREADS5 MREADS6: LDB A,#CMD_DISK_RD_GO /* 繼續(xù)執(zhí)行USB存儲(chǔ)器的讀操作 */ STB A,CH375_CMD_PORT
DJNZ R10,MREADS3 ;根據(jù)中斷數(shù)循環(huán)8次
; JBC POR2,2,$ MREADS9: ;第9次中斷 (最后一次) LDB C,#CMD_GET_STATUS 讀中斷狀態(tài)并獲取狀態(tài),請(qǐng)求數(shù)據(jù)讀出 STB C,CH375_CMD_PORT LDB C,CH375_DAT_PORT CMPB C,#14H JNE MREADS9
MREADS7: RET
;*************************/* 調(diào)用讀扇區(qū)函數(shù)*/************************ 入口函數(shù):w1 w2 w3 w4 是邏輯扇區(qū)lba,C是要讀的扇區(qū)數(shù),w5是存儲(chǔ)讀出扇區(qū)數(shù)據(jù)的數(shù)組首地址 LDB W1,#0 LDB W2,#0 LDB W3,#0 LDB W4,#0 LDB C,#1 LD W5,#AR_DATA; LCALL MREADS /* 讀取邏輯盤引導(dǎo)信息
[Emot]3[/Emot][Emot]3[/Emot]