新手求问

大家好,我刚接触CH375B,买了一个CH375B读写U盘模块,但是不知道怎么用,我想问一下我要的功能是在U盘里面新建,开关,读写文件,然后是每隔10ms左右会写几个字节的数据到U盘,我不想外部拓展RAM,就单单利用单片机内部的128字节的RAM,我用的单片机是AT89S52,我想问一下需要那个库,然后头文件怎么改,还有硬件怎么连,我这段时间由于忙于其他事,没多少精力研究这个,就想快速入门,所以麻烦大家帮个忙,如果两句说不清可以加我的QQ详聊,我QQ是969047644,感谢各位。

如果使用AT89S52单片机 ,那么推荐你使用CH376芯片,该芯片不需要库文件,占用单片机的资源比较少,操作比较简单。


我现在手上只有CH375的芯片。怎么办。


CH375要添加我们提供的文件系统库文件,代码空间12K左右,RAM至少600字节以上,要么就换单片机


我如果不以扇区读写,我想用字节读写,这样子可以减少硬件要求么。


总线拓展非得需要锁存器么。


如果使用CH375 不论是扇区方式还是字节方式,都至少需要那么多的资源,是否需要锁存器 取决于总线上放什么器件。


再问一个问题,我看了CH375HMS.C里的介绍 /* 因为使用U盘文件读写模块而不是使用U盘文件级子程序库,所以占用较少的单片机资源,可以使用89C51单片机测试 */ /* 以字节为单位进行U盘文件读写,单片机的RAM只需要几十个字节,不需要外部RAM */ 就是说如果不用贵公司提供的子程序库来操作也行对么,但是我发现贵公司提供的手册里的命令少比头文件里面的少,例如头文件里有#define CMD_FileOpen 0x64 /* 打开文件 */这个命令但是手册里是没有,还有一个问题就是程序里面原来的是串口我现在想用并口,例如发送如下:

sbit P_CS = P3^0; sbit P_A0 = P3^1; sbit P_WR = P3^2; sbit P_RD = P3^3; #define DATAPORT P2

void SendCmd(unsigned char cmd){ P_WR = 1; P_RD = 1; P_A0 = 1; DATAPORT = cmd; P_WR = 0; P_WR = 1; }

void SendDat(unsigned char dat){ P_WR = 1; P_RD = 1; P_A0 = 1; DATAPORT = dat; P_WR = 0; P_WR = 1; } 但是接收数据我不知道该怎么处理,如何判断CH375发送新的数据。


再问一个问题,我看了CH375HMS.C里的介绍 /* 因为使用U盘文件读写模块而不是使用U盘文件级子程序库,所以占用较少的单片机资源,可以使用89C51单片机测试 */ /* 以字节为单位进行U盘文件读写,单片机的RAM只需要几十个字节,不需要外部RAM */ 就是说如果不用贵公司提供的子程序库来操作也行对么,但是我发现贵公司提供的手册里的命令少比头文件里面的少,例如头文件里有#define CMD_FileOpen 0x64 /* 打开文件 */这个命令但是手册里是没有,还有一个问题就是程序里面原来的是串口我现在想用并口,例如发送如下:

sbit P_CS = P3^0; sbit P_A0 = P3^1; sbit P_WR = P3^2; sbit P_RD = P3^3; #define DATAPORT P2

void SendCmd(unsigned char cmd){ P_WR = 1; P_RD = 1; P_A0 = 1; DATAPORT = cmd; P_WR = 0; P_WR = 1; }

void SendDat(unsigned char dat){

P_WR = 1; P_RD = 1; P_A0 = 0; DATAPORT = dat; P_WR = 0; P_WR = 1; } 但是接收数据我不知道该怎么处理,如何判断CH375发送新的数据。


占用单片机资源少的 是我们的另外一个产品,U盘文件读写模块 而不是CH375芯片。 CMD_FileOpen 命令是模块的命令,不是CH375的命令 sbit CH375_A0 = P1^0; sbit CH375_CS = P1^1; sbit CH375_WR = P1^2; sbit CH375_RD = P1^3;

void mDelay1_2uS( ) /* 至少延时1.2uS,根据单片机主频调整 */ { return; }

void CH375_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { CH375_CS = 1; CH375_WR = 1; CH375_RD = 1; CH375_A0 = 0; P0 = 0xFF; /* 并口输入 */ }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时1uS */ P0 = mCmd; /* 向CH375的并口输出数据 */ CH375_A0 = 1; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号, 写CH375芯片的命令端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; CH375_A0 = 0; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { P0 = mData; /* 向CH375的并口输出数据 */ CH375_A0 = 0; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号, 写CH375芯片的数据端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); /* 至少延时1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; mDelay1_2uS( ); /* 至少延时1.2uS */ P0 = 0xFF; /* 输入 */ CH375_A0 = 0; CH375_CS = 0; CH375_RD = 0; /* 输出有效写控制信号, 读CH375芯片的数据端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ mData = P0; /* 从CH375的并口输入数据 */ CH375_RD = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; return( mData ); }


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