我的main里程序:先读0扇区的第2个256,再读第一个256,接着再读0扇区第2个256,就读不出来,好像读了第1个256,就读不下去了,大家请看看
CH375_Read_Sector(0,Buffer,2); for(k=0;k<256;k++)UART_Send_Byte(Buffer[k]); UART_Send_Byte(CH375_Read_Sector(0,Buffer,1)); for(k=0;k<256;k++)UART_Send_Byte(Buffer[k]); CH375_Read_Sector(0,Buffer,2); for(k=0;k<256;k++)UART_Send_Byte(Buffer[k]);
下面是375读函数: unsigned char CH375_Read_Sector(unsigned long addr,unsigned char *pBuf,unsigned char part) { unsigned char i=0;//,k int status,len,counter=0; CH375_Write_Cmd(CMD_DISK_READ);//磁盘读取命令 CH375_Write_Dat(addr); CH375_Write_Dat(addr>>8); CH375_Write_Dat(addr>>16); CH375_Write_Dat(addr>>24); //送入32位扇区地址 CH375_Write_Dat(1); //送入扇区数
for(i=0;i<8;i++) //CH375的数据缓冲区为64字节,所以读取一个扇区要读8次 { status=CH375_Wait_Int(); //等待CH375中断信号,读取状态码 delay(5); if(status==USB_INT_DISK_READ) //如果状态码是USB_INT_DISK_READ,就开始读取数据,否则发生错误 { CH375_Write_Cmd(CMD_RD_USB_DATA); //送入读数据的命令 delay(5); len=CH375_Read_Dat(); //先读到的是数据的长度 do //把随后CH375送过来的数据放入pBuf中 { pBuf[counter++]=CH375_Read_Dat(); }while(--len); if(counter==256) { counter=0;//缓冲区256 switch (part) // 读哪一部分256 { case 1 : return 0;//first part case 2 : break;//second part default : break; } } // for(k=0;k<256;k++)UART_Send_Byte(pBuf[k]); CH375_Write_Cmd(CMD_DISK_RD_GO); //送入继续读数据的命令,CH375会将下面64个字节放入缓冲区,等待单片机来读 } else break;//发生错误,返回状态码 } if(i==8) { status=CH375_Wait_Int(); //读取8次以后,最后一次送入继续读数据的命令,等待CH375产生中断信号,并读取状态 if(status==USB_INT_SUCCESS) //如果状态码为USB_INT_SUCCESS,说明读取扇区成功,返回0 return 0; } else return 1; }
[Emot]1[/Emot]