阅读:1678回复:12
菜鸟:68013主机固件间通信问题
我用的是cypress通用驱动,ep6 in ep2 out,现在想实现:写:从应用程序向端点缓冲中写数据,然后固件中设置读到该数据进行相应操作,读,将端点缓冲中的数读出来看
问题:不知道写时向ep2中写的数据,固件中怎么把它得到,有没有EP2BUF这个东东?好像没找到,那么我应该直接写到指定地址,然后固件中从这个地址中读出对么? 还是用端点0比较方便呢? 我用通用驱动可否实现这些?请做过的给点意见,谢了!! |
|
沙发#
发布于:2005-01-18 17:02
你用的什么芯片?68013还是其他的
|
|
板凳#
发布于:2005-01-18 19:15
68013的 是不是固件从EP2FIFO[]中可以读出数据?那么EP2FIFO[0]表示低8位还是什么呢?
|
|
地板#
发布于:2005-01-19 09:45
对做过的人来说不是很难回答吧,怎么没人呢??多谢
|
|
地下室#
发布于:2005-01-19 16:50
在TD-poll里判断EP2 FIFO非EMPTY,固件直接访问EP2FIFOBUF[]即可。
|
|
5楼#
发布于:2005-01-19 16:52
数据只有几个字节的话,就用EP0吧
|
|
6楼#
发布于:2005-01-19 22:36
chaoswang 兄:帮我看看,我另开贴送分!
主机应用程序 void CUsbhostDlg::OnReplayButton() { HANDLE hDevice=NULL; BOOL bResult = FALSE; ULONG nBytes; BULK_TRANSFER_CONTROL bulkControl; unsigned char outValue; if (UsbOpenDriver (&hDevice, DeviceName) != TRUE) { MessageBox("无效设备,请重试!", "错误", MB_ICONERROR | MB_OK); hDevice = NULL; return; } if (hDevice != NULL) { outValue=0x3B; bulkControl.pipeNum = 0; //端点2对应通道0 out bResult = DeviceIoControl (hDevice, IOCTL_EZUSB_BULK_WRITE, &bulkControl, sizeof(BULK_TRANSFER_CONTROL), &outValue, 1, &nBytes, NULL); if (bResult != TRUE) AfxMessageBox("发送命令字失败!"); else AfxMessageBox("发送命令字成功!"); } CloseHandle(hDevice); return; } 固件 void TD_Poll(void) { if(!(EP2468STAT & bmEP2EMPTY)) { switch(EP2FIFOBUF[0]) { case 0x3B: OEA = 0xFF; IOA = 0x00; break; default: OEA = 0xFF; IOA = 0xFF; break; } } 主机发送成功,结果测试IOA总是全1,是没有发对地方,还是我发的数据格式不对呢? |
|
7楼#
发布于:2005-01-20 12:18
顶一下,怕掉了
|
|
8楼#
发布于:2005-01-20 22:46
现在已经可以写数据了,想问问如果用端点0的话,主机应用程序该怎么写呢?用vend_request么?
|
|
9楼#
发布于:2005-01-21 10:46
发送一般性的数据最好还是不要用端点0,否则你的固件会更复杂,如果数据量少而且传输速度也要求不高的话用EP1。
另外,看了你的固件程序,有点问题 |
|
10楼#
发布于:2005-01-21 14:34
多谢!!请指教固件问题,我另开贴送分
用EP1的话,应用程序怎么写呢? |
|
11楼#
发布于:2005-01-22 15:54
我也刚开始接触这些东西,对我也很有帮助。我只能帮你顶一下了。
|
|
12楼#
发布于:2005-01-22 17:56
你是不是想在A口输出全0呢?如果是的话,固件写错了
|
|