1
STM32 USB復(fù)位機(jī)制
主機(jī)可以對USB設(shè)備進(jìn)行復(fù)位,主要是主機(jī)在和設(shè)備通訊之前會發(fā)送Reset信號把設(shè)備設(shè)置到默認(rèn)的未配置狀態(tài),即主機(jī)拉低兩根信號線(SE0狀態(tài))并保持10ms。當(dāng)STM32 USB設(shè)備檢測到主機(jī)的復(fù)位信號之后,如果復(fù)位中斷使能,則會進(jìn)入復(fù)位中斷處理函數(shù)。
STM32 USB設(shè)備也可以對自身進(jìn)行復(fù)位,置位控制寄存器的FRES對USB模塊強(qiáng)制復(fù)位,此時USB模塊將一直保持在復(fù)位狀態(tài)下直到軟件清除此位。如果USB復(fù)位中斷被使能,將產(chǎn)生一個復(fù)位中斷。USB設(shè)備在上電后首先會強(qiáng)制對自己進(jìn)行復(fù)位,讓自己處于未配置狀態(tài)。
2
STM32 USB掛起機(jī)制
USB主機(jī)以3毫秒內(nèi)不發(fā)送任何信號標(biāo)志進(jìn)入掛起狀態(tài)(3ms以上的J狀態(tài),J狀態(tài)也叫做IDEL狀態(tài))。通常情況下USB主機(jī)每毫秒會發(fā)送一個SOF,當(dāng)USB模塊檢測到3個連續(xù)的SOF分組丟失事件即可判定主機(jī)發(fā)出了掛起請求,接著它會置位SB_ISTR寄存器的SUSP位,以觸發(fā)掛起中斷,如果USB掛起中斷被使能,將產(chǎn)生一個掛起中斷。
USB設(shè)備也可以在任何地方將USB_CNTR寄存器的FSUSP置為’1’來強(qiáng)制掛起自己,這個過程不需要主機(jī)參與。
實(shí)際的掛起操作過程對于不同的USB設(shè)備來說是不同的,因?yàn)樾枰煌牟僮鱽斫档?a target="_blank">電源消耗。STM32典型的掛起處理如下。
- 將USB_CNTR寄存器的FSUSP置為’1’,這將使USB模塊進(jìn)入掛起狀態(tài)。USB模塊一旦進(jìn)入掛起狀態(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喚醒機(jī)制
USB設(shè)備進(jìn)入掛起狀態(tài)之后,將由Resume信號進(jìn)行喚醒。Resume信號可以由USB主機(jī)發(fā)起,也可以由USB設(shè)備本身觸發(fā), 但是只有USB主機(jī)可以結(jié)束Resume信號 。
1.主機(jī)在掛起設(shè)備后可通過翻轉(zhuǎn)數(shù)據(jù)線上的極性并保持20ms來喚醒設(shè)備,并以低速EOP信號結(jié)尾。
2.如果設(shè)備支持遠(yuǎn)程喚醒,設(shè)備可向主機(jī)發(fā)起遠(yuǎn)程喚醒請求,前提是設(shè)備已進(jìn)入idle狀態(tài)至少5ms,設(shè)備會驅(qū)動總線進(jìn)入K狀態(tài),如下圖,K狀態(tài)必須維持1ms-15ms之內(nèi),此信號會在1ms內(nèi)被主機(jī)接管,主機(jī)會繼續(xù)驅(qū)動喚醒信號直到20ms,并以低速EOP信號結(jié)尾。
STM32 設(shè)備被喚醒后,如果喚醒中斷使能,則會進(jìn)入喚醒中斷,我們在中斷處理函數(shù)里面首先要將USB_CNTR寄存器的LP_MODE位置為’0’,退出低功耗模式,然后清除USB_CNTR寄存器的FSUSP位,退出強(qiáng)制掛起操作。
-
振蕩器
+關(guān)注
關(guān)注
28文章
3832瀏覽量
139093 -
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120377 -
STM32
+關(guān)注
關(guān)注
2270文章
10900瀏覽量
356045 -
USB設(shè)備
+關(guān)注
關(guān)注
0文章
57瀏覽量
16335 -
PLL電路
+關(guān)注
關(guān)注
0文章
92瀏覽量
6408
發(fā)布評論請先 登錄
相關(guān)推薦
評論