硬汉嵌入式论坛

 找回密码
 立即注册
查看: 688|回复: 5
收起左侧

F407 USB外置PHY芯片

[复制链接]

3

主题

11

回帖

20

积分

新手上路

积分
20
发表于 2023-11-10 18:39:10 | 显示全部楼层 |阅读模式
最近做一个项目需要USB进行非常大的数据量传输,选用方案是F407+USB PHY(外置的PHY芯片,厂家CH132A),
USB枚举了COM+Keyboard+Custom HID的复合设备,在枚举过程中在请求报告描述符时失败,仿真发现程序已经发
送给PC端,但是PC端没有收到,下图是Bus软件捕获到的数据:





    if(req->wIndex == 2) { /* 键盘HID */
        switch (req->bmRequest & USB_REQ_TYPE_MASK)
        {
        case USB_REQ_TYPE_CLASS :
            switch (req->bRequest)
            {
            case HID_REQ_SET_PROTOCOL:
                USBD_Keyboard_Protocol = (uint8_t)(req->wValue);
                break;
            case HID_REQ_GET_PROTOCOL:
                USBD_CtlSendData (pdev,(uint8_t *)&USBD_Keyboard_Protocol,1);
                break;
            case HID_REQ_SET_IDLE:
                USBD_Keyboard_IdleState = (uint8_t)(req->wValue >> 8);
                break;
            case HID_REQ_GET_IDLE:
                USBD_CtlSendData (pdev,(uint8_t *)&USBD_Keyboard_IdleState,1);
                break;
            default:
                USBD_CtlError (pdev, req);
                return USBD_FAIL;
            }
            break;
        case USB_REQ_TYPE_STANDARD:
            switch (req->bRequest)
            {
            case USB_REQ_GET_DESCRIPTOR:
                if( req->wValue >> 8 == HID_REPORT_DESC)
                {
                    len = MIN(KEYBOARD_DESC_LEN_REPORT , req->wLength);
                    USBD_CtlSendData (pdev,(uint8_t *)keyboard_report_desc,len);
                }
                else if( req->wValue >> 8 == HID_DESCRIPTOR_TYPE)
                {
//#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
//                    pbuf = USBD_HID_Desc;
//#else
//                    pbuf = USBD_HID_CfgDesc + 0x12;
//#endif
                    pbuf = USBD_Composite_CfgDesc + 92;
                    len = MIN(USB_HID_DESC_SIZ , req->wLength);
                    USBD_CtlSendData (pdev,pbuf,len);
                }
                break;
            case USB_REQ_GET_INTERFACE :
                USBD_CtlSendData (pdev,(uint8_t *)&USBD_Keyboard_AltSet,1);
                break;
            case USB_REQ_SET_INTERFACE :
                USBD_Keyboard_AltSet = (uint8_t)(req->wValue);
                break;
            }
        }
    }


代码仿真调试USBD_CtlSendData (pdev,(uint8_t *)keyboard_report_desc,len);时已经被执行了的,但是PC收不到这就非常的不解,
刚刚开始请求CDC是没有问题的,进行第二次请求Keyboard的报告描述符时PC收不到。软件带着FreeRTOS操作系统,下面是硬件中
断的配置参考的是ST官方的。

* @brief  USB_OTG_BSP_EnableInterrupt
*         Enabele USB Global interrupt
* @param  None
* @retval None
*/
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
#ifdef USE_USB_OTG_HS
    HAL_NVIC_SetPriority(OTG_HS_IRQn, 3, 0);
    HAL_NVIC_EnableIRQ(OTG_HS_IRQn);
#else
    HAL_NVIC_SetPriority(OTG_FS_IRQn, 3, 0);
    HAL_NVIC_EnableIRQ(OTG_HS_IRQn);
#endif


#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED
    HAL_NVIC_SetPriority(OTG_HS_EP1_OUT_IRQn, 4, 0);
    HAL_NVIC_EnableIRQ(OTG_HS_EP1_OUT_IRQn);

    HAL_NVIC_SetPriority(OTG_HS_EP1_IN_IRQn, 4, 0);
    HAL_NVIC_EnableIRQ(OTG_HS_EP1_IN_IRQn);
#endif
}

回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2023-11-10 21:10:52 | 显示全部楼层
C:\Users\Tanxiaoli\Desktop\微信图片_20231110210932.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2023-11-11 09:06:17 | 显示全部楼层
从楼主的描述来看,貌似复位的有问题,可以单独测试每个设备是否正常,正常了再复合。
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2023-11-11 09:50:42 | 显示全部楼层
eric2013 发表于 2023-11-11 09:06
从楼主的描述来看,貌似复位的有问题,可以单独测试每个设备是否正常,正常了再复合。

这个我已经检查过了,是没问题的,不知道是外置的USB PHY问题还是ST的USB DMA问题没有发送数据给电脑。
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2023-11-11 09:53:50 | 显示全部楼层
我担心是这个操作系统影响,测试了在没有操作系统的情况下也是一样的。
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2023-11-11 10:12:57 | 显示全部楼层
Bus Hound 6.01 capture on Windows Vista (x64). Complements of www.perisoft.net

Cap

  Device - Device ID (followed by the endpoint for USB devices)
            (31) USB Composite Device
            (32) USB 串行设备 (COM4)
            (33) USB Input Device
            (34) USB Input Device
  Phase  - Phase Type
            CTL   USB control transfer      
            IN    Data in transfer           
            OUT   Data out transfer         
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Cmd... - Position in the captured data


Device  Phase  Data                                                                                                    Description                       Cmd.Phase.Ofs(rep)
------  -----  ------------------------------------------------------------------------------------------------------  --------------------------------  ------------------
  31.0  CTL    80 06 00 01  00 00 12 00                                                                                GET DESCRIPTOR                           1.1.0        
  31.0  IN     12 01 00 02  ef 02 01 40  e9 28 8b 02  00 01 01 02  03 01                                               .......@.(........                       1.2.0        
  31.0  CTL    80 06 00 02  00 00 09 00                                                                                GET DESCRIPTOR                           2.1.0        
  31.0  IN     09 02 94 00  04 01 00 80  32                                                                            ........2                                2.2.0        
  31.0  CTL    80 06 00 02  00 00 94 00                                                                                GET DESCRIPTOR                           3.1.0        
  31.0  IN     09 02 94 00  04 01 00 80  32 08 0b 00  02 02 02 01  00 09 04 00  00 01 02 02  01 00 05 24  00 10 01 05  ........2..................$....         3.2.0        
               24 01 00 01  04 24 02 02  05 24 06 00  01 07 05 82  03 08 00 0a  09 04 01 00  02 0a 00 00  00 07 05 01  $....$...$......................         3.2.32      
               02 40 00 00  07 05 81 02  40 00 00 08  0b 02 01 03  02 01 00 09  04 02 00 01  03 02 01 00  09 21 11 01  .@......@....................!..         3.2.64      
               00 01 22 2e  00 07 05 83  03 08 00 0a  08 0b 03 01  03 02 01 00  09 04 03 00  02 03 02 01  00 09 21 11  .."...........................!.         3.2.96      
               01 00 01 22  3f 00 07 05  84 03 40 00  05 07 05 04  03 40 00 05                                         ..."?.....@......@..                     3.2.128      
  31.0  CTL    00 09 01 00  00 00 00 00                                                                                SET CONFIG                               4.1.0        
  31.0  CTL    80 06 02 03  09 04 04 00                                                                                GET DESCRIPTOR                           5.1.0(3)     
  31.0  IN     26 03 44 00                                                                                             &.D.                                     5.2.0        
  31.0  CTL    80 06 02 03  09 04 26 00                                                                                GET DESCRIPTOR                           6.1.0(3)     
  31.0  IN     26 03 44 00  45 00 4a 00  2d 00 41 00  31 00 38 00  2d 00 31 00  39 00 5f 00  48 00 53 00  5f 00 4d 00  &.D.E.J.-.A.1.8.-.1.9._.H.S._.M.         6.2.0        
               6f 00 64 00  65 00                                                                                      o.d.e.                                   6.2.32      
  31.0  CTL    80 00 00 00  00 00 02 00                                                                                GET STATUS                              11.1.0        
  31.0  CTL    01 0b 00 00  01 00 00 00                                                                                SET INTERFACE                           12.1.0        
  31.0  CTL    a1 21 00 00  00 00 07 00                                                                                GET LINE CODING                         13.1.0        
  31.0  IN     00 00 00 00  00 00 00                                                                                   .......                                 13.2.0        
  31.0  CTL    21 22 00 00  00 00 00 00                                                                                SET CTRL LINE ST                        14.1.0        
  31.0  CTL    21 20 00 00  00 00 07 00                                                                                SET LINE CODING                         15.1.0        
  31.0  OUT    00 00 00 00  00 00 00                                                                                   .......                                 15.2.0        
  31.0  CTL    a1 21 00 00  00 00 07 00                                                                                GET LINE CODING                         16.1.0        
  31.0  IN     00 00 00 00  00 00 00                                                                                   .......                                 16.2.0        
  33.0  CTL    80 06 00 01  00 00 12 00                                                                                GET DESCRIPTOR                          17.1.0        
  33.0  IN     12 01 00 02  ef 02 01 40  e9 28 8b 02  00 01 01 02  03 01                                               .......@.(........                      17.2.0        
  33.0  CTL    80 06 00 02  00 00 09 00                                                                                GET DESCRIPTOR                          18.1.0        
  33.0  IN     09 02 22 00  01 01 00 80  32                                                                            ..".....2                               18.2.0        
  33.0  CTL    80 06 00 02  00 00 22 00                                                                                GET DESCRIPTOR                          19.1.0        
  33.0  IN     09 02 22 00  01 01 00 80  32 09 04 02  00 01 03 02  01 00 09 21  11 01 00 01  22 2e 00 07  05 83 03 08  ..".....2..........!....".......        19.2.0        
               00 0a                                                                                                   ..                                      19.2.32      
  33.0  CTL    00 09 01 00  00 00 00 00                                                                                SET CONFIG                              20.1.0        
  33.0  CTL    21 0a 00 00  02 00 00 00                                                                                SET IDLE                                21.1.0        
  33.0  CTL    81 06 00 22  02 00 6e 00                                                                                GET DESCRIPTOR                          22.1.0        
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 04:19 , Processed in 0.298706 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表