2016-05-27 4 views
0

私は1つのUSBデバイスで2つのVCPをエミュレートしました。次のエンドポイントアドレスを持つ1つのVCPでデータを送信できます。データを転送するためのUSB DUAL CDCエンドポイント

#define CDC_IN_EP 0x81 /* EP1 for data IN */ 
#define CDC_OUT_EP 0x01 /* EP1 for data OUT */ 
#define CDC_CMD_EP 0x82 /* EP2 for CDC commands */ 

私は次のように、それは他のエンドポイントアドレスと他のVCPにデータを送信することが可能ですかどうかを知りたい:私の問題は、0x81と比べアドレスの他の人が私を送信することを許可していないということです

#define CDC_IN_EP3 0x83 /* EP3 for data IN */ 
#define CDC_OUT_EP3 0x03 /* EP3 for data OUT */ 
#define CDC_CMD_EP4 0x84 /* EP4 for CDC commands */ 

第2のVCP上のデータ。私は2つのCDCインターフェイスフルスピードを使用しています。通常、私たちはCDC_FSで7つのエンドポイントを使用することができます。これは私がやろうとしていることです...私は6つのエンドポイントを持っています:各VCPに3つと、7つ目は構成のエンドポイント0です。

私はEndpoints ConfigurationまたはComposite Device Descriptorsで何かを見逃しましたか?

/* USB CDC device Configuration Descriptor */ 
__ALIGN_BEGIN uint8_t USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END = 
{ 
    /* Configuration Descriptor */ 
    0x09, /* bLength: Configuration Descriptor size */ 
    USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ 
    USB_CDC_CONFIG_DESC_SIZ,  /* wTotalLength:no of returned bytes */ 
    0x00, 
    0x04, /* bNumInterfaces: 4 interface */ 
    0x01, /* bConfigurationValue: Configuration value */ 
    0x00, /* iConfiguration: Index of string descriptor describing the configuration */ 
    0xC0, /* bmAttributes: Self powered */ 
    0x32, /* MaxPower 100 mA */ 

    /*---------------------------------------------------------------------------*/ 

    // IAD0 
    0x08, // bLength: Interface Descriptor size 
    0x0B, // bDescriptorType: IAD 
    0x00, // bFirstInterface 
    0x02, // bInterfaceCount 
    0x02, // bFunctionClass: CDC 
    0x02, // bFunctionSubClass 
    0x01, // bFunctionProtocol 
    0x02, // iFunction 

    /* Interface0 Descriptor */ 
    0x09, /* bLength: Interface Descriptor size */ 
    USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */ 

    /* Interface descriptor type */ 
    0x00, /* bInterfaceNumber: Number of Interface */ 
    0x00, /* bAlternateSetting: Alternate setting */ 
    0x01, /* bNumEndpoints: One endpoints used */ 
    0x02, /* bInterfaceClass: Communication Interface Class */ 
    0x02, /* bInterfaceSubClass: Abstract Control Model */ 
    0x01, /* bInterfaceProtocol: Common AT commands */ 
    0x00, /* iInterface: */ 

    /* Header Functional Descriptor */ 
    0x05, /* bLength: Endpoint Descriptor size */ 
    0x24, /* bDescriptorType: CS_INTERFACE */ 
    0x00, /* bDescriptorSubtype: Header Func Desc */ 
    0x10, /* bcdCDC: spec release number */ 
    0x01, 

    /* Call Management Functional Descriptor */ 
    0x05, /* bFunctionLength */ 
    0x24, /* bDescriptorType: CS_INTERFACE */ 
    0x01, /* bDescriptorSubtype: Call Management Func Desc */ 
    0x03, /* bmCapabilities: D0+D1 */ 
    0x01, /* bDataInterface: 1 */ 

    /* ACM Functional Descriptor */ 
    0x04, /* bFunctionLength */ 
    0x24, /* bDescriptorType: CS_INTERFACE */ 
    0x02, /* bDescriptorSubtype: Abstract Control Management desc */ 
    0x02, /* bmCapabilities */ 

    /* Union Functional Descriptor */ 
    0x05, /* bFunctionLength */ 
    0x24, /* bDescriptorType: CS_INTERFACE */ 
    0x06, /* bDescriptorSubtype: Union func desc */ 
    0x00, /* bMasterInterface: Communication class interface */ 
    0x01, /* bSlaveInterface0: Data Class Interface */ 


    /* Endpoint 2 Descriptor */ 
    0x07,       /* bLength: Endpoint Descriptor size */ 
    USB_DESC_TYPE_ENDPOINT,  /* bDescriptorType: Endpoint */ 
    CDC_CMD_EP,     /* bEndpointAddress */ 
    0x03,       /* bmAttributes: Interrupt */ 
    LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */ 
    HIBYTE(CDC_CMD_PACKET_SIZE), 
    0xFF,       /* bInterval: */ 
    /*---------------------------------------------------------------------------*/ 

    /*Data class interface descriptor*/ 
    0x09, /* bLength: Endpoint Descriptor size */ 
    USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */ 
    0x01, /* bInterfaceNumber: Number of Interface */ 
    0x00, /* bAlternateSetting: Alternate setting */ 
    0x02, /* bNumEndpoints: Two endpoints used */ 
    0x0A, /* bInterfaceClass: CDC */ 
    0x00, /* bInterfaceSubClass: */ 
    0x00, /* bInterfaceProtocol: */ 
    0x00, /* iInterface: */ 

    /*Endpoint OUT Descriptor*/ 
    0x07, /* bLength: Endpoint Descriptor size */ 
    USB_DESC_TYPE_ENDPOINT,    /* bDescriptorType: Endpoint */ 
    CDC_OUT_EP,       /* bEndpointAddress */ 
    0x02,         /* bmAttributes: Bulk */ 
    LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ 
    HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), 
    0x00,         /* bInterval: ignore for Bulk transfer */ 

    /*Endpoint IN Descriptor*/ 
    0x07, /* bLength: Endpoint Descriptor size */ 
    USB_DESC_TYPE_ENDPOINT,    /* bDescriptorType: Endpoint */ 
    CDC_IN_EP,       /* bEndpointAddress */ 
    0x02,         /* bmAttributes: Bulk */ 
    LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ 
    HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), 
    0x00,         /* bInterval: ignore for Bulk transfer */ 

    /*---------------------------------------------------------------------------*/ 

    // IAD1 

    0x08, // bLength: Interface Descriptor size 
    0x0B, // bDescriptorType: IAD 
    0x02, // bFirstInterface 
    0x02, // bInterfaceCount 
    0x02, // bFunctionClass: CDC 
    0x02, // bFunctionSubClass 
    0x01, // bFunctionProtocol 
    0x02, // iFunction 

    /* Interface1 Descriptor */ 
    0x09, /* bLength: Interface Descriptor size */ 
    USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */ 
    /* Interface descriptor type */ 
    0x02, /* bInterfaceNumber: Number of Interface */ 
    0x00, /* bAlternateSetting: Alternate setting */ 
    0x01, /* bNumEndpoints: One endpoints used */ 
    0x02, /* bInterfaceClass: Communication Interface Class */ 
    0x02, /* bInterfaceSubClass: Abstract Control Model */ 
    0x01, /* bInterfaceProtocol: Common AT commands */ 
    0x00, /* iInterface: */ 

     /*Header Functional Descriptor*/ 
    0x05, /* bLength: Endpoint Descriptor size */ 
    0x24, /* bDescriptorType: CS_INTERFACE */ 
    0x00, /* bDescriptorSubtype: Header Func Desc */ 
    0x10, /* bcdCDC: spec release number */ 
    0x01, 

    /*Call Management Functional Descriptor*/ 
    0x05, /* bFunctionLength */ 
    0x24, /* bDescriptorType: CS_INTERFACE */ 
    0x01, /* bDescriptorSubtype: Call Management Func Desc */ 
    0x03, /* bmCapabilities: D0+D1 */ 
    0x03, /* bDataInterface: 1 */ 

    /*ACM Functional Descriptor*/ 
    0x04, /* bFunctionLength */ 
    0x24, /* bDescriptorType: CS_INTERFACE */ 
    0x02, /* bDescriptorSubtype: Abstract Control Management desc */ 
    0x02, /* bmCapabilities */ 

    /*Union Functional Descriptor*/ 
    0x05, /* bFunctionLength */ 
    0x24, /* bDescriptorType: CS_INTERFACE */ 
    0x06, /* bDescriptorSubtype: Union func desc */ 
    0x02, /* bMasterInterface: Communication class interface */ 
    0x03, /* bSlaveInterface0: Data Class Interface */ 

    /*Endpoint 2 Descriptor*/ 
    0x07,       /* bLength: Endpoint Descriptor size */ 
    USB_DESC_TYPE_ENDPOINT,  /* bDescriptorType: Endpoint */ 
    CDC_CMD_EP4,     /* bEndpointAddress */ 
    0x03,       /* bmAttributes: Interrupt */ 
    LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */ 
    HIBYTE(CDC_CMD_PACKET_SIZE), 
    0xFF,       /* bInterval: */ 
    /*---------------------------------------------------------------------------*/ 

    /*Data class interface descriptor*/ 
    0x09, /* bLength: Endpoint Descriptor size */ 
    USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */ 
    0x03, /* bInterfaceNumber: Number of Interface */ 
    0x00, /* bAlternateSetting: Alternate setting */ 
    0x02, /* bNumEndpoints: Two endpoints used */ 
    0x0A, /* bInterfaceClass: CDC */ 
    0x00, /* bInterfaceSubClass: */ 
    0x00, /* bInterfaceProtocol: */ 
    0x00, /* iInterface: */ 

    /*Endpoint OUT Descriptor*/ 
    0x07, /* bLength: Endpoint Descriptor size */ 
    USB_DESC_TYPE_ENDPOINT,    /* bDescriptorType: Endpoint */ 
    CDC_OUT_EP3,       /* bEndpointAddress */ 
    0x02,         /* bmAttributes: Bulk */ 
    LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ 
    HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), 
    0x00,         /* bInterval: ignore for Bulk transfer */ 

    /*Endpoint IN Descriptor*/ 
    0x07, /* bLength: Endpoint Descriptor size */ 
    USB_DESC_TYPE_ENDPOINT,    /* bDescriptorType: Endpoint */ 
    CDC_IN_EP3,       /* bEndpointAddress */ 
    0x02,         /* bmAttributes: Bulk */ 
    LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ 
    HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), 
    0x00         /* bInterval: ignore for Bulk transfer */ 
}; 
+0

誰でも回答してください。 – HASSAN

答えて

0

私はSTM32 USBデバイスライブラリで同様の問題がありました。構成記述子で新しいエンドポイント・アドレスを変更または追加する場合は、PMA(パケット・メモリー領域)にエンドポイント・アドレスも設定する必要があります。その後

USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev) 
{ 
    /* Init USB_IP */ 
    /* enable USB power on Pwrctrl CR2 register */ 
    HAL_PWREx_EnableVddUSB(); 
    /* Link The driver to the stack */ 
    hpcd_USB_FS.pData = pdev; 
    pdev->pData = &hpcd_USB_FS; 

    hpcd_USB_FS.Instance = USB; 
    hpcd_USB_FS.Init.dev_endpoints = 8; 
    hpcd_USB_FS.Init.speed = PCD_SPEED_FULL; 
    hpcd_USB_FS.Init.ep0_mps = DEP0CTL_MPS_8; 
    hpcd_USB_FS.Init.phy_itface = PCD_PHY_EMBEDDED; 
    hpcd_USB_FS.Init.Sof_enable = DISABLE; 
    hpcd_USB_FS.Init.low_power_enable = DISABLE; 
    hpcd_USB_FS.Init.lpm_enable = DISABLE; 
    hpcd_USB_FS.Init.battery_charging_enable = DISABLE; 
    if (HAL_PCD_Init(&hpcd_USB_FS) != HAL_OK) 
    { 
    Error_Handler(); 
    } 

    HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x00 , PCD_SNG_BUF, 0x18); 
    HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x80 , PCD_SNG_BUF, 0x58); 
    HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x81 , PCD_SNG_BUF, 0xC0); 
    HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x01 , PCD_SNG_BUF, 0x110); 
    HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x82 , PCD_SNG_BUF, 0x100); 
    return USBD_OK; 
} 

私は、データ転送のための新しいエンドポイントを使用することができます:あなたはHAL_PCDEx_PMAConfig機能付きUSBD_LL_INITブロックしていることを行うことができます。

関連する問題