具体是在初始化后,读U盘0扇区,读出的是商标,版本信息(36个字节)。不是DBR或MBR.我在读写数据口,命令口时没有怎么延时,会不会影响? ;*************************/* 从USB存储器读数据块子函数*/************************ MREADS:
LDB R10,C ;需要读的扇区数
LDB A,#CMD_DISK_READ 读数据指令 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; /* 扇区数 */ MULUB R10,#8 叁扇区数×中断数 JBC POR2,2,$ ;判中断引脚,是低到高跃变时中断,后来未用 MREADS3: LCALL DIS_ZERO_16H 仅仅为了延时 LDB A,#CMD_GET_STATUS 读中断状态并获取状态,请求数据写入 STB A,CH375_CMD_PORT LDB A,CH375_DAT_PORT 读
CMPB A,#1DH 判断是否是读 JNE MREADS
LDB A,#CMD_RD_USB_DATA /*往CH375缓冲区写入数据块 */ STB A,CH375_CMD_PORT
LDB SSI,CH375_DAT_PORT /* ssi=后续数据的长度 */
MREADS4: MREADS5: LDB A,CH375_DAT_PORT ;根据ssi读数据 STB A,[W5]+ DJNZ SSI,MREADS5 MREADS6: LDB A,#CMD_DISK_RD_GO /* 继续执行USB存储器的读操作 */ STB A,CH375_CMD_PORT
DJNZ R10,MREADS3 ;根据中断数循环8次
; JBC POR2,2,$ MREADS9: ;第9次中断 (最后一次) LDB C,#CMD_GET_STATUS 读中断状态并获取状态,请求数据读出 STB C,CH375_CMD_PORT LDB C,CH375_DAT_PORT CMPB C,#14H JNE MREADS9
MREADS7: RET
;*************************/* 调用读扇区函数*/************************ 入口函数:w1 w2 w3 w4 是逻辑扇区lba,C是要读的扇区数,w5是存储读出扇区数据的数组首地址 LDB W1,#0 LDB W2,#0 LDB W3,#0 LDB W4,#0 LDB C,#1 LD W5,#AR_DATA; LCALL MREADS /* 读取逻辑盘引导信息
[Emot]3[/Emot][Emot]3[/Emot]