打印
[STM32]

如何将STM32F103的USB描述成符合ccid的设备

[复制链接]
3137|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
梦幻泡影|  楼主 | 2018-8-9 09:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ningling_21| | 2018-8-9 09:29 | 只看该作者
可以找 圈圈

使用特权

评论回复
板凳
梦幻泡影|  楼主 | 2018-8-9 09:39 | 只看该作者

哪个圈圈

使用特权

评论回复
地板
ningling_21| | 2018-8-9 10:07 | 只看该作者

就是论坛 USB技术专区 的版主

使用特权

评论回复
5
lxyppc| | 2018-8-10 10:00 | 只看该作者
最简单的办法,买一个“符合PCSC协议的设备”,然后把描述符抓出来

使用特权

评论回复
6
梦幻泡影|  楼主 | 2018-8-14 10:38 | 只看该作者
lxyppc 发表于 2018-8-10 10:00
最简单的办法,买一个“符合PCSC协议的设备”,然后把描述符抓出来

抓不到数据

使用特权

评论回复
7
smartpower| | 2018-8-15 21:48 | 只看该作者
我自己用的CCID的描述符。

/* USB CCID device Configuration Descriptor */
__ALIGN_BEGIN uint8_t USBD_CCID_CfgFSDesc[USB_CCID_CONFIG_DESC_SIZ] __ALIGN_END =
{
  0x09, /* bLength: Configuration Descriptor size */
        USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
        USB_CCID_CONFIG_DESC_SIZ,
        /* wTotalLength: Bytes returned */
        0x00,
        0x01,         /*bNumInterfaces: 1 interface*/
        0x01,         /*bConfigurationValue: Configuration value*/
        0x00,         /*iConfiguration: Index of string descriptor describingthe configuration*/
        0x80,         /*bmAttributes: bus powered */
        0xFA,         /*MaxPower 500 mA: this current is used for detecting Vbus*/

        /********************  CCID **** interface ********************/
        0x09,   /* bLength: Interface Descriptor size */
        0x04,   /* bDescriptorType: */
        0x00,   /* bInterfaceNumber: Number of Interface */
        0x00,   /* bAlternateSetting: Alternate setting */
        0x02,   /* bNumEndpoints: 3 endpoints used */ //XCJ  02/03
        0x0B,   /* bInterfaceClass: user's interface for CCID */
        0x00,   /* bInterfaceSubClass : */
        0x00,   /* nInterfaceProtocol : None */
        0x05,   /* iInterface: */

        /*******************  CCID class descriptor ********************/
        0x36,   /* bLength: CCID Descriptor size */
        0x21,          /* bDescriptorType: Functional Descriptor type. */
        0x10,          /* bcdCCID(LSB): CCID Class Spec release number (1.00) */
        0x01,   /* bcdCCID(MSB) */

        0x00,          /* bMaxSlotIndex :highest available slot on this device */
        0x01,          /* bVoltageSupport: bit Wise OR for 01h-5.0V 02h-3.0V
                                    04h 1.8V*/

        0x03,0x00,0x00,0x00,        /* dwProtocols: 0001h = Protocol T=0 */
        0x10,0x0E,0x00,0x00,        /* dwDefaultClock: 3.6Mhz = 3600kHz = 0x0E10,
                             for 4 Mhz the value is (0x00000FA0) :
                            This is used in ETU and waiting time calculations*/
        0x10,0x0E,0x00,0x00,        /* dwMaximumClock: Maximum supported ICC clock frequency
                             in KHz. So, 3.6Mhz = 3600kHz = 0x0E10,
                                           4 Mhz (0x00000FA0) : */
        0x00,                        /* bNumClockSupported : no setting from PC
                             If the value is 00h, the
                            supported clock frequencies are assumed to be the
                            default clock frequency defined by dwDefaultClock
                            and the maximum clock frequency defined by
                            dwMaximumClock */

        0xCD,0x25,0x00,0x00,        /* dwDataRate: Default ICC I/O data rate in bps
                            9677 bps = 0x25CD
                            for example 10752 bps (0x00002A00) */

        0xCD,0x25,0x00,0x00,        /* dwMaxDataRate: Maximum supported ICC I/O data
                            rate in bps */
        0x00,                 /* bNumDataRatesSupported :
                         The number of data rates that are supported by the CCID
                         If the value is 00h, all data rates between the default
                         data rate dwDataRate and the maximum data rate
                         dwMaxDataRate are supported.
                         Dont support GET_CLOCK_FREQUENCIES
                        */

        0xfc,0x00,0x00,0x00,   /* dwMaxIFSD: 0 (T=0 only)   */
        0x00,0x00,0x00,0x00,   /* dwSynchProtocols  */
        0x00,0x00,0x00,0x00,   /* dwMechanical: no special characteristics */

        0xbe,0x04,0x04,0x00,
        /* dwFeatures: clk, baud rate, voltage : automatic */
        /* 00000008h Automatic ICC voltage selection
        00000010h Automatic ICC clock frequency change
        00000020h Automatic baud rate change according to
        active parameters provided by the Host or self
        determined 00000100h CCID can set
        ICC in clock stop mode

        Only one of the following values may be present to
        select a level of exchange:
        00010000h TPDU level exchanges with CCID
        00020000h Short APDU level exchange with CCID
        00040000h Short and Extended APDU level exchange
        If none of those values : character level of exchange*/
        0x40,0x01,0x00,0x00,  /* dwMaxCCIDMessageLength: Maximum block size + header*/
        /* 261 + 10   */

        0xff,                        /* bClassGetResponse*/
        0xff,                        /* bClassEnvelope */
        0x00,0x00,                /* wLcdLayout : 0000h no LCD. */
        0x00,                        /* bPINSupport : no PIN verif and modif  */
        0x01,                        /* bMaxCCIDBusySlots        */

        /********************  CCID   Endpoints ********************/
        0x07,   /*Endpoint descriptor length = 7*/
        0x05,   /*Endpoint descriptor type */
        CCID_IN_EP,   /*Endpoint address (IN, address 1) */
        0x02,   /*Bulk endpoint type */
        LOBYTE(CCID_DATA_FS_IN_PACKET_SIZE),
        HIBYTE(CCID_DATA_FS_IN_PACKET_SIZE),
        0x00,   /*Polling interval in milliseconds */

        0x07,   /*Endpoint descriptor length = 7 */
        0x05,   /*Endpoint descriptor type */
        CCID_OUT_EP,   /*Endpoint address (OUT, address 1) */
        0x02,   /*Bulk endpoint type */
        LOBYTE(CCID_DATA_FS_OUT_PACKET_SIZE),
        HIBYTE(CCID_DATA_FS_OUT_PACKET_SIZE),
        0x00,   /*Polling interval in milliseconds*/

// XCJ DEL
//  0x07,   /*bLength: Endpoint Descriptor size*/
//  0x05,   /*bDescriptorType:*/
//  CCID_CTIN_ADDR,    /*bEndpointAddress: Endpoint Address (IN)*/
//  0x03,   /* bmAttributes: Interrupt endpoint */
//  LOBYTE(CCID_CTIN_SIZE),
//  HIBYTE(CCID_CTIN_SIZE),
//  0x18    /*Polling interval in milliseconds */
} ;

/* USB Standard Device Descriptor */
__ALIGN_BEGIN static uint8_t USBD_CCID_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
{
  USB_LEN_DEV_QUALIFIER_DESC,
  USB_DESC_TYPE_DEVICE_QUALIFIER,
  0x00,
  0x02,
  0x00,
  0x00,
  0x00,
  0x40,
  0x01,
  0x00,
};


/* USB Standard Device Descriptor */
__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
  {
    0x12,                       /*bLength */
    USB_DESC_TYPE_DEVICE,       /*bDescriptorType*/
    0x00,                       /* bcdUSB */  
    0x02,
    0x00,                        /*bDeviceClass*/
    0x00,                       /*bDeviceSubClass*/
    0x00,                       /*bDeviceProtocol*/
    USB_MAX_EP0_SIZE,          /*bMaxPacketSize*/
    LOBYTE(USBD_VID),           /*idVendor*/
    HIBYTE(USBD_VID),           /*idVendor*/
    LOBYTE(USBD_PID_FS),           /*idVendor*/
    HIBYTE(USBD_PID_FS),           /*idVendor*/
    0x00,                       /*bcdDevice rel. 2.00*/
    0x02,
    USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
    USBD_IDX_PRODUCT_STR,       /*Index of product string*/
    USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
    USBD_MAX_NUM_CONFIGURATION  /*bNumConfigurations*/
  } ;
/* USB_DeviceDescriptor */

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

294

帖子

6

粉丝