[求助]关于txt文件生成的数据格式

呵呵,之前算错数了,用22.1184MHz的晶振,有效脉宽也是够的。 刚才初步调试成功了,谢谢各位的帮忙。 之后开始设计调试U盘写文件的程序了,有什么问题再请教各位。


如果是普通的MCS51的话,WR,RD应该是六分之一分频出来的,也就是说22.1184的WR脉冲宽度大概45*6=270NS左右,这个时间已经绰绰有余了.在说你是模拟总线的,速度应该没有什么问题才对.如果连普通的51在22.1184下都抗不住那么速度也太慢了.可能是你的总线使用不正确导致这个问题的.另外命令与命令,命令与数据,数据与数据之间的延时一定要保证.另外建议把 extern uchar xdata CH375_CMD _at_ 0xa000; extern uchar xdata CH375_DAT _at_ 0x8000; 这种定义方式修改为 unsigned char volatile xdata CH375_CMD _at_ 0xa000; unsigned char volatile xdata CH375_DAT _at_ 0x8000; 第一种方式可能编译器为了提高速度,会减少访问.导致出错.第2种是不会的.


谢谢回复,我会更改volatile的,看到一些程序有用到这个声明,对声明的使用不熟悉,所以不敢随便用。之前是在命令与命令、命令与数据、数据与数据之间的读写间隔不足造成的,现在他们之间都加了大约12uS的延时,感觉都能使用了。


12uS的延时有点长了,会降低速度,只要uS级延时准确的话,那么命令后延时1.5uS,数据后延时0.6uS肯定是可以的


我现在是先做PC的USB通讯测试,在例程里 if ( IntStatus == USB_INT_EP2_OUT ) { /* 批量端点下传成功,接收到命令包 */ CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */ cnt = CH375_RD_DAT_PORT( ); /* 首先读取后续数据长度 */ if ( cnt == 0 ) { /* 长度为0,没有数据,在某些应用中也可以将长度0定义为一种特殊命令 */ CH375_WR_CMD_PORT( CMD_SET_ENDP7 ); /* 设置USB端点2的IN,也就是批量上传端点 */ CH375_WR_DAT_PORT( 0x0E ); /* 同步触发位不变,设置USB端点2的IN正忙,返回NAK,实际是清除上传缓冲区的已有内容 */

其中的 CMD_SET_ENDP7 (即0x1d)用户手册上没有找到相关描述,请问这是个什么指令?


这个命令在CH372DS2.PDF中,用于设置端点2的应答方式及同步标志


呵呵,看到了,原来在CH372DS2的文档里,谢谢。


我现在把CH375连接PC的USB端口,提示找到新硬件,但无法找到安装驱动,是不是我要对CH375发送初始化指令?我参照exam0的例程,里面好像缺少一些初始化操作。


不是. 先看一下VID,PID是多少,到设备管理器里面找到设备,属性里面,详细信息,里面有VID,PID,如果不是0的话就说明已经正确传上去了,然后你先把驱动安装一下,然后插入设备,然后自动安装一下,应该就可以了.如果是0的话表示你的下位机还是有问题的.


请问驱动在哪里?设备指的是CH375接入PC吧?


到网上下载,搜索CH372DRV.EXE,驱动都没有当然找不到了.


谢谢。CH375应该也可以用CH372DRV.exe的驱动吧?


设备方式下是一样的.所有的程序参考CH372EVT.ZIP


我手动安装CH372DRV后,接入CH375没提示新硬件了,可是PC上好像没有找到新设备。

我写了个简单调试程序:

void main(void) { unsigned char i; IE = 0x84; IT1 = 1; EX1 = 1; Delay_mS(500); Delay12uS(); CH375_Device_Init(); while(1) { if (B_USB_Ready) { B_USB_Ready = FALSE; CH375_WR_CMD(CMD_GET_STATUS); CH375_Status = CH375_RD_DAT(); if(CH375_Status == USB_INT_EP2_OUT) { CH375_WR_CMD(CMD_RD_USB_DATA); USB_Count = CH375_RD_DAT(); for (i = 0; i < USB_Count; i++) { USB_dat[i] = CH375_RD_DAT(); } } } } }

//+++++++++++++++++++++++++++++++++++++++++++++

void Delay(void) //短延时 { ; }

//+++++++++++++++++++++++++++++++++++++++++++++

void Delay12uS(void) //12us延时 { uchar i; for(i = 0; i < C_DelayTime12uS; i++) { ; } }

//+++++++++++++++++++++++++++++++++++++++++++++

void Delay_mS(uint n) //1ms延时 { uint t; uint h; for(h = 0; h < n; h++) { for(t = 0; t < C_DelayTime1mS; t++) { ; } } }

//+++++++++++++++++++++++++++++++++++++++++++++

void CH375_WR_CMD(uchar cmd) //向CH375的命令端口写入命令 { Delay(); CH375_CMD_PORT = cmd; Delay(); }

//+++++++++++++++++++++++++++++++++++++++++++++

void CH375_WR_DAT(uchar dat) //向CH375的数据端口写入数据 { CH375_DAT_PORT = dat; Delay(); }

//+++++++++++++++++++++++++++++++++++++++++++++

uchar CH375_RD_DAT(void) { Delay(); return(CH375_DAT_PORT); }

//+++++++++++++++++++++++++++++++++++++++++++++

void CH375_Device_Init(void) //CH375设备方式初始化 { uchar i,j; i = 0; j = 0; CH375_WR_CMD(CMD_SET_USB_MODE); CH375_WR_DAT(0x02); //设置为使用内置固件的USB设备方式 while(i != CMD_RET_SUCCESS && j < 200) { i = CH375_RD_DAT(); } Delay(); }

//+++++++++++++++++++++++++++++++++++++++++++++

static void Interrupt2_serve(void) interrupt 2 { B_USB_Ready = TRUE; }

//+++++++++++++++++++++++++++++++++++++++++++++

我从其他地方找了个USB发送数据的小软件,点发送说找不到USB端口,麻烦帮忙看一下。


在设备管理器里面看有没有出现一个外部接口的设备.按照你说的现象应该是驱动正确安装了, 另外你先用CH372DUG来测试一下.


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