搜索
bottom↓
回复: 4

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

[复制链接]

出0入0汤圆

发表于 2014-3-6 19:38:43 | 显示全部楼层 |阅读模式
采用振南的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("进入扇区读写\r\n");
                for(i=0;i<8;i++)         //CH375的数据缓冲区为64字节,所以读取一个扇区要读8次
                {
                        UART_Send_Str("进入扇区读写\r\n");
                        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 ;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2014-3-7 09:21:00 | 显示全部楼层
自己顶一下!有没有大神遇到过类似的问题啊,求帮忙!

出0入0汤圆

发表于 2014-3-7 09:23:51 | 显示全部楼层
375 376   一类的不用自己管FAT吧? 它有51例子拿来就可以用。
我移植到PIC单片机以后,文件时间没法更改,很奇怪。可能是我没有系统的研究一遍FAT的基础知识。

出0入0汤圆

 楼主| 发表于 2014-3-7 09:32:27 | 显示全部楼层
Friendz 发表于 2014-3-7 09:23
375 376   一类的不用自己管FAT吧? 它有51例子拿来就可以用。
我移植到PIC单片机以后,文件时间没法更改, ...

你用的是什么文件系统方案,沁恒的?我这是进行文件系统初始化的时候调用底层的U盘读扇区函数,程序就像我上面说的死在里面了!我都怀疑是不是IO口模拟CH375时序的问题

出0入0汤圆

发表于 2014-3-25 14:31:05 | 显示全部楼层
376 自带文件系统的控制吧, 你只要用函数写文件、读文件就行了,不用考虑分区表的问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 04:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表