freecharry
驱动牛犊
驱动牛犊
  • 注册日期2002-03-28
  • 最后登录2003-05-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1160回复:2

请教ezusb中主从机块通信问题

楼主#
更多 发布于:2003-01-10 18:06
各位大虾帮帮忙啦,
我用ezusb开发板调试的程序,从机端是一个例子程序EzBulk_asm
主机端是自己编的,目的是主机能从从机得到64字节的数据。从机端
没有描述表,
1。我想请教一下:从机端没有描述表可以通信吗?
2。问什么我的通信能打开驱动,读取缺生描述符,但是IOCTL_EZUSB_BULK_READ时,就返回false。



我的程序如下:
从机:
start:     mov SP,#STACK-1
           mov dptr,#IN07VAL
mov a,#03h
movx @dptr, a
mov dptr,#OUT07VAL
mov a,#03h
movx @dptr, a

mov dptr,#IN2BUF
  mov r7,#64
                           ; fill EP2IN buffer with 64
fill: mov a,r7
movx @dptr,a
  inc dptr
   djnz r7,fill
; load decrementing counter starting w. 64
;
mov r1,#0 ; count the IN transfers
  mov r2,#0 ; count the OUT transfers
   mov dptr,#IN2BC  
mov a,#64
     movx @dptr,a
loop: mov dptr,#IN2CS movx a,@dptr
  jnb acc.1,service_IN2   mov dptr,#OUT2CS ;   movx a,@dptr
     jb acc.1,loop service_OUT2: inc r2 ; OUT packet counter
mov dptr,#IN2BUF+1 ; mov a,r2
   movx @dptr,a
mov dptr,#OUT2BC mov a,#1 ; any value
  movx @dptr,a
   sjmp loop
;
service_IN2:inc r1 mov dptr,#IN2BUF
  mov a,r1   movx @dptr,a
       mov dptr,#IN2BC       mov a,#64 ; 64 byte payload
       movx @dptr,a
       sjmp loop
;
END


主机:typedef struct _USB_DEVICE_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    USHORT bcdUSB;
    UCHAR bDeviceClass;
    UCHAR bDeviceSubClass;
    UCHAR bDeviceProtocol;
    UCHAR bMaxPacketSize0;
    USHORT idVendor;
    USHORT idProduct;
    USHORT bcdDevice;
    UCHAR iManufacturer;
    UCHAR iProduct;
    UCHAR iSerialNumber;
    UCHAR bNumConfigurations;
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;

void
DumpDeviceDescriptor(PUSB_DEVICE_DESCRIPTOR deviceDescriptor);

void _cdecl main()
{
   HANDLE handle = NULL;
   BOOLEAN success;
   ULONG nBytes;
   PUCHAR buffer = NULL;

   BOOLEAN bResult;
 
   BULK_TRANSFER_CONTROL bulkControl;
   int inPacketSize=64;
   UINT inBuffer[64];
   ULONG i;
  

   buffer = (PUCHAR) malloc(sizeof(USB_DEVICE_DESCRIPTOR));

   //
   // get a handle to our device
   //
   handle = CreateFile(\"\\\\\\\\.\\\\ezusb-0\",
   GENERIC_WRITE,
   FILE_SHARE_WRITE,
   NULL,
   OPEN_EXISTING,
   0,
   NULL);

   if (handle == INVALID_HANDLE_VALUE)
   {
      printf(\"Failed to open driver\\n\");
      return;
}
   else
   {
      printf(\"Opened successfully.\\n\");
   }            

   success = DeviceIoControl(handle,
      IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR,
      NULL,
      0,
      buffer,
      sizeof(USB_DEVICE_DESCRIPTOR),
      &nBytes,
      NULL);

   if (success)
   {
      DumpDeviceDescriptor((PUSB_DEVICE_DESCRIPTOR) buffer);


        bulkControl.pipeNum=8;


 bResult=DeviceIoControl(handle,IOCTL_EZUSB_BULK_READ,
&bulkControl,sizeof(BULK_TRANSFER_CONTROL),
&inBuffer[0],inPacketSize,&nBytes,NULL);
 if(!bResult)
 {
 printf(\"Correct pipe not found.\");

 }
 else
 {
 for(i=0;i<64;i++)
 {
 printf(\"%2d\\t\",inBuffer);
 }
 }

   }
   else
   {
      printf(\"IOCTL Failed\\n\");
   }

   CloseHandle(handle);
}

多谢了!!!

最新喜欢:

sunmaculasunmac...
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-01-10 19:33
1.没有描述符,主机辨识不了你的设备
2.再要wdm驱动在内存中,又没有设置独占属性,那么程序就可以打开他.
3.你把你的 firmwire 装载到 usb 芯片中了吗? 你的 firmwire  实现了 bulk-read 吗? 你的端口使能正确吗?
www.bjjcz.com
freecharry
驱动牛犊
驱动牛犊
  • 注册日期2002-03-28
  • 最后登录2003-05-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-10 19:54
再请教楼上的大虾:
   您好,我还是不太明白,再请教。我的固件是调试的时候下载道芯片的ram中的,而且这个固件是example,我想应该没社么问题。
  至于描述符,好多例子程序中都有desc.a51这个文件,是不是把它加入到我的工程中就可以了,需要自己编写诸如get_descriptor()等函数吗?从机是怎么将描述符告诉主机的?
  开发系统带的一个example:bulktest中有好多读取各种描述附的函数,都有必要吗?它是用c51编写的,我只会汇编,看不懂,你有关于块传输的程序(主从机)吗?能不能给我一份参考,在此谢过了!
游客

返回顶部