ch376偶尔不能加载U盘

插着U盘上电启动,重复调用CH376DiskConnect函数检测U盘,一般都能检测到,但是大约有1%几率会加载不到U盘,重新拔插一次U盘又可以加载。 上电以后再插U盘每次都能检测到,只有插着U盘上电会有此问题。

加载不到U盘是因为没检测到中断,中断需要配置成低电平触发,你可以查一下中断配置以及看一下有无中断产生?


我是用软件查询中断IO脚,应该是没有查询到中断


你可以将INT#脚翘起,看看我们CH376芯片有没有中断产生?


我现在修改了程序,不用Connect,直接不停的Mount,直到Mount成功为止。这样会不会有问题?初测貌似可以


CH376DiskMount的操作与CH376DiskConnect是类似的都是发送一个命令,然后等待中断。正常的流程是检测U盘连接,然后磁盘初始化,CH376DiskMount必须正确通过才能进行后面操作。


CH376DiskMount里面有而vCH376Reset,而CH376DiskConnect只是在等中断。是不是vCH376Reset一下就能检测到了呢?


照你这个说法,每次上电也相当于一次复位(复位延时50ms),也应该每次检测到的。


我的软件最开始也是发了一次复位命令。 如果按你说的中断没检测到,应该不可能,为什么只有上电那一次的CH376DiskConnect中断检测不到,而其他时候都没问题?


你可以看一下检测U盘连接函数: UINT8 CH376DiskConnect( void ) /* 检查U盘是否连接,不支持SD卡 */ { if ( Query376Interrupt( ) ) CH376GetIntStatus( ); /* 检测到中断 */ return( CH376SendCmdWaitInt( CMD0H_DISK_CONNECT ) ); } 第一个Query376Interrupt是检测U盘插上中断信号的,第二次是发送连接命令会再一次产生中断状态。如果你一直插着的话是不会进入第一个判断的。


如果按你说的的,那每次上电启动都要重新拔插一下了?这样很不友好啊。 要像我那样改一下程序,不用CH376DiskConnect直接CH376DiskMount,会不会内部就认为U盘没有连接,而怎么Mount都不成功?


第9楼的程序插着U盘也是可以正确通过的,我只是说明一下插着U盘与不插U盘的区别。 如果U盘未连接上,CH376DiskMount不会成功的。


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