基於S32DS實現CAN、LIN基礎結合芯片UJA1075的功耗模式切換設置(Standby、Normal、Sleep)

經過較長時間的調試,UJA1075實現進入到Sleep模式了,目標就是實現V1和V2電源的關閉,但目前這個V1的硬件電壓沒有實現完全關斷(已經實現關斷),藉着查看手冊的機會,整理一下UJA1075的芯片手冊,寫一篇較高規格的開發筆記【憨笑】

一、首先、UJA1075與微控制的通信是SPI全雙工通信

1)SPI的片選SCSN低有效;關於片選SCSN連續或不連續(親測,不影響正常讀數據);時鐘極性,在高電平有效(讀數據)

2)根據UJA1075的時序圖、可以瞭解到SPI的數據方向是高位在前;因爲寄存器爲16位,所以SPI發送爲兩個Buffer十六字節;時鐘相位爲在第二邊沿開始

3)關於總線時鐘,UJA1075手冊沒有嚴格要求、所以S32DS的SPI配置如下

4)簡單介紹一下UJA1075的寄存器、通過寄存器的高三位選擇要設置的寄存器,第四位用來設置屬性(可讀可寫\只讀)

5)首先實現簡單的SPI通信、見如下波形圖,信號線1和信號線2分別爲SPI輸入和輸出

二、實現SPI通訊後下來我們來設置UJA1075的通訊模式、以下爲主要的三種模式切換圖

1)要實現V2的關斷,最簡單的方式是將MC=10,並且保證UJA1075沒有產生復位事件、並且MC沒有設置爲MC=00(這個寄存器具體在Mode_Control register)

第一次調試就被UJA1075的復位事件搞得頭暈,現在整理一下復位事件所有來源(注意:復位事件不會導致寄存器設置重置、復位事件會觸發寄存器LHWC=1、只有重新上電纔會重置寄存器,並且POSI位會觸發):

可以看到系統復位的主要來源爲外部復位,看門狗溢出、和不正當操作寄存器,還有一個當UJA1075剛剛上電進入待機模式時、此時也會產生系統復位。並且UJA1075芯片復位的輸出信號爲LIMP跛腳功能輸出低電平。

2)爲關閉V2電源、目前外部復位引腳RSTN爲懸空(引腳斷開),並且不進行寄存器的其他操作;我們來看看門狗,看門狗有三種模式分別爲(窗口、超時和關閉模式),並且看門狗的默認時鐘週期爲128ms(當看門狗產生復位的時候,週期將被重置到128ms)。

看門狗的模式切換依據爲:通過UJA1075寄存器的WMC位來設置

看門狗的餵狗方式爲通過對WD_and_Status Register的寫操作,餵狗後看門狗立即復位,內部定時器開始重新計數

1、在啓用看門狗超時模式時,同時會喚醒CI(循環中斷),超時模式的看門狗餵狗週期爲理論NWP週期內

2、看門狗在窗口模式的餵狗週期爲NWP理論週期的後半部分

注意:觸發在前半部分則觸發或溢出會產生系統復位(具體的觸發時間在Ttrig(wd)1和Ttrig(wd)2之間)

窗口模式下看門狗在正常模式餵狗將產生新的復位事件,同時進入窗口模式的條件是(當引腳WDOFF爲低電平,SBC處於正常模式且看門狗模式控制位(WMC)設置爲0時,看門狗處於窗口模式。)

3、當看門狗可以通過兩種方式進入OFF模式

第一種通過寄存器設置WMC=1設置,但UJA1075的模式必須處於Standby待機模式,且這種關閉方式可以被任何掛起未決中斷事件(Pending)將喚醒它;

第二種通過強制給WDOFF引腳高電平,則會完全關閉看門狗,此時中斷事件將不能喚醒它,但在正常\待機模式(Normal\Standby)模式更改WDOFF狀態也會產生系統復位

4、通常S32K餵狗使用爲看門狗量身定做的LPIT定時器。但關閉V2較簡單的方式目前是將RSTN引腳斷開、關閉WDOFF=1、清除在待機模式下LHWC位因上電等其他原因產生的復位事件,然後寫寄存器進入Mode_Control register的MC=10正常(Normal)模式。

三、在實現對V2電源的關閉下,我們就已經掌握了看門狗的操作和寄存器的讀寫。下來我們來實現V1的關閉:

1、從正常模式(Normal)或待機模式(Standby)進入睡眠模式(Sleep)的條件基本一樣(此處推薦大家用谷歌)

  • 進入睡眠模式(Sleep)的條件:通過將Mode_Control寄存器(表5)中的MC位設置爲01,可以從待機模式或正常模式中選擇睡眠模式。只要沒有待處理的中(引腳INTN =高電平)或喚醒事件,並且至少有 一覺醒信號源已啓用(CAN,LIN或WAKE)。 在不滿足這些條件之一的情況下進行任何嘗試進入休眠模式的操作都會導致短暫的復位(最小脈衝寬度爲3.6 ms;請參見第6.5.1節和表11)。

2、先來看一下UJA1075的中斷事件:V1和V2欠壓中斷(V1UI、V2UI)V1欠壓閾值可設置90%或70%;CAN、LIN喚醒中斷(CWI、LWI);看門狗超時模式啓用的循環中斷(CI);芯片上電中斷(POSI);和Wake1和Wake2外部硬件喚醒中斷(WI1、WI2檢測邊沿方式可以設置),同時這些中斷事件可以通過給相應位寫1來清除。

3.下來介紹一下喚醒事件:CAN、LIN喚醒事件(CWI、LWI),Wake1和Wake2喚醒事件(WI1、WI2),喚醒後UJA1075將進入待機模式

LIN硬線喚醒條件:爲LIN總線上持續(Twake(busdom)=28~104us(微妙))低電平即可喚醒(親測可用)

CAN喚醒條件:總線上在規定時間內實現隱性顯性序列信號

Wake1和Wake2本地喚醒事件:喚醒邊沿觸發,具體喚醒邊沿可設置(在Int_Control register寄存器)

4、現在我們進入(Sleep)睡眠模式、從待機或者正常模式都可以。首先確保沒有中斷事件,像POSI(上電中斷)、循環中斷(CI)和LHWC(復位中斷),一般在初次設置寄存器時就會產生,因此需要上電後就將這些中斷關閉。像LIN和外部喚醒中斷Wake1和Wake2只要硬件不去使能就不會產生中斷事件(通常LIN懸空、Wake1和Wake2拉低就可以);然後將看門狗關閉,防止看門狗溢出,產生不必要的系統復位事件對UJA1075的模式進行影響;開啓至少一個喚醒源(CAN、LIN、Wake1或者Wake2),我選擇全部開啓;然後寫寄存器MC=01進入Sleep模式。

下圖是使用RTT進行打印的時候,產生的POSI、LHWC、CI中斷,通過清除中斷事件,和向相應寄存器寫1來清除中斷事件。

這個是當寄存器中斷和復位事件被清除後,結合芯片手冊可以從masterDataSendReg1寄存器清晰地讀到此時看門狗被硬件強制關閉(此時寄存器操作的看門狗將無效);masterDataSendReg2讀到當前模式處於MC=10,V2已經是關閉了;masterDataSendReg3讀到當前寄存器沒有開V1、V2欠壓中斷,LIN和CAN處於低功耗隨時可以總線喚醒,Wake1和Wake2同時被設置爲下降沿喚醒檢測;masterDataSendReg4讀到當前沒有任何的中斷被喚醒。(注意:RTT打印的寄存器左邊爲高八位,右邊爲低八位)

5、當從正常模式進入睡眠模式後,SPI通訊處於關閉狀態,RSTN引腳爲低,INTN引腳爲高(沒有待處理的中斷)

通過外部按鍵操作UJA1075寄存器進入Sleep,如下圖所示,SPI通訊數據爲00。(此時測得的V1電壓爲3.95V,關掉單片機電源後,芯片電壓降到0.5V,然後緩慢下降)

四、喚醒Sleep,通過上面的模式切換圖可知,三種喚醒事件可以將Sleep模式喚醒(CAN、LIN、本地喚醒事件WAKE)

Wake1本地喚醒事件:通過外部給WAKE1引腳一個下降沿信號喚醒

1、首先使用Wake1本地喚醒事件,從寄存器可以讀出喚醒後,masterDataSendReg1可以讀到V2產生了低於檢測電壓事件(低於2.7V);masterDataSendReg2的MC=00,處於待機模式,併產生LHWC復位事件,masterDataSendReg4中讀到Wake1中斷標誌位產生。(此時V1的電壓爲5V)

2,此時只需要清除WI1中斷標誌位,便可重新寫寄存器到進入(Sleep)睡眠模式

LIN總線喚醒事件:通過給LIN總線一個持續的低電平信號

1、首先使用LIN總線喚醒事件,從寄存器可以讀出喚醒後,masterDataSendReg1可以讀到V2產生了低於檢測電壓事件(低於2.7V);masterDataSendReg2的MC=00,處於待機模式,併產生LHWC復位事件,masterDataSendReg4中讀到LIN中斷標誌位產生。(此時V1的電壓爲5V)

2、當使用CAN或者LIN進入睡眠模式時,對寄存器寫1只能清除中斷標誌,不能清除掛起的事件,需要對正常模式下對STBCC和STBCL寫0,(如需下次喚醒源還是CAN和LIN,則需要將STBCC和STBCL重新置1)然後纔可以再次進入Sleep模式

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章