阅读:1663回复:12
数据连续传输 送200分
我适用68013的板子已能够用panel接收数据,可如何能让在SLAVE方式下,让外设控制器和计算机连续自动通讯,困惑!!!!,求高手指教,成功后送200分
|
|
|
沙发#
发布于:2003-07-08 17:27
由于SLAVE FIFO的BULK传输一个包只能是1024b,所以关键是当你的数据不断传送时,上位机程序对包的不断读取。
|
|
板凳#
发布于:2003-07-09 08:53
是呀,我应该如何实现数据包的连续读取,是在固件里实现还是在驱动里实现,CYPRESS里的例子有可以借鉴的吗,我的邮箱lmhhlmhh@sina.com,可以联系探讨吗
|
|
|
地板#
发布于:2003-07-09 08:59
好啊。
|
|
地下室#
发布于:2003-07-09 10:07
这需要你的固件和驱动以及应用程序三方面都要以一定的协议配合才行!
|
|
5楼#
发布于:2003-07-09 10:48
在固件中将端点都设置为AUTOIN OR AUTOOUT 模式,在主机程序中可以借鉴CYPRESS的EZMR,或者自己写个程序也行,缓寸给大点,用CPLD或者DSP来读写数据。我实现了,但是设备给主机写数据出现了丢失情况
|
|
6楼#
发布于:2003-07-09 10:48
先在开发板的那个128k ram里存一批数,然后用outpointer不断的把数放到端点里,再传到计算机上,在主机的应用程序ezmr里做点修改,就是在读取数据那一段加上一个循环,或者打开一个文件,把读回来的数据存起来就行了。或者先读回来再写回去,有个例子叫bulkloop就是这么做的。
|
|
7楼#
发布于:2003-07-09 12:49
多谢各位大侠,道理我好象明白了,但是都需要用哪些东西修改,好象东西挺多的,可以私下交流吗,将jiangjiaomail@sohu.com或lmhhlmhh@sina.com,我对驱动不太懂,肯定给分,多谢了,QQ6514106
|
|
|
8楼#
发布于:2003-07-09 13:31
主要是在固件中修改,还有驱动(一般用DDK),如果你编写了上位机程序的话也是要改的。呵呵。
|
|
9楼#
发布于:2003-07-09 13:34
忘了说一句,固件只要直接修改后编译就行了,驱动需要用DDK修改SYS.C文件后生成*.SYS文件,至于上位机程序自然是用VC++了。
|
|
10楼#
发布于:2003-07-09 15:54
ezmr里面有好多程序,该用哪些呀!主机程序如何装入主机呀,最好我们单独聊好吗,驱动程序应该用哪些具体程序改呀,论文急死我了,救命呀,各位大侠,请说具体点,我是一只小笨鸟
|
|
|
11楼#
发布于:2003-07-09 17:10
ezmain.cpp里的第666行 case IDC_TRAN_BULK_DATA:下面的那段程序是用来读取数据的,关键的函数是:
bResult = DeviceIoControl (hDevice, ioctl_val, &bulkControl, sizeof (BULK_TRANSFER_CONTROL), buffer, length, (unsigned long *)&nBytes, NULL); 这个函数的原型是 BOOL DeviceIoControl( HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); 上面这个函数的具体情况你可以查ddk的帮助,以及msdn里的帮助,我给你稍微解释一下, 参数(1)hDevice:设备的句柄,和文件的句柄类似,有了它你就可以访问设备,包括或的设备描述符和读写等; (2)ioctl_val:其实是个ioctl code,这里是IOCTL_EZUSB_BULK_WRITE 或者IOCTL_EZUSB_BULK_READ,就是确定本次操作是读还是写; (3)&bulkControl:存储要使用的端点信息的地址,这是要告诉驱动你要是用那个端点,是2,4,或者6、8等。 (4)sizeof (BULK_TRANSFER_CONTROL) 其实是bulkControl占用的字节数 (5)buffer:传输数据的存放缓冲区,如果是读的话,那么读回的数据就在这里面,你可以把他们存到文件中,如果是写的话,那它就是存储要传到设备的数据地址 (6)length:传输的数据量,这个值要小于64k (7) (unsigned long *)&nBytes:这里面存储实际传输的数据的数量 (8)不用理睬,一般设为NULL 你如果想传输多于64k的数据,可以在这个函数前后加上循环。 如果你想用循环读写,那就先写1024字节数据到设备方,在固件里把这批数据转移到in端点,然后再读回来就行了。 |
|
12楼#
发布于:2003-07-11 08:14
JINGHUIREN大侠及各位高手,我按照上面的提示修改过后,还是不能实现预期功能,还是不能实现,我感觉还是我没完全搞明白,请各位大侠赐教,我是不是还需要做驱动更改,应用程序及固件都要改动,自动连续通讯后,就可以在PANEL里自动显示吗,还请说具体点呀
|
|
|