USB中的SOF(Start Of Frame)包是USB開(kāi)發(fā)中,經(jīng)常接觸也是很簡(jiǎn)單的一個(gè)概念:SOF由USB主機(jī)每1ms定時(shí)發(fā)出(FS),作用很多,相當(dāng)于是一個(gè)時(shí)鐘節(jié)拍基準(zhǔn),如果暫時(shí)用不到,就忽略也沒(méi)有關(guān)系。LPC5528的USB模塊中,有一個(gè)FRAME_INT中斷描述如下:
這個(gè)中斷 ”感覺(jué)好像就是SOF中斷”,似乎只是名字換成了FRAME_INT,在手冊(cè)中的描述也和SOF中斷幾乎一樣,但是手冊(cè)里就是沒(méi)有說(shuō)它就是SOF中斷。
經(jīng)過(guò)小編實(shí)測(cè)和向同事確認(rèn),發(fā)現(xiàn)這個(gè)中斷實(shí)際上并不完全等同于SOF中斷,兩者還是有一定區(qū)別的。本文就來(lái)探討一下這個(gè)問(wèn)題:
事情是這樣的: 小編最近支持一個(gè)客戶(hù),客戶(hù)的代碼中涉及低功耗按鍵喚醒,USB Remote wakeup, 也需要用到SOF中斷做為定時(shí)器來(lái)驅(qū)動(dòng)上層app事件。
客戶(hù)發(fā)現(xiàn):當(dāng)PC關(guān)機(jī)的時(shí)候,LPC5528被按鍵喚醒,喚醒后執(zhí)行Remote Wakeup(實(shí)際就是MCU將USB總線設(shè)置為K states),因?yàn)檫@時(shí)候主機(jī)Host已經(jīng)關(guān)機(jī),USB總線上沒(méi)有任何信號(hào),永遠(yuǎn)維持的K states上,但是MCU卻莫名其妙的進(jìn)入了FRAME_INT中斷,而且還是1ms的周期!
測(cè)試使用一個(gè)GPIO引腳——GPIO_SOF_EVT,每當(dāng)進(jìn)入FRAME_INT中斷后,Toggle一次;測(cè)試波形如下圖:
這有點(diǎn)奇怪了。。。USB總線上沒(méi)有任何包發(fā)過(guò)來(lái),但是還是會(huì)進(jìn)FRAME_INT中斷!難道FRAME_INT中斷不是SOF中斷?
結(jié)果確實(shí)是這樣。。經(jīng)過(guò)和同事確認(rèn),F(xiàn)RAME_INT中斷確實(shí)不是SOF中斷,它只是和SOF中斷有點(diǎn)像而已。當(dāng)VBUS沒(méi)有掉電且MCU執(zhí)行Remote wakeup(Resume)的時(shí)候, FEAME_INT還是會(huì)”如期而至”。。他和SOF包沒(méi)有必然聯(lián)系。。。疑惑中
那么如果想用SOF中斷咋辦呢?有一個(gè)簡(jiǎn)單的辦法:USB->INFO寄存器中的前11位為FRAME_NR,它記錄了正確解碼SOF的幀號(hào),每當(dāng)收到一個(gè)真正的SOF幀,F(xiàn)RAME_NR都會(huì)自加,所以在FRAME_INT中斷中可以讀入FRAME_NR來(lái)輔助判斷,這次FRAME_INT到底是不是真正的SOF包到來(lái):
代碼如下所示:
補(bǔ)充:
小編同時(shí)也測(cè)試了HS-USB的FRAME_INT中斷,其結(jié)論和FS是一樣的,只不過(guò)HS的FRAME_INT中斷是微幀,125us一次。
FRAME_INT中斷在SDK中默認(rèn)是關(guān)閉的,需要在INTEN寄存器中打開(kāi)對(duì)應(yīng)的標(biāo)志位才可以使用。
到此為止,有必要進(jìn)一步地思考一下,為什么這個(gè)USB的內(nèi)部模塊中,沒(méi)有專(zhuān)門(mén)的SOF中斷,卻出現(xiàn)了這個(gè)與SOF有關(guān),又不來(lái)源于SOF的FRAME_INT中斷。
盡管沒(méi)有與芯片設(shè)計(jì)人員溝通,但可以合理地推論,這個(gè)FRAME_INT中斷是為SOF相關(guān)應(yīng)用而設(shè)計(jì)的,之所以沒(méi)有直接使用SOF作為觸發(fā)源,是因?yàn)樵赨SB主機(jī)休眠時(shí),不再有SOF信號(hào),而對(duì)于在主機(jī)休眠時(shí)仍需要周期中斷源的USB應(yīng)用而言,則需要使用其它定時(shí)器資源來(lái)實(shí)現(xiàn)相應(yīng)功能,這樣就會(huì)占用其它片上資源,又會(huì)增加軟件調(diào)度的負(fù)擔(dān)。
而在片內(nèi)USB模塊中,設(shè)計(jì)這樣的機(jī)制,即可以在沒(méi)有外部SOF信號(hào)時(shí),繼續(xù)維持周期性的中斷,也可以在SOF信號(hào)恢復(fù)后,保持這個(gè)周期中斷與SOF同步,即實(shí)現(xiàn)了SOF中斷的功能,又兼顧了軟件的實(shí)現(xiàn)與層次劃分。
最后,這樣的設(shè)計(jì)并不增加硬件的成本。
來(lái)源:恩智浦MCU加油站
審核編輯:湯梓紅
-
usb
+關(guān)注
關(guān)注
60文章
7974瀏覽量
265485 -
中斷
+關(guān)注
關(guān)注
5文章
900瀏覽量
41626 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3254瀏覽量
115143
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論