我用CH375做的U盘和单片机的接口,用的程序是沁恒公司的CH375HF5,却遇到以下问题 只能使用一个比较老的蓝科的U盘,而对于其他型号的U盘均不能用。 我在调试程序的时候发现,使用别的U盘时,当程序执行完 i = CH375FileOpen( ); //打开文件 后, 返回值i就为 ERR_USB_DISK_ERR (0x1F)/* USB存储器操作失败,在初始化时可能是USB存储器不支持,在读写操作中可能是磁盘损坏或者已经断开 */, 磁盘及文件状态 CH375DiskStatus 为DISK_MOUNTED (0x03)/* 磁盘已经初始化成功,但是尚未分析文件系统或者文件系统不支持 */ 切此时USB的电源也为接近5V(大概4.9V)。 不知道这是什么原因导致出现这种情况,请各位高手指教!!
如果返回这样的错误的话,那么,你DISK-READY()这个函数返回的数据是多少呢?
前面执行DISKREADY时返回值为0X10(SUCCESS),应该没有问题
CH375DiskReady( )返回的应该是0X00(ERR_SUCCESS)吧。你先查一下512字节的磁盘缓冲区(DISK_BASE_BUF)定义是否有问题,前面CH375DiskReady( )能过,而OPEN不了的话,很有可能是磁盘缓冲区上的问题。你可以在打开文件出错之后,将磁盘缓冲区中的数据贴出来看一下。
对于磁盘缓冲区(DISK_BASE_BUF)的定义,我是直接用了沁恒公司提供的CH375HF5.H没有做改动此段程序代码如下,不知道这样有没有问题。我用的不是375的开发板,用的是PSD3234A的芯片,不知道缓冲区的数据如何查看,谢谢各位指教!
#ifndef DISK_BASE_BUF_ADDR /*#define DISK_BASE_BUF_ADDR 0*/ /* 如果未定义磁盘读写的缓冲区地址,那么假定磁盘读写的缓冲区从地址0开始 */ #endif
#ifdef DISK_BASE_BUF_ADDR UINT8X DISK_BASE_BUF[512] _at_ DISK_BASE_BUF_ADDR; /* 外部RAM的磁盘数据缓冲区,缓冲区长度为一个扇区的长度 */ #else UINT8X DISK_BASE_BUF[512]; /* 外部RAM的磁盘数据缓冲区,缓冲区长度为一个扇区的长度 */ #endif
实际上DISK-READY函数和FILE-OPEN函数的一个主要的区别就是使用到了磁盘缓冲区,其他的对于U盘的操作都是一样的,你可以用操作物理扇区的例子程序去测试下看可以不可以读U盘的物理扇区(下载CH375EVT。ZIP)。
多谢指教!