1
STM32 USB復(fù)位機制
主機可以對USB設(shè)備進行復(fù)位,主要是主機在和設(shè)備通訊之前會發(fā)送Reset信號把設(shè)備設(shè)置到默認的未配置狀態(tài),即主機拉低兩根信號線(SE0狀態(tài))并保持10ms。當(dāng)STM32 USB設(shè)備檢測到主機的復(fù)位信號之后,如果復(fù)位中斷使能,則會進入復(fù)位中斷處理函數(shù)。
STM32 USB設(shè)備也可以對自身進行復(fù)位,置位控制寄存器的FRES對USB模塊強制復(fù)位,此時USB模塊將一直保持在復(fù)位狀態(tài)下直到軟件清除此位。如果USB復(fù)位中斷被使能,將產(chǎn)生一個復(fù)位中斷。USB設(shè)備在上電后首先會強制對自己進行復(fù)位,讓自己處于未配置狀態(tài)。
2
STM32 USB掛起機制
USB主機以3毫秒內(nèi)不發(fā)送任何信號標(biāo)志進入掛起狀態(tài)(3ms以上的J狀態(tài),J狀態(tài)也叫做IDEL狀態(tài))。通常情況下USB主機每毫秒會發(fā)送一個SOF,當(dāng)USB模塊檢測到3個連續(xù)的SOF分組丟失事件即可判定主機發(fā)出了掛起請求,接著它會置位SB_ISTR寄存器的SUSP位,以觸發(fā)掛起中斷,如果USB掛起中斷被使能,將產(chǎn)生一個掛起中斷。
USB設(shè)備也可以在任何地方將USB_CNTR寄存器的FSUSP置為’1’來強制掛起自己,這個過程不需要主機參與。
實際的掛起操作過程對于不同的USB設(shè)備來說是不同的,因為需要不同的操作來降低電源消耗。STM32典型的掛起處理如下。
- 將USB_CNTR寄存器的FSUSP置為’1’,這將使USB模塊進入掛起狀態(tài)。USB模塊一旦進入掛起狀態(tài),對SOF的檢測立刻停止,以避免在USB掛起時又發(fā)生新的SUSP事件。
- 消除或減少USB模塊以外的其他模塊的靜態(tài)電流消耗。
- 將USB_CNTR寄存器的LP_MODE位置為’1’,這將消除模擬USB收發(fā)器的靜態(tài)電流消耗,但仍能檢測到喚醒信號。
- 可以選擇關(guān)閉外部振蕩器和設(shè)備的PLL,以停止設(shè)備內(nèi)部的任何活動。
3
STM32 USB喚醒機制
USB設(shè)備進入掛起狀態(tài)之后,將由Resume信號進行喚醒。Resume信號可以由USB主機發(fā)起,也可以由USB設(shè)備本身觸發(fā), 但是只有USB主機可以結(jié)束Resume信號 。
1.主機在掛起設(shè)備后可通過翻轉(zhuǎn)數(shù)據(jù)線上的極性并保持20ms來喚醒設(shè)備,并以低速EOP信號結(jié)尾。
2.如果設(shè)備支持遠程喚醒,設(shè)備可向主機發(fā)起遠程喚醒請求,前提是設(shè)備已進入idle狀態(tài)至少5ms,設(shè)備會驅(qū)動總線進入K狀態(tài),如下圖,K狀態(tài)必須維持1ms-15ms之內(nèi),此信號會在1ms內(nèi)被主機接管,主機會繼續(xù)驅(qū)動喚醒信號直到20ms,并以低速EOP信號結(jié)尾。
STM32 設(shè)備被喚醒后,如果喚醒中斷使能,則會進入喚醒中斷,我們在中斷處理函數(shù)里面首先要將USB_CNTR寄存器的LP_MODE位置為’0’,退出低功耗模式,然后清除USB_CNTR寄存器的FSUSP位,退出強制掛起操作。
-
振蕩器
+關(guān)注
關(guān)注
28文章
3813瀏覽量
138883 -
寄存器
+關(guān)注
關(guān)注
31文章
5317瀏覽量
120011 -
STM32
+關(guān)注
關(guān)注
2266文章
10871瀏覽量
354824 -
USB設(shè)備
+關(guān)注
關(guān)注
0文章
57瀏覽量
16321 -
PLL電路
+關(guān)注
關(guān)注
0文章
92瀏覽量
6397
發(fā)布評論請先 登錄
相關(guān)推薦
評論