CH585芯片通过USB唤醒主机

配置描述符中bmAttributes字节中第5个bit:1->设备支持远程唤醒,0->设备不支持远程唤醒

配置描述符举例:

// 配置描述符示例(支持远程唤醒)
const uint8_t ConfigurationDescriptor[] = {
    // 配置描述符头(9字节)
    0x09,       // bLength
    0x02,       // bDescriptorType(配置描述符)
    0x20, 0x00, // wTotalLength(整个配置的长度,以实际长度为准)
    0x01,       // bNumInterfaces(接口数量)
    0x01,       // bConfigurationValue
    0x00,       // iConfiguration(无字符串描述)
    0xE0,       // bmAttributes(总线供电 + 支持远程唤醒)
    0x32,       // bMaxPower(100mA)
    // 后续接口和端点描述符...
};

接下来确保芯片的USB被电脑枚举完成,且配置描述符中设置了远程唤醒功能:Remote Wakeup,等待电脑进入睡眠/休眠模式后,

调用以下函数即可实现唤醒:

一、全速USB驱动文件:

/*********************************************************************
 * @fn      USB_Wake_up
 *
 * @brief   USB_Wake_up
 *
 * @return  none
 */
void USB_Wake_up( void )
{
    R16_PIN_CONFIG &= ~RB_UDP_PU_EN;         // USB上拉电阻
    R8_UDEV_CTRL |= RB_UD_LOW_SPEED;
    mDelaymS(8);
    R8_UDEV_CTRL &= ~RB_UD_LOW_SPEED;
    R16_PIN_CONFIG |= RB_UDP_PU_EN;         // USB上拉电阻
}

二、高速USB驱动文件:

/*********************************************************************
 * @fn      USBHS_Send_Resume
 *
 * @brief   USBHD device sends wake-up signal to host
 *
 * @return  none
 */
__HIGH_CODE
void USBHS_Send_Resume(void)
{
    R8_USB2_CTRL |= USBHS_UD_PHY_SUSPENDM;
    R8_USB2_WAKE_CTRL |= USBHS_UD_UD_REMOTE_WKUP;
}

 

posted @ 2025-06-06 15:18  oTvTo  阅读(109)  评论(0)    收藏  举报