[求助]新手 ch372的命令读写问题

我参考的一本书: 硬件连接:P0口连的是D0-D7,A0连P20,CS连P27,RD#连RD,WR#连WR

#define USB_CMD_ADR 0x0100 //命令地址 #define USB_DATA_ADR 0x0000 //读写数据地址

写命令用的是这样的:*((byte*)USB_CMD_ADR)=command //command为命令

写数据: for(i=0;i{ *((byte*)USB_DATA_ADR)=(*psrc);//psrc为数据缓冲区的指针 delay(15); pscr++; }

我的问题是: 1.这个地址0x0100,0x0000到底怎么读写,*((byte*)USB_DATA_ADR)=(*psrc);这种句子是什么意思? 2.写数据时,写了一个,然后delay(15);再写下一个,你怎么知道上一个已经读走了?如果连着两个一样的数据,他怎么区分啊? 3.我参考的这本书里根本没有对WR、RD引脚操作,怎么回事啊? 4.哪有最简单的例子和硬件连接图,我参考一下,从官网上下的一个个的很乱,好像都是关于U盘读写的啊。 不好意思,新手。

(1)这就是向单片机的一个外部总线地址上写一个数据 (2)CH372手册中要求写完一个命令或数据后延时(具体数值参考手册)一会,这段延时可确保CH372已经把数据取走 (3)在总线方式下,WR、RD信号由单片机自行控制,如果是MCS51的话,可参考MOVX指令的解释 (4)下载EV372PCB.ZIP,里面有原理图和PCB


但是关于第二个问题: 如果delay(15)之后,372把数据取走了。你再写入一个新的数据(但是和上一个一样),他怎么知道你是新写入的一个数据,要读走?(而不是上一个,不用读了)?

希望高手都来帮帮忙。


当上位机把数据取走之后,372会产生一个中断通知单片机上传成功,然后单片机释放缓冲区,接着写入其他的数据.


但是你看我的第一个 写数据: for(i=0;i{ *((byte*)USB_DATA_ADR)=(*psrc);//psrc为数据缓冲区的指针 delay(15); pscr++; }

他跟中断没有关系啊?


这个定义方式是不对的: unsigned char volatile xdata CH375_CMD_PORT _at_ 0xBDF1; unsigned char volatile xdata CH375_DAT_PORT _at_ 0xBCF0; 首先要定义为volatile ,至于为什么,请查看C语言教材. 如果是51MCU的话要定义成XDATA类型的,否则WR.RD是没有信号的.如果不是的话可以不带XDATA 或者这样定义: #define CH375_CMD_PORT ( *(volatile unsigned char *)0xBDF1 ) #define CH375_CMD_PORT ( *(volatile unsigned char *)0xBCF0 ) 你的写函数是和中断没关系,USB通讯流程你要清楚.你单次写的数据两不能大于64个字节(端点2大小,假设通过端点2传输.),写完之后你必须等到中断上传成功之后在继续上传后续数据.


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