阅读:1236回复:5
要求D12主动向上位机送数,可以吗?
根据USB协议,一切数据发送和接受都是从主机端开始的,主机发read命令,要求下位机传数上来,即将mcu的ram中的数据写到d12
的数据发送区中。如果下位机上定义缓冲区32byte,那一次只能传32个字节。 请问现在有没有一种机制,我在上面发一次数据采集命令,下面就会不断的把数传上来,至到我发出停止命令! |
|
沙发#
发布于:2003-12-04 14:38
你的概念有问题,主机要读数据是去检查D12的IN(比如端点2)缓冲区是否有数据,有就接收,并清空缓冲区及向MCU产生中断,如果IN缓冲区中为空将不产生中断。所以若要发送一个长的数据包的话首先得把这个数据包切成几个小包(比如64B/包),而第一个包不能在中断中发送,余下的包就能在中断中发送完成了,只要你主机不停的读就行了。你所说的机制是可以实现的:主机从端点1向下位机发送一条读命令,下位机接收到命令后就从端点2向主机发送第一个数据包(如果数据包很长>64B),而其余数据包在中断程序中完成就行了。而读与不读只要在中断程序的发送中加个标志位就行了。
|
|
板凳#
发布于:2003-12-04 22:33
感谢回答:
我现在的问题是,目前只对端点2编程,主机从端点2向下位机发送一条读命令,下位机接收到命令后就从端点2向主机发送第一个数据包,这一点可以实现吧! 而其余数据包在中断程序中完成就行了。你的意思是否就是要在端点2发送数据中断程序中,除了清中断标志外,还向d12缓冲中写后面的数据包? \"而读与不读只要在中断程序的发送中加个标志位就行了\"--这一点能否说具体一点.这个标志的设置具体有什么作用? |
|
地板#
发布于:2003-12-05 09:14
数据和命令都从端点2走是完全可以实现的,比如你在端点2的OUT中断中(主机送过来就会产生)判断接收的命令是否正确,如果正确则发送第一个数据包,而其余数据包就可以在端点2的IN中断中完成了,你说得一点没错,除了清中断标志外,就可以向D12的IN缓冲区写后面的数据包了。标志位是这个意思----比如你接受到命令后就置一个读标志(在OUT中断中),而在IN中断发送数据时检查这个标志位,如果是读标志就发送,如果不是就不发送,而要想不读则只要主机发不读命令,你在OUT中断中把这个标志位取消就可以了,其实这个标志位只要有1和0两个状态就行了。
|
|
地下室#
发布于:2003-12-05 14:31
这种事情只需要固件配合好就可以实现
|
|
5楼#
发布于:2003-12-06 18:12
我的源代码是仿zlg提供的,程序中是首先通过厂商请求发命令给mcu,要求将mcu的ram中的数据写到d12中,然后调用readfile读取。
正如上面的大侠提到的,我在端点2的发送中断中添加了D12_WriteEndpoint()功能,上位机中同时不断调用readfile函数 。情况是总死机! 大侠们帮我看看,会是什么缘故? |
|