用znfat方案对CH375进行U盘读写,遇到问题

2020-01-24 12:01发布

采用振南的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 ;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。