CYUSB

Posted csczq54

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CYUSB相关的知识,希望对你有一定的参考价值。

/*Summary
The application cydesc is used to open the device with cypress GUID and get the device descriptor
*/
//参考CyAPI.pdf和圈圈教你学USB


#include <windows.h>

#include <stdio.h>
#include "cyapi.h"
#include <conio.h>
#include <iostream>
#include <string>

using namespace std;

/*------------------------------------------
设备描述符(DEVICE)             1
配置描述符(CONFIGURATION)      2
字符串描述符(STRING)           3
接口描述符(INTERFACE)          4
端点描述符(ENDPOINT)           5
-------------------------------------------*/
void main()
{
    char buf[512];
    string s;
    string DevName;
    CCyUSBDevice *USBDevice;
    USB_DEVICE_DESCRIPTOR descr;

    USB_INTERFACE_DESCRIPTOR InterfaceDescr;
    
    USB_CONFIGURATION_DESCRIPTOR ConfigurationDes;


    USBDevice = new CCyUSBDevice(NULL);   // Create an instance of CCyUSBDevice

    printf("device count = %d 
",USBDevice->DeviceCount());//USB总线上USB设备数量

    for (int i=0; i < USBDevice->DeviceCount(); i++)
    {
        if (USBDevice->Open(i))
        {
            USBDevice->GetDeviceDescriptor(&descr);//设备描述符 

            printf("设备描述符GetDeviceDescriptor
");//DeviceDscr
            printf("bLength 		 0x%02x
",descr.bLength);//设备描述符的长度 18  参考圈圈教你学USB(Page 78)
            printf("bDescriptorType 	 0x%02x
",descr.bDescriptorType);//设备描述符的类型 01
            printf("bcdUSB 			 0x%04x
",descr.bcdUSB);//本设备所使用的USB协议,它使用的是BCD码表示 USB2.0协议就是0x0200,USB1.1协议就是0x0110,USB协议中使用的是小端模式
            printf("bDeviceClass 		 0x%02x
",descr.bDeviceClass);//类代码,
            printf("bDeviceSubClass 	 0x%02x
",descr.bDeviceSubClass);//子类代码
            printf("bDeviceProtocol 	 0x%02x
",descr.bDeviceProtocol);//设备使用的协议
            printf("bMaxPacketSize0 	 0x%02x
",descr.bMaxPacketSize0);//端点0最大包长
            printf("idVendor 		 0x%04x
",descr.idVendor);//厂商的ID
            printf("idProduct 		 0x%04x
",descr.idProduct);//产品ID
            printf("bcdDevice 		 0x%04x
",descr.bcdDevice);//设备版本号
            printf("iManufacturer 		 0x%02x
",descr.iManufacturer);//描述厂商的字符串索引
            printf("iProduct 		 0x%02x
",descr.iProduct);//产品的字符串索引
            printf("iSerialNumber 		 0x%02x
",descr.iSerialNumber);//产品序列号字符串索引
            printf("bNumConfigurations 	 0x%02x

",descr.bNumConfigurations);//配置数
            printf("
");

            USBDevice-> GetConfigDescriptor(&ConfigurationDes);

            printf("配置描述符GetConfigDescriptor
");//
            printf("bLength 		 0x%02x
",ConfigurationDes.bLength);//配置描述符的长度 09
            printf("bDescriptorType 		 0x%02x
",ConfigurationDes.bDescriptorType);//描述符的类型 02  配置描述符为02
            printf("wTotalLength 		 0x%04x
",ConfigurationDes.wTotalLength);//整个配置描述符的总长度
            printf("bNumInterfaces 		 0x%02x
",ConfigurationDes.bNumInterfaces);
            printf("bConfigurationValue 		 0x%02x
",ConfigurationDes.bConfigurationValue);
            printf("iConfiguration 		 0x%02x
",ConfigurationDes.iConfiguration);
            printf("bmAttributes 		 0x%02x
",ConfigurationDes.bmAttributes);//D6表示供电方式 1表示设备自供电,0表示总线供电,D5=1时,支持远程唤醒
            printf("MaxPower 		 0x%02x
",ConfigurationDes.MaxPower);//表示设备需要从总线上获取的电流值,单位为2ma
            printf("
");

            USBDevice->GetIntfcDescriptor(&InterfaceDescr);

            printf("接口描述符GetIntfcDescriptor
");//;; Interface Descriptor
            printf("bLength 		 0x%02x
",InterfaceDescr.bLength);//接口描述符的长度 09
            printf("bDescriptorType 		 0x%02x
",InterfaceDescr.bDescriptorType);//描述符的类型 04
            printf("bInterfaceNumber 		 0x%02x
",InterfaceDescr.bInterfaceNumber);//接口的编号
            printf("bAlternateSetting 		 0x%02x
",InterfaceDescr.bAlternateSetting);//接口的备用编号
            printf("bNumEndpoints 		 0x%02x
",InterfaceDescr.bNumEndpoints);//该接口使用的端点数(不包括0端点)
            printf("bInterfaceClass 		 0x%02x
",InterfaceDescr.bInterfaceClass);////接口所使用的类 子类 以及协议
            printf("bInterfaceSubClass 		 0x%02x
",InterfaceDescr.bInterfaceSubClass);
            printf("bInterfaceProtocol 		 0x%02x
",InterfaceDescr.bInterfaceProtocol);
            printf("iInterface 		 0x%02x
",InterfaceDescr.iInterface);//字符串的索引值
            printf("
");

            


            UCHAR num=USBDevice->EndPointCount();//返回接口的端点数,加1(包括0端点)
            printf("接口端点数num 		 0x%02x
",num);
            printf("
");

            UCHAR i=0;
            CCyBulkEndPoint *BulkInEpt=NULL;//建立一个端点对象
            CCyBulkEndPoint *BulkOutEpt=NULL;
            printf("传输方向
");
            for(i=0;i<num;i++)
            {
                bool bIn=USBDevice->EndPoints[i]->Address&0x80;//D7=1代表Input D7=0代表OutPut;
                bool bBulk=(USBDevice->EndPoints[i]->Attributes==2);/*是否批量传输 D1-D0代表传输类型 0控制传输 1为等时传输 2为批量传输 3为中断传输*/

                if(bIn && bBulk)//
                {
                    BulkInEpt=(CCyBulkEndPoint *)USBDevice->EndPoints[i];
                    printf("输入端点BulkInEpt= 		 0x%02x
",USBDevice->EndPoints[i]->Address);
                }    
                if(!bIn && bBulk)
                {
                    BulkOutEpt=(CCyBulkEndPoint *)USBDevice->EndPoints[i];
                    printf("输出端点BulkOutEpt= 		 0x%02x
",USBDevice->EndPoints[i]->Address);
                }
                    
            }
            printf("
");
        

            CCyUSBConfig cfg = USBDevice->GetUSBConfig(i);//获取配置描述符中的信息
            printf("bLength: 0x%x
",cfg.bLength);;
            printf("bDescriptorType: %d
",cfg.bDescriptorType);
            printf("wTotalLength: %d (0x%x)
",cfg.wTotalLength,cfg.wTotalLength);
            printf("bNumInterfaces: %d
",cfg.bNumInterfaces);
            printf("bConfigurationValue: %d
",cfg.bConfigurationValue);
            printf("iConfiguration: %d
",cfg.iConfiguration);
            printf("bmAttributes: 0x%x
",cfg.bmAttributes);
            printf("MaxPower: %d
",cfg.MaxPower);

            printf("DeviceName: %s
",USBDevice->DeviceName);//返回USB设备名称

            USBDevice->Close();
        }
        else
        {
            printf("unable to open device
");
        }
    }

    USBDevice->Close();//关闭USB设备
    _getch();

}

 

以上是关于CYUSB的主要内容,如果未能解决你的问题,请参考以下文章

CYusb与DS18B20通信

方寸微 T630 USB3.0超高速接口芯片 替换 CYUSB3014

cyusb3014接u盘为啥是2.0

FX2LP CY7C68013A上位机应用程序开发笔记

C#文件读取,FileSteam和BinaryWriter/Reader的使用

微信小程序代码片段