前面的初始化都能成功,但是即使更换扇区号,读取到的数据依旧是 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