采用振南的znfat文件系统方案,对CH375 U盘模块进行U盘读写,CH375初始化成功了,但是程序现在是死在U盘扇区读写上!读U盘扇区函数是一次读64个字节,循环八次,所以调用一次这个函数就读512个字节,成功返回0。我用串口监控这个函数它只循环5次就死在里面了,或者是主程序又从头执行了!U盘的扇区读写又应注意一些什么问题呢?归根到底是不是CH375的驱动问题?
unsigned char CH375_Read_Sector(unsigned long addr,unsigned char *pBuf)
{
unsigned char i=0,j=0,k=0;
unsigned char status,len;
unsigned int counter=0;
for(k=0;k<4;k++)
{
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); //送入扇区数
//UART_Send_Str("进入扇区读写
");
for(i=0;i<8;i++) //CH375的数据缓冲区为64字节,所以读取一个扇区要读8次
{
UART_Send_Str("进入扇区读写
");
status=CH375_Wait_Int(); //等待CH375中断信号,读取状态码
if(status==USB_INT_DISK_READ) //如果状态码是USB_INT_DISK_READ,就开始读取数据,否则发生错误
{
CH375_Write_Cmd(CMD_RD_USB_DATA); //送入读数据的命令
Delayus(4);
len=CH375_Read_Dat(); //先读到的是数据的长度
do //把随后CH375送过来的数据放入pBuf中
{
pBuf[counter++]=CH375_Read_Dat();
}while(--len);
CH375_Write_Cmd(CMD_DISK_RD_GO); //送入继续读数据的命令,CH375会将下面64个字节放入缓冲区,等待单片机来读
}
else
{
return 1; //发生错误,返回状态码
}
}
status=CH375_Wait_Int(); //读取8次以后,最后一次送入继续读数据的命令,等待CH375产生中断信号,并读取状态
if(status==USB_INT_SUCCESS) //如果状态码为USB_INT_SUCCESS,说明读取扇区成功,返回0
{
return 0;
}
else
if(status==USB_INT_DISK_ERR )
{
Delayus(1000);
CH375_Write_Cmd(CMD_DISK_R_SENSE); /* 获取USB存储器的容量 */
status=CH375_Wait_Int(); /* 等待中断并获取状态 */
if(status!=USB_INT_SUCCESS) /* 出现错误 */
return 1;
}
}
return 1 ;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你用的是什么文件系统方案,沁恒的?我这是进行文件系统初始化的时候调用底层的U盘读扇区函数,程序就像我上面说的死在里面了!我都怀疑是不是IO口模拟CH375时序的问题
一周热门 更多>