CH132 + STM32F429,出現(xiàn)“未知USB設(shè)備(設(shè)備描述符請求失?。钡膯栴}。

1. 本人公司項(xiàng)目中使用STM32F429 + CH132實(shí)現(xiàn)高速USB傳輸,代碼使用CubeMX生成,相關(guān)設(shè)置如下圖中的CubeMX配置1-4。

2. 代碼正常運(yùn)行,USB插入電腦后能檢測到插入,但提示“未知USB設(shè)備(設(shè)備描述符請求失敗)”,如圖5。

3. 檢查引腳對應(yīng)沒有問題,STM32的引腳配置和連接也都沒有問題,原理圖設(shè)計(jì)如圖6。

4. 上電后CH132的ULPI_CLK輸出有正常的60MHz,示波器測量如圖7。

5. 因?yàn)镾TM32的USB配置沒有具體的針對CH132內(nèi)部寄存器的配置方法,僅有對STM32內(nèi)部USB控制器寄存器的配置,可認(rèn)為配置完STM32的寄存器后即可遵循ULPI協(xié)議自動配置CH132的內(nèi)部寄存器。起初懷疑是庫的問題,切換使用STM32的內(nèi)部PHY是能正常識別的,是用同樣的庫文件,只是相關(guān)配置寄存器的宏定義不同。出現(xiàn)“未知USB設(shè)備(設(shè)備描述符請求失?。钡膯栴}CH132實(shí)際是否已經(jīng)正常工作了?

6. 沁恒官方是否有驗(yàn)證在STM32部分型號上可用的例程可以提供參考?


圖1-4

微信截圖_20230831160011.png微信截圖_20230831160024.png微信截圖_20230831155924.png微信截圖_20230831155951.png


圖5

微信截圖_20230831163007.png


圖6

微信截圖_20230831163534.png


圖7

微信截圖_20230831163232.png



記錄追蹤,

CubeMX的USB庫初始化函數(shù)

/**
??*?Init?USB?device?Library,?add?supported?class?and?start?the?library
??*?@retval?None
??*/
void?MX_USB_DEVICE_Init(void)
{
??/*?USER?CODE?BEGIN?USB_DEVICE_Init_PreTreatment?*/

??/*?USER?CODE?END?USB_DEVICE_Init_PreTreatment?*/

??/*?Init?Device?Library,?add?supported?class?and?start?the?library.?*/
??if?(USBD_Init(&hUsbDeviceHS,?&HS_Desc,?DEVICE_HS)?!=?USBD_OK)
??{
????Error_Handler();
??}
??if?(USBD_RegisterClass(&hUsbDeviceHS,?&USBD_CDC)?!=?USBD_OK)
??{
????Error_Handler();
??}
??if?(USBD_CDC_RegisterInterface(&hUsbDeviceHS,?&USBD_Interface_fops_HS)?!=?USBD_OK)
??{
????Error_Handler();
??}
??if?(USBD_Start(&hUsbDeviceHS)?!=?USBD_OK)
??{
????Error_Handler();
??}

??/*?USER?CODE?BEGIN?USB_DEVICE_Init_PostTreatment?*/

??/*?USER?CODE?END?USB_DEVICE_Init_PostTreatment?*/
}

在USB初始化完成并啟動USB后,USB尚未連接主機(jī),USB立即進(jìn)入了一個全局中斷(使用內(nèi)部的PHY是沒有的),進(jìn)入中斷處理函數(shù)。

/**
??*?@brief?This?function?handles?USB?On?The?Go?HS?global?interrupt.
??*/
void?OTG_HS_IRQHandler(void)
{
??/*?USER?CODE?BEGIN?OTG_HS_IRQn?0?*/

??/*?USER?CODE?END?OTG_HS_IRQn?0?*/
??HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS);
??/*?USER?CODE?BEGIN?OTG_HS_IRQn?1?*/

??/*?USER?CODE?END?OTG_HS_IRQn?1?*/
}

在中斷處理函數(shù)中獲取中斷寄存器記錄查找中斷來源

/**
??*?@brief??Handles?PCD?interrupt?request.
??*?@param??hpcd?PCD?handle
??*?@retval?HAL?status
??*/
void?HAL_PCD_IRQHandler(PCD_HandleTypeDef?*hpcd)
{
??USB_OTG_GlobalTypeDef?*USBx?=?hpcd->Instance;
??uint32_t?USBx_BASE?=?(uint32_t)USBx;
??USB_OTG_EPTypeDef?*ep;
??uint32_t?i;
??uint32_t?ep_intr;
??uint32_t?epint;
??uint32_t?epnum;
??uint32_t?fifoemptymsk;
??uint32_t?RegVal;

??/*?ensure?that?we?are?in?device?mode?*/
??if?(USB_GetMode(hpcd->Instance)?==?USB_OTG_MODE_DEVICE)
??{
		
????/*?avoid?spurious?interrupt?*/
????if?(__HAL_PCD_IS_INVALID_INTERRUPT(hpcd))
????{
??????return;
????}

????/*?store?current?frame?number?*/
????hpcd->FrameNumber?=?(USBx_DEVICE->DSTS?&?USB_OTG_DSTS_FNSOF_Msk)?>>?USB_OTG_DSTS_FNSOF_Pos;

		/*讀取中斷標(biāo)記*/
		uint32_t?it;
		it?=?(USB_ReadInterrupts(USBx));
		TRACE_DEBUG("IT?FLAG?=?%08X\r\n",it);
		
????if?(__HAL_PCD_GET_FLAG(hpcd,?USB_OTG_GINTSTS_MMIS))
????{
??????/*?incorrect?mode,?acknowledge?the?interrupt?*/
??????__HAL_PCD_CLEAR_FLAG(hpcd,?USB_OTG_GINTSTS_MMIS);
????}
????//........以下省略
}

發(fā)現(xiàn)it值為?IT FLAG = 00000800,bit11被置位,查找STM32的參考手冊O(shè)TG_HS_GINTSTS中的描述,發(fā)現(xiàn)USB總線被掛起,原因不明,進(jìn)入該中斷后,無論如何插拔USB也不會再進(jìn)入中斷。

微信截圖_20230831204700.png微信截圖_20230831204836.png

請問出現(xiàn)這種問題是何種原因呢?







糾正:使用內(nèi)部PHY也會進(jìn)入USB被掛起的中斷,但是插拔USB是能夠進(jìn)入新的中斷并處理的。使用CH132怎么插拔都沒有任何中斷響應(yīng)了??磥硎切酒蚐TM32間通訊的原因?


您好,132的CLK如有60MHz波形輸出,那么表示132A已經(jīng)在正常工作了。因?yàn)镾T的代碼,您只能看到對USB控制器的操作,無法看到控制器對phy的操作,所以代碼追查比較麻煩。您可以發(fā)送郵件到mj@wch.cn,這邊提供給您STM32F4系列MCU控制CH132的完整工程代碼,提供參考。


已發(fā)送郵件,請查收并提供STM32F4系列工程代碼,謝謝!


您好,我也遇到同樣的問題,請問您解決了么?


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

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