[求助]CH376S设备模式下如何操作?

按照CH376EVT中提供的例程DEVICE.C测试CH376S在设备模式下的操作流程,上位机使用CH372/CH374中提供的调试工具。驱动已经安装,单片机初始化CH376正常,插入PC的USB接口时,调试工具可以识别设备插入,点击“打开设备”按钮,打开设备正常。 问题: ①从上位机下传数据后,再上传返回数据:F4 FD 02 04 FC FD 00或F4 FD 02 04 FC FD 57。且仅能执行一次下传和上传操作。通过串口监视到,下传数据后,单片机相应返回F4 FD 02 04 FC FD 00或F4 FD 02 04 FC FD 57数据,随后出现了0x57,0xab,0x57,0xab,0x06,x65,0x57,0xab,0x15,02(CH376S初始化命令串)。之后再点击“上传”或“下传”按钮,按钮均变灰色,无法操作,单片机程序执行也正常了(通过指示灯判断)。 ②以上返回数据F4 FD 02 04 FC FD 00是在发出CMD_WR_USB_DATA7命令后,写数据操作完成后,再发送CMD_UNLOCK_USB命令时返回的数据串 当最后的CMD_UNLOCK_USB命令不存在时,就返回F4 FD 02 04 FC FD 57。CMD_UNLOCK_USB命令发送或者不发送(释放或者不释放USB当前缓冲区)对数据会有影响吗?应该加还是不应该加,例程上未加。 ③上传和下传的数据包结构各个成员的意义,作用?能否举例说明? typedef struct _USB_DOWN_PACKET {/* 下传的数据包结构,用于命令/写数据 */ UINT8 mCommand; /* 命令码,见下面的定义 */ UINT8 mCommandNot; /* 命令码的反码,用于校验下传数据包 */ union { UINT8 mByte[4]; /* 通用参数 */ UINT16 mWord[2];/* 通用参数,低字节在前,Little-Endian */ UINT32 mDword;/* 通用参数,低字节在前,Little-Endian */ void *mAddress; /* 读写操作的起始地址,低字节在前,Little-Endian */ } u; UINT8 mLength; /* 下面的缓冲区的长度,读写操作的字节数 */ UINT8 mBuffer[ MAX_DATA_SIZE ]; /* 数据缓冲区 */ } USB_DOWN_PKT;

typedef struct _USB_UP_PACKET {/* 上传的数据包结构,用于状态/读数据 */ UINT8 mStatus; /* 状态码,见下面的定义 */ UINT8 mCommandNot; /* 命令码的反码,用于校验上传数据包 */ UINT8 mReserved[4]; UINT8 mLength; /* 下面的缓冲区的长度,读操作的字节数 */ UINT8 mBuffer[ MAX_DATA_SIZE ]; /* 数据缓冲区 */ } USB_UP_PKT

你可以参考CH372的相关程序。相对来说比较简单。


例程里的那个device.c不行吗?第③个问题不能帮忙解释一下吗?


3的问题实际上仅仅是定义的通信协议而已,仅仅对于我例子程序有效。对你进行数据传输需要根据自己的实际情况进行通信协议的制定。


谢谢各位了。有没有人知道问题①是什么原因?


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