singbear
驱动牛犊
驱动牛犊
  • 注册日期2004-10-12
  • 最后登录2008-05-20
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1678回复:12

菜鸟:68013主机固件间通信问题

楼主#
更多 发布于:2005-01-18 16:27
我用的是cypress通用驱动,ep6 in ep2 out,现在想实现:写:从应用程序向端点缓冲中写数据,然后固件中设置读到该数据进行相应操作,读,将端点缓冲中的数读出来看
问题:不知道写时向ep2中写的数据,固件中怎么把它得到,有没有EP2BUF这个东东?好像没找到,那么我应该直接写到指定地址,然后固件中从这个地址中读出对么?
还是用端点0比较方便呢?
我用通用驱动可否实现这些?请做过的给点意见,谢了!!
gyjhln
驱动牛犊
驱动牛犊
  • 注册日期2003-10-10
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-18 17:02
你用的什么芯片?68013还是其他的
singbear
驱动牛犊
驱动牛犊
  • 注册日期2004-10-12
  • 最后登录2008-05-20
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-18 19:15
68013的 是不是固件从EP2FIFO[]中可以读出数据?那么EP2FIFO[0]表示低8位还是什么呢?
singbear
驱动牛犊
驱动牛犊
  • 注册日期2004-10-12
  • 最后登录2008-05-20
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-19 09:45
对做过的人来说不是很难回答吧,怎么没人呢??多谢
chaoswang
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2005-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-19 16:50
在TD-poll里判断EP2 FIFO非EMPTY,固件直接访问EP2FIFOBUF[]即可。
chaoswang
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2005-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-19 16:52
数据只有几个字节的话,就用EP0吧
singbear
驱动牛犊
驱动牛犊
  • 注册日期2004-10-12
  • 最后登录2008-05-20
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
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,是没有发对地方,还是我发的数据格式不对呢?
singbear
驱动牛犊
驱动牛犊
  • 注册日期2004-10-12
  • 最后登录2008-05-20
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-20 12:18
顶一下,怕掉了
singbear
驱动牛犊
驱动牛犊
  • 注册日期2004-10-12
  • 最后登录2008-05-20
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-20 22:46
现在已经可以写数据了,想问问如果用端点0的话,主机应用程序该怎么写呢?用vend_request么?
gyjhln
驱动牛犊
驱动牛犊
  • 注册日期2003-10-10
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-21 10:46
发送一般性的数据最好还是不要用端点0,否则你的固件会更复杂,如果数据量少而且传输速度也要求不高的话用EP1。
另外,看了你的固件程序,有点问题
singbear
驱动牛犊
驱动牛犊
  • 注册日期2004-10-12
  • 最后登录2008-05-20
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-21 14:34
多谢!!请指教固件问题,我另开贴送分
用EP1的话,应用程序怎么写呢?
xxhlyf
驱动牛犊
驱动牛犊
  • 注册日期2004-10-14
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-01-22 15:54
我也刚开始接触这些东西,对我也很有帮助。我只能帮你顶一下了。
lzyuer
驱动牛犊
驱动牛犊
  • 注册日期2004-09-05
  • 最后登录2005-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-01-22 17:56
你是不是想在A口输出全0呢?如果是的话,固件写错了
游客

返回顶部