CH375DiskQuery

请问一下函数CH375DiskQuery() 是不是有些U盘不能使用该函数;我在使用的时候,有些U盘会死在 void xQueryInterrupt( void ) /* 查询中断状态,等待硬件中断 */ { while ( CH375IntStatus == 0 ); /* 子程序库调用该子程序之前CH375IntStatus=0,硬件中断后,由中断服务程序置为非0的实际中断状态后返回 */ } 一直在里面死循环,请问一下,是怎么回事?

有些U盘可以使用该函数,但是读取速度很慢,要好几秒钟才能查到磁盘信息,但是也不是每一次都成功,请问一下,需要怎么样使用该函数,是不是在使用该函数之前要调用其他函数,才能正常操作?

非常的感谢!

另外还想问一个问题:  今天早上看文档,说CH375DiskQuery()在FAT32文件系统下,运行速度最快,在FAT16下运行速度最慢,我的U盘,昨天下午是可以通过这个函数读到磁盘信息,但是常常死掉了,就如我上面的问题所问那样,我以为可能是要格式化为FAT32,但我把U盘重新格式化为FAT32(U盘大小为64M),结果发现这个函数返回值一直都是"0X2C",后来就调用函数CH375DiskSize( ),结果返回的也是"0X2C"(用FAT16的时候,这个函数一直超过正常).请问一下贵公司,将U盘格式化为什么样的文件系统是不是与U盘本身的容量有一定的关系,因我用同事的256M的U盘,他的是FAT32,操作起来很快,但是有时候也会死掉,也是死在: void xQueryInterrupt( void ) /* 查询中断状态,等待硬件中断 */ { while ( CH375IntStatus == 0 ); /* 子程序库调用该子程序之前CH375IntStatus=0,硬件中断后,由中断服务程序置为非0的实际中断状态后返回 */ } 函数里面出不来! 所以我很想知道,是不是和U盘的型号啊,大小啊,都有关系?

我现在可以正常的读出U盘的文件数据,但是还没有做写数据,正在调试中^_^. 恳请贵公司能帮我解答以上的疑难问题,非常感谢!!


硬件有点问题,检查USB之D+/D-以及GND是否串电阻,时钟电路干扰以及布线


检查USB之D+/D-以及GND是否串电阻? 不明白,能否解释详细一点呢?非常感谢


另外.我可以读出U盘的文件名字,调用的是函数ListFile( ); 但是一直操作,并且操作很快的话,就会死掉!是不是也是硬件的问题? 还是本身就有这个问题?


是指USB口的D+,D-可串了电阻,这个电阻不能太大(0-5欧姆)


没有接电阻


可能是硬件问题,方法很简单,把你的#ACT接个灯,一般优盘插上后就会灯亮,如果在操作的过程中灯熄了就是硬件问题。 我这儿是遇到两种情况 1.接地不好。我这边CPU与CH375分开在两块板上,老有这问题,后来我把CPU附近的地与电源地一起接到CH375的地上,就稳定了。 2.片选信号过长或干扰。

不同的优盘,出错的严重程度不一样,所以有时会认为与容量相关,其实不是。


我在#ACT上接了指示灯了,操作过程中一直都是亮的啊,表示一直都是连接的嘛!那就不是硬件的问题吗?


因为你用的是官方库,如果库有问题你也说不清,你可以试试自已写初始化,然后连续读扇区。如果你自己写的程序能稳定读数据,而使用库则不行,说明就是软件问题了。

你可以看看我以前发的贴子中的不使用官方库的初始化,然后自己去读扇区,这样就是错也至少知道错在哪儿。

;---------------------------------- 第一部分是针对端点0的,属于标准部分 1.用CH375发出DISK_INIT命令(不可以失败) 2.成功后发出DISK_MAX_LUN命令(可以返回STALL) 3.等待成功或STALL(有些优盘是死活返回STALL的)

第二部分是针对数据端点的,已经使用了CBW/CSW了. 4.发出DISK_INQUIRY命令 5.发出DISK_SIZE 需要注意的是4,5命令可能会失败,此时需要调用DISK_R_SENSE命令来获取错误,此时错误好象是06,28(磁盘未准备好),然后重试,直到成功。有些优盘必须获取错误后才可以继续运行!

上面5步能完成的话,基本上大部分优盘都能过。DISK_READY命令就不需要了。


只有登录才能回复,可以选择微信账号登录