急及求助:仍然无法读出dbr

我用196单片机通过375控制U盘。贵公司没有196的库吧?所以被迫自己编底层函数。但是很奇怪:一个32M的IBM和一个512M的金斯敦一个2G的金斯敦都可以读出0扇区的DBR。而另一个2G的金斯敦。1G的金斯敦。4G的朗科读出的0扇区都是商标信息,如kingston disk driver 2.0 其余都是00。用winhex等软件观察上述u盘的0扇区都是DBR,为何有的能读,有的不能?U盘都能初始化成功,请帮我看看程序: ;*************************/* 从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 ; /* 读取逻辑盘引导信息

(1)必须等CH375产生中断时,才可以执行:LDB A,#CMD_GET_STATUS ;读中断状态并获取状态,请求数据写入 (2)不知道是否方便移植C语言的例程测试一下,下载CH375EVT.ZIP:\CH375EVT\PUB\MCS51C\MISCELL


只有登录才能回复,可以选择微信账号登录