CH376周期性发生获取长文件名失败,是不是芯片有BUG?

我用CH376枚举U盘中的文件,然后获取它的长文件名,总是在连续获取7次以后就会出错一次,CH376GetLongName()返回值不是0x14(USB_INT_SUCCESS),而是0x1D(USB_INT_DISK_READ),然后继续8-14次又正常了,第15次又出现一次,程序很简单,应该不是程序的问题:

s = CH376GetLongName( Filename, buf ); if ( s == USB_INT_SUCCESS ) { 长文件名处理部分 } else { 短文件名处理 }

1、是枚举同一个文件,还是不同的文件 2、被枚举的文件名称是为大写


1、枚举某目录下的所有文件,不是同一个,相当于dir检索文件的功能。 2、应该跟被枚举的文件名称无关,因为不管是枚举文件还是目录,都有这样的问题,目录是中文的,不存在大小写问题。

因为我的项目要读取U盘的某个目录下的文件名,显示到液晶屏上,每隔7次就显示一次短文件名如“新建文~1.txt”,其他时候都很正常的显示长文件名,后来跟踪CH376GetLongName()的返回值发现每7次就返回一次0x1D,而不是0x14,所以导致程序往显示短文件名处理部分走了。


第7个文件的文件后缀名也必须是大写的,比较一下这个文件名与其正常的是否有区别呢


出问题的文件名跟其他的没啥区别,我用0001.txt~0009.txt测试也是这样,真是郁闷……

是不是我连续快速枚举文件,导致CH376内部缓冲区溢出了?出错时返回的Ox1D是USB_INT_DISK_READ,根据头文件的定义是“USB存储器请求数据读出”,所以很值得怀疑。

执行 CH376GetLongName( Filename, buf );函数并读出buf的值后还需要做什么清空CH376内部缓冲或是其他操作才能继续枚举下一个文件?


文件名必须是8字节主文件名+3字节后缀名,必须全为大写,你测试的文件名是错误的,改正一下试试


可以排除文件名的因素,因为文件名是从U盘枚举得来的,无论如何都是8.3结构大写的,并不是我指定的奇奇怪怪的文件名。

上面所说的0001.txt~0009.txt是指我复制了9个文件到U盘里,分别是0001.txt、0002.txt、0003.txt……0009.txt让376去枚举,枚举的结果肯定是0001.TXT、0002.TXT、0003.TXT……0009.TXT的,到这步都是没有任何问题的,就是根据这些枚举出来的文件名分别去CH376GetLongName()的时候到了第七个就有问题了,枚举文件夹名也是这样。


重新梳理一下:U盘里面的文件,文件后缀名究竟是大写还是小写?必须为大写


把文件的扩展名都改为大写了,还是老样子,CH376GetLongName到第7个就会返回一次0x1D,真是要抓狂了……


你枚举一个短文件名之后在去获取这个文件对应的长文件名,你看下还有没有问题?


我就是这样做的,先枚举其短文件名,然后再根据短文件名去获取长文件名,前面7次都很正常,第八次CH376GetLongName就返回一次0x1D,而不是正常的0x14了,接下来的就又正常了,第15次又出错了……无论是操作文件还是文件夹,都会有这个问题。


这个片子问题多多,可能是大家都没搞明白是怎么回事,反正我在根目录下新建一个文件,然后再枚举根目录下的文件,都有问题,经常出现返回值是1D的情况。。。。。。。。。。这个376太难用了,而且功能单一,还不如我直接用m3片子自己做一个读U盘的东西,真恶心。


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