请教CH375将U盘变成RAW格式的问题。

我用的是8032内核,40M晶振的单片机,实用的是CH375HF5的头文件。做的U盘读写系统遇到以下问题: (1)开始时只有一个老的朗科的128MU盘可以操作,后来发现是在程序里给375读写指令,数据的延时没有做好,后来经过调整可以操作朗科,纽曼等4,5种U盘。 (2)但是对一个老的朗科32MU盘和一个新的128M每次执行CH375FileOpen( )后返回错误代码0xEF而且这是将U盘拔下插入电脑后会发现U盘的文件系统变成了RAW格式,无法读写。 (3)对一个清华紫光128MU盘每次执行到CH375DiskReady()后就会出现死机现象。 总的来说现在是大概一半的U盘可以读写。请各位牛人能给指点一下。多谢!

1、你测一下插上你所说的不能操作的清华紫光的盘,USB口的电源是多大,最好确保在5V左右,各种U盘的吸收电流不一样,导致电压降也不一样,有些U盘电压低于4.6V左右就不能正常工作了。 2、按你说的老的朗科32MU盘和一个新的128M的U盘,CH375FileOpen( )之前的DISKREADY()是能正常通过的吗?如果DISKREADY()可以通过的话,一般来说这个U盘是可以操作的。你调一下你三个读写子程序的延时,命令与命令之间2us,命令与数据之间2us,数据与数据之间1us。


我现在直接给USB接口接上单独的5V电源,还是像以前那个现象:清华紫光执行到CH375DiskReady()后就会出现死机的现象。 老的朗科32MU盘和一个新的128M的U盘,CH375FileOpen( )之前的DISKREADY()是能正常通过的,返回值是 ERR_SUCCESS。但是执行 CH375FileOpen( )后,就会返回0XEF。 我不知道命令与命令之间2us是指的最短时间是2us还是必须精确到2us? 我的单片机是8032内核,40M晶振,12个时钟周期。所以一个指令周期约为0.3个us,我的读写子程序代码如下: void xWriteCH375Cmd( UINT8 mCmd )/* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { USBCS=0; _nop_(); _nop_(); write_xdata(CH375_CMD_PORT_ADDR,mCmd); _nop_(); _nop_(); USBCS=1; } void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { USBCS=0; write_xdata(CH375_DAT_PORT_ADDR,mData); _nop_(); _nop_(); USBCS=1; }

UINT8 xReadCH375Data( void )/* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { unsigned char i; USBCS=0; i=read_xdata(CH375_DAT_PORT_ADDR); _nop_(); _nop_(); USBCS=1; return( i ); } 其中的write_xdata()程序如下:#define write_xdata(adr,x) ( *(uc xdata *)adr = (uc)x) read_xdata(CH375_DAT_PORT_ADDR);为#define read_xdata(adr) (*(uc xdata *)adr) 我也试过将 每个子程序的 _nop_(); 数量增加或者减少,但是对不成功。不知道为什么。多谢指教!


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