1
STM32 USB復位機制
主機可以對USB設備進行復位,主要是主機在和設備通訊之前會發送Reset信號把設備設置到默認的未配置狀態,即主機拉低兩根信號線(SE0狀態)并保持10ms。當STM32 USB設備檢測到主機的復位信號之后,如果復位中斷使能,則會進入復位中斷處理函數。
STM32 USB設備也可以對自身進行復位,置位控制寄存器的FRES對USB模塊強制復位,此時USB模塊將一直保持在復位狀態下直到軟件清除此位。如果USB復位中斷被使能,將產生一個復位中斷。USB設備在上電后首先會強制對自己進行復位,讓自己處于未配置狀態。
2
STM32 USB掛起機制
USB主機以3毫秒內不發送任何信號標志進入掛起狀態(3ms以上的J狀態,J狀態也叫做IDEL狀態)。通常情況下USB主機每毫秒會發送一個SOF,當USB模塊檢測到3個連續的SOF分組丟失事件即可判定主機發出了掛起請求,接著它會置位SB_ISTR寄存器的SUSP位,以觸發掛起中斷,如果USB掛起中斷被使能,將產生一個掛起中斷。
USB設備也可以在任何地方將USB_CNTR寄存器的FSUSP置為’1’來強制掛起自己,這個過程不需要主機參與。
實際的掛起操作過程對于不同的USB設備來說是不同的,因為需要不同的操作來降低電源消耗。STM32典型的掛起處理如下。
- 將USB_CNTR寄存器的FSUSP置為’1’,這將使USB模塊進入掛起狀態。USB模塊一旦進入掛起狀態,對SOF的檢測立刻停止,以避免在USB掛起時又發生新的SUSP事件。
- 消除或減少USB模塊以外的其他模塊的靜態電流消耗。
- 將USB_CNTR寄存器的LP_MODE位置為’1’,這將消除模擬USB收發器的靜態電流消耗,但仍能檢測到喚醒信號。
- 可以選擇關閉外部振蕩器和設備的PLL,以停止設備內部的任何活動。
3
STM32 USB喚醒機制
USB設備進入掛起狀態之后,將由Resume信號進行喚醒。Resume信號可以由USB主機發起,也可以由USB設備本身觸發, 但是只有USB主機可以結束Resume信號 。
1.主機在掛起設備后可通過翻轉數據線上的極性并保持20ms來喚醒設備,并以低速EOP信號結尾。
2.如果設備支持遠程喚醒,設備可向主機發起遠程喚醒請求,前提是設備已進入idle狀態至少5ms,設備會驅動總線進入K狀態,如下圖,K狀態必須維持1ms-15ms之內,此信號會在1ms內被主機接管,主機會繼續驅動喚醒信號直到20ms,并以低速EOP信號結尾。
STM32 設備被喚醒后,如果喚醒中斷使能,則會進入喚醒中斷,我們在中斷處理函數里面首先要將USB_CNTR寄存器的LP_MODE位置為’0’,退出低功耗模式,然后清除USB_CNTR寄存器的FSUSP位,退出強制掛起操作。
-
振蕩器
+關注
關注
28文章
3855瀏覽量
139416 -
寄存器
+關注
關注
31文章
5372瀏覽量
121295 -
STM32
+關注
關注
2273文章
10926瀏覽量
357799 -
USB設備
+關注
關注
0文章
57瀏覽量
16388 -
PLL電路
+關注
關注
0文章
92瀏覽量
6483
發布評論請先 登錄
相關推薦
詳解Linux內核搶占實現機制
圖文詳解Linux分頁機制
![圖文<b class='flag-5'>詳解</b>Linux分頁<b class='flag-5'>機制</b>](https://file1.elecfans.com/web2/M00/88/D6/wKgaomR1TWeANZeDAAAQHHpCD_E948.png)
什么是SPI機制
![什么是SPI<b class='flag-5'>機制</b>](https://file1.elecfans.com/web2/M00/A8/FD/wKgZomUiVB6Aa3kAAABgrbinaLU159.jpg)
評論