阅读:1328回复:4
请教D12上层的传输问题
各位大侠:
现在我用D12跟硬件进行连调,我们的协议是每包60字节。我给硬件发送完0xaa 0xff 00 00四个字节后,硬件要发送给我1.5K字节的数据(除以60来分包),单步调试应该是可以的。 全速时,只能保证第一包是正确的,可能以后硬件发送的各包跟我接受的时机不合适。怎么在VC中设一个触发标志位保证硬件每包发送时我才接受或什么其他的方法来保证数据传输的正确。多谢!! |
|
沙发#
发布于:2003-07-31 08:52
哦,什么意思?你想每个包都检查吗?
|
|
板凳#
发布于:2003-08-03 10:46
你的问题跟我以前遇到的一样。
我是这样处理的:d12用端点2进行向pc机发送数据,用端点1接收标志。当pc机接收到端点2发送过来的数据,并处理完成后向端点1写一个完成标志比如使GenEpBuff[0]=1,然后再查询此位是否为0,当单片机检测到bEPPflags.bits.ep1_rxdone为1时,说明pc机已经处理完数据,此时单片机再用端点2发送下一个数据包,并写GenEpBuff[0]=0。当pc机检测到GenEpBuff[0]=0试对数据进行接收并处理。 这样很好用,试过了 |
|
|
地板#
发布于:2003-08-03 10:47
你看看好用吗?有问题共同讨论
|
|
|
地下室#
发布于:2003-08-03 22:14
你主机上发送完那个帧头后就发命令读设备的数据,这时候设备端点里应该是没有数据的,(如过你适当延时一会,端点里就应该写进去数据了)当设备方收到那个帧头后就开始往端点里写数据,只要第一个包发送成功,主机就会发送ack给设备,这样d12会给mcu产生中断,你可以在中断里填第二个包,也可以在中断里设置标志到主程序里去填,以后的传输和第二个包是一样的。
注:主机方发送完读数据命令后,主机控制器就会不断的发送in令牌到设备查询端点是否有数据,直到接收到数据或者超时返回为止。 |
|