更换扇区号,读取到的数据没有变化,为什么呢

前面的初始化都能成功,但是即使更换扇区号,读取到的数据依旧是 Multi Flash Reader 1.00

不知道是为什么,更换U盘之后也是如此。测试用的SD卡读卡器,32M的SD卡 我用4G的u盘得到同样的结果

#include #include #include #define UINT16 unsigned short #define UINT32 unsigned long unsigned char *data0; UINT32 DiskStart; /* 逻辑盘的起始绝对扇区号LBA */ /* 输出: 长度, 数据流 */ void initial()//初始化,用于串口调试 { SCON = 0x50; PCON = 0x80; TMOD = 0x21; TH1 = 0xfd; // 11.0592MHz晶振, 9600bps TR1 = 1; TI = 1;

} void delay1s() //延时1秒 { int i,j; for(i=0;i<1000;i++) { for(j=0;j<1000;j++) { } } } void delay10ms() //延时10毫秒 { int i,j; for(i=0;i<10;i++) { for(j=0;j<1;j++) { } } } void CH375_CMD(unsigned char cmd) //写端口命令 { WR=0; RD=1; P1=cmd;

P2=0xfe; delay10ms(); P2=0xff; WR=1; RD=1;

} void CH375_WR_DATA(unsigned char data0) //写端口数据 { WR=0; RD=1; P1=data0;

P2=0xfc; delay10ms(); P2=0xff; delay10ms(); WR=1; RD=1;

} unsigned char CH375_RD_DATA() //读端口数据 { unsigned char state; P2=0xfc; WR=1; P1=0xff; //读取数据前先置1 RD=0; P1=0xff;

state=P1; delay10ms(); P2=0xff; WR=1; RD=1;

return state;

} void CH375_INITIAL() //器件初始化 { CH375_CMD(CMD_RESET_ALL); //#define CMD_RESET_ALL 0x05

}

unsigned char CH375_CHECK() //检查芯片是否正常工作 { CH375_CMD(CMD_CHECK_EXIST); // CMD_CHECK_EXIST 0x06 delay10ms();

CH375_WR_DATA(0x11);

if(CH375_RD_DATA()==0xee) { return 0x01; } else { return 0xff; } }

unsigned char CH375_Wait_INT() { P2=0xff;

WR=1; RD=0; INT0=1; while(INT0) { delay10ms(); } delay10ms(); delay10ms(); CH375_CMD(CMD_GET_STATUS); delay10ms(); delay10ms(); return CH375_RD_DATA(); } void CH375_set() { if(CH375_CHECK()==0x01) { printf("Check Success\n"); CH375_CMD(CMD_SET_USB_MODE); //设置USB的模式 delay10ms(); delay10ms(); CH375_WR_DATA(0x06); delay10ms(); delay10ms();

if(CH375_RD_DATA()==CMD_RET_SUCCESS) { printf("Set Mode Success\n"); } else { printf("Set Mode Fail\n"); } if(CH375_Wait_INT()==USB_INT_CONNECT) //已经连接 { printf("Connect Success\n"); } else { printf("Connect Fail\n"); } delay10ms(); delay10ms(); CH375_CMD(CMD_DISK_INIT); //磁盘初始化

if(CH375_Wait_INT()==USB_INT_SUCCESS) //初始化成功 { printf("Disk Int Success\n"); } else { printf("Disk Int Fail\n"); }

} }

void main() { unsigned char i,k; unsigned char cha=0; int num=0; int right;

P1=0x7e;

initial(); printf("Start\n");

CH375_INITIAL(); printf("Reset Success\n");

CH375_set(); delay10ms(); delay10ms();

right=0; P1=0x7d; CH375_CMD( CMD_DISK_READ ); // CH375_WR_DATA(19); delay10ms(); // 读取第19个扇区的数据 CH375_WR_DATA(0); delay10ms(); CH375_WR_DATA(0); delay10ms(); CH375_WR_DATA(0); delay10ms(); CH375_WR_DATA(1); num=0; for(i=0;i<8;i++) //一个扇区是256个字节,一次读64个字节,所以一共要读8次 { if(CH375_Wait_INT() == USB_INT_DISK_READ) // { CH375_CMD(CMD_RD_USB_DATA); //从当前USB中断的端点缓冲区读取数据块, 并释放缓冲区 k=CH375_RD_DATA(); printf("data length is %c\n",k); //K是数据块长度,必须全部读完,一般是64个字节 while(k--) { cha=CH375_RD_DATA(); //获得第一个数据 //if(i==0) //{ printf("%c",cha); num++; // } } } CH375_CMD(CMD_DISK_RD_GO);//读下一个64字节 printf("\n"); } //读取8次以后要查看状态 if(CH375_Wait_INT()==USB_INT_SUCCESS) printf("read 256B success!!"); printf("End\n");

}

串口显示如下: Start Reset Success Check Success Set Mode Success Connect Success Disk Int Success data length is $ Multi Flash Reader 1.00

End

我已经给你发了程序,请按照我发的程序修改,一定要获取磁盘容量,虽然初始化成功,但不代表U盘已经准备好。读到容量后,才表示U盘准备好,可以正常操作


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