CH375B 串口主机方式,怎么利用库来读取U盘里的文件?

CH375B 串口主机方式,怎么利用库来读取U盘里的文件?具体就是,CH375B采用和单片机串口方式连接,现在需要读取U盘的根目录下的某个文件,该怎么读啊,是不是很复杂?是否可以利用该芯片提供的库来简化程序,?但是看到很多资料都是并口的,可以调用库。那串口呢,怎么调用该芯片提供的库啊??盼复!请指教!

串口是可以进行读取的,请告知你使用的单片机型号,需要注意的是串口和CH375连接的话,需要把串口设置为9位数据模式,位9为1代表命令,位9为0代表数据,如果使用我们的子程序库的话,就需要知道你使用的单片机型号以及编译环境,才能选择合适的库,或者你可以选择CH376芯片,这个芯片自带文件系统,支持串口,并口,SPI接口。支持枚举文件,读取文件等等。


非常感谢您的回复,我可以正常读写U盘的扇区,读写数据也正常。现在是想,读取U盘里的文件,我用的芯片是C8051F340+ch375B ,串口方式,编译环境是silicon Laboratories IDE,希望调用CH375B当中的文件级子程序库,可以直接操作U盘的文件,希望可以支持FAT16,FAT32..如果这样的组合(C8051F340+ch375B ,串口方式,编译环境是silicon Laboratories IDE,)可以调用CH375B的文件级程序库的话,是否需要修改该子程序库的头文件里面的内容,盼复!!


不需要修改头文件,修改三个读写子函数就可以了。如果没记错,你应该给我发过邮件。就修改我给你说的三个子函数,现在不是并口方式吗?修改为串口方式即可。就是写串口接受发送函数啊。


你好,我按照你的做法修改了那三个子函数,但是我还是无法调用该芯片提供的那些库函数,比如CH375LibInit( )这个,程序根本进不去,就好像找不到入口地址一样,编译的时候,出现了UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS,,UNRESOLVED EXTERNAL SYMBOL,,REFERENCE MADE TO UNRESOLVED EXTERNAL这些警告,不知该如何解决。我哦的编译调试环境是silicon Laboratories IDE,这些问题该怎么解决呢?望指点!


那是库没有加进去可能, 有两种方法解决: 1:你打电话给新华龙,问他们库是怎么添加进去的。也就是添加OBJ文件 2:你把IDE发过来,我们帮你看一下 新华龙对这个IDE比较熟悉,解决的速度更快。


在检测到USB设备连接后,初始化usb存储器,返回的状态为0x20,说是设备类请求(参考的是ch375ev0),请问这指的什么意思啊,有没有参考资料可供参考啊。


返回X020代表USB口通信有问题,建议你去看下USB口有没有接反?U盘供电是否为5V等等,都可能导致初始化寄存器返回X020的错误。


USB口没有接反的,这块板子就是公司焊的,U盘供电一定要5 V吗,我用的是3.3V。


刚才用5V后,U盘都检测不到!


好好检查一下你的硬件,检查CH375的供电和U盘供电。CH375在5V和3.3V电路是不一样的。所以你好好检查一下。另外检查中断引脚和USB信号。插入U盘后,UD+应该是3.3V左右,UD-是0V


初始化U盘成功,但是不太明白从USB缓冲区读取的数据的具体含义, if ( mIntStatus != USB_INT_SUCCESS ) { /* 出错重试 */ mDelayimS( 200 ); xWriteCH375Cmd( CMD_DISK_SIZE ); /* 获取USB存储器的容量 */ mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ } if ( mIntStatus != USB_INT_SUCCESS ) return( mIntStatus ); /* 出现错误 */

/* 可以由CMD_RD_USB_DATA命令将容量数据读出,分析每扇区字节数 */ xWriteCH375Cmd( CMD_RD_USB_DATA ); /* 从CH375缓冲区读取数据块 */

i = xReadCH375Data( ); /* 后续数据的长度 */ if ( i != 8 ) return( USB_INT_DISK_ERR ); /* 异常 */ for ( i = 0; i != 8; i ++ ) { /* 根据长度读取数据 */ DATA_BUFFER[ i ] = xReadCH375Data( ); /* 读出数据并保存 */ } i = DATA_BUFFER[ 6 ]; /* U盘容量数据中的每扇区字节数,大端格式 */

比如说,上面程序里的“根据长度读取数据”是上面数据,放在DATA_BUFFER这个数组里,具体表示的是上面意思啊,有什么资料可以参考?盼复!


不是用的库吗?怎么又自己写了?到底是用的库还是自己写的源码? 你是不理解读出的数据本身的含义还是这个程序你不懂? 你的话: 上面程序里的“根据长度读取数据”是上面数据,放在DATA_BUFFER这个数组里,具体表示的是上面意思啊

根本就读不懂是什么意思啊,表达清楚些。


本人愚笨,用串口主机方式,不会用你们的库,一调用库的函数就死机,根本执行不了那些函数,所以准备自己写。参考CH375EVT中的代码,运行正常,但是有些不懂的地方,比如在这个mInitDisk()函数中,最后读取到的数据存放在DATA_BUFFER中,想知道这些数据表示的是什么意思?


这个数据在CH375DS1有详细说明,一定要好好利用我们的资料。该数据在如下章节讲解: 5.16 该命令用于获取USB存储设备的物理容量。在成功初始化USB 存储设备后,该命令可以获取USB 存储设备的总容量。CH375在命令执行完成后向单片机请求中断,单片机可以读取中断状态作为该命 令的操作状态。如果操作状态是USB_INT_SUCCESS,那么可以由RD_USB_DATA命令获取数据,数据通 常是8 个字节,前4 个字节以高字节在前组成的双字数据是USB存储设备的总扇区数,后4 个字节以 高字节在前组成的双字数据是每个扇区的字节数,两个数据相乘的结果就是以字节为单位的USB 存储 设备的总容量。如果扇区不是512 字节,那么应该执行SET_PKT_P_SEC 命令设置每扇区数据包总数

获取磁盘容量的时候U盘传给CH375数据一共8个,分别为扇区数和扇区大小,两者相乘即为容量。在论坛 提问,建议一定要表达清楚,谢谢合作。


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