CH573 USB 是否有辦法分辨USB是否斷開

你好,我想知道是否有方法分辨USB連接是否斷開。我現(xiàn)在正在使用suspend的事件,但一旦遇到需要遠(yuǎn)程喚醒的時候,suspend和斷開這兩種事件就無法分開了。想請問一下是否有什么方法可以分辨這兩種情況?


還有就是我這邊正在嘗試將藍(lán)牙低功耗模式和USB一起使用,具體的方案是在檢測到USB斷開后就進(jìn)入低功耗模式,而連接上后重新啟用USB并不再進(jìn)入低功耗模式。我現(xiàn)在使用的代碼片段如下,這段代碼在部分設(shè)備上可以正常工作而部分設(shè)備上無法正確識別USB設(shè)備,想請問一下代碼邏輯是否正確?

static?void?before_lowpower()
{
????//?Disable?USB
????R8_UDEV_CTRL?=?0;
????R8_USB_CTRL?=?0;

????//?監(jiān)聽USB?GPIO狀態(tài),如果接入則喚醒設(shè)備
????GPIO_ConfBit(USB_PIN,?GPIO_ModeIN_PU);
????GPIO_ItBit(USB_PIN,?GPIO_ITMode_FallEdge);
}

static?void?after_lowpower()
{
????//?檢查USB是否接入,如果接入則嘗試重新初始化USB
????if?(!GPIO_ReadBit(USB_PIN))?{
????????//?Reset?USB?SIE
????????R8_USB_CTRL?|=?RB_UC_RESET_SIE?|?RB_UC_CLR_ALL;
????????R8_USB_CTRL?&=?~(RB_UC_RESET_SIE?|?RB_UC_CLR_ALL);

????????USB_DeviceInit();
????}
}
/**
?*?@brief?處理LowPower事件
?*?
?*?@param?time?
?*?@return?uint32_t?
?*/
uint32_t?LowPowerHandler(uint32_t?time)
{
????//?在USB工作的情況下,不能進(jìn)入芯片的睡眠模式
????if?(!usb_is_connected)?{
????????before_lowpower();
????????uint32_t?fail?=?CH57X_LowPower(time);
????????//?睡眠后由于掉電,部分外設(shè)需要重新初始化。
????????after_lowpower();
????????return?fail;
????}
????//?沒有睡眠,ref:?http://www.findthetime.net/bbs/thread-73139-1.html
????return?1;
}


這個通過usb的狀態(tài)寄存器是區(qū)分不了的。想要區(qū)分只能另外想辦法,比如用io檢測物理連接是否斷開,比如檢測usb口的vcc或者usb口是否接地,來進(jìn)行輔助判斷。


那么低功耗模式后恢復(fù)USB操作的方法是否正確呢?


執(zhí)行邏輯沒問題,不過函數(shù)參數(shù)有問題

image.png

睡眠模式后要加延時,等時鐘穩(wěn)定

image.png

image.png

image.png


你好,我這邊嘗試在睡眠模式后增加了延時,修改了LowPower_Sleep調(diào)用參數(shù),如下:

uint32_t?CH57X_LowPower(uint32_t?time)
{
????//?前面省略...
????if?(!RTCTigFlag)?{
????????LowPower_Sleep(RB_PWR_RAM2K?|?RB_PWR_RAM16K?|?RB_PWR_EXTEND);
#if?(defined(DCDC_ENABLE))?&&?(DCDC_ENABLE?==?TRUE)
????????PWR_DCDCCfg(ENABLE);
#endif
????????time?+=?WAKE_UP_RTC_MAX_TIME;
????????if?(time?>?0xA8C00000)
????????????time?-=?0xA8C00000;
????????RTC_SetTignTime(time);
????????LowPower_Idle();
????????HSECFG_Current(HSE_RCur_100);?//?降為額定電流(低功耗函數(shù)中提升了HSE偏置電流)
????}?else?{
????????return?3;
????}
}
static?void?after_lowpower()
{
????//?檢查USB是否接入,如果接入則嘗試重新初始化USB
????if?(!GPIO_ReadBit(USB_PIN))?{
????????mDelaymS(5);
????????
????????//?Reset?USB?SIE
????????R8_USB_CTRL?|=?RB_UC_RESET_SIE?|?RB_UC_CLR_ALL;
????????R8_USB_CTRL?&=?~(RB_UC_RESET_SIE?|?RB_UC_CLR_ALL);
?
????????USB_DeviceInit();
????}
}

但還是一樣,在同一批芯片的部分設(shè)備上可以使用而部分設(shè)備上不行。抓包觀察發(fā)現(xiàn)USB主機的Setup請求后沒有ACK,抓包文件附上


icon_rar.gifDSLogic-la-210825-164741.zip



只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频