各位老大:我用汇编语言,196KB,仿真器用的上海的星研。可否用51的库?是否只需改一下哪里就能用?如果可以。该如何链接库文件。比如:复制哪些文件到什么地方?在主程序中如何定义?请指教啊[Emot]20[/Emot]!自己做的程序只能读一块512M的sandisk,一块2G的金斯敦。对另外两块1G,2G的金斯敦,4G的朗科无可奈何[Emot]1[/Emot]。再没进展,饭碗岌岌可危。救救我吧!!!!!!!![Emot]3[/Emot][Emot]3[/Emot]
如果不能用库,能否详细指导一下如何提高不同U盘的兼容性的措施。是不是在初始化U盘,初始化375,底层读写函数或者别的什么地方要延时或别的手段?规求天下英雄!!!!!!!!
(1)196与51的指令集不同,不能采用51的库 (2)不能操作的U盘,具体是哪个步骤出现问题? (3)关于提高兼容性,CH375没有具体的例程,但可以参考CH374芯片的,还需要了解BulkOnly协议、UFI/SCSI/RBC命令集 UploadImages/20093168291099.rar
具体是在初始化后,读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 ; /* 读取逻辑盘引导信息