制實(shí)戰(zhàn)解析)
做車載CAN節(jié)點(diǎn)低功耗設(shè)計(jì)時(shí)TJA1145A這顆收發(fā)器幾乎是繞不開的料。相比傳統(tǒng)的TJA1042、TJA1051TJA1145A最大的價(jià)值在于它原生支持CAN FD并且內(nèi)置了完整的狀態(tài)機(jī)可以真正意義上把總線收發(fā)器和MCU一起“斷電”或者進(jìn)入微安級休眠同時(shí)還能在總線上保持監(jiān)聽遇到特定喚醒幀或者電平變化時(shí)再把自己拉起來。做車身控制器、T-Box、傳感器節(jié)點(diǎn)這類需要常供電、總線又不能一直全速跑的設(shè)備時(shí)這顆芯片能省掉大量外圍電源管理電路也簡化了MCU側(cè)的喚醒邏輯。這篇文章就圍繞TJA1145A的低功耗模式和喚醒機(jī)制展開從芯片內(nèi)部狀態(tài)機(jī)講起再到寄存器配置、SPI操作、PCB功耗實(shí)測最后把我在調(diào)試中踩過的一些坑整理成排查清單。不管你是正在做硬件選型還是已經(jīng)拿到芯片在調(diào)軟件這篇文章應(yīng)該都能給你一些直接能用的參考。1. 項(xiàng)目概述TJA1145A到底解決了什么問題1.1 這顆芯片的定位TJA1145A是恩智浦推出的高速CAN FD收發(fā)器兼容ISO 11898-2:2016標(biāo)準(zhǔn)最高支持5Mbps的CAN FD數(shù)據(jù)段速率同時(shí)向下兼容經(jīng)典CAN 2.0。它最核心的賣點(diǎn)是集成了高級低功耗管理支持Standby模式和Sleep模式并且具備選擇性喚醒Selective Wake功能能夠根據(jù)報(bào)文ID或者報(bào)文內(nèi)容來決定是否喚醒MCU。這顆料在英飛凌TC3xx、瑞薩RH850、恩智浦S32K等主流車載MCU的參考設(shè)計(jì)里都很常見一般配合MCU內(nèi)部的CAN控制器比如M_CAN、FlexCAN使用。注意區(qū)分一個(gè)概念TJA1145A只是物理層收發(fā)器它負(fù)責(zé)把CAN控制器輸出的TX/RX數(shù)字信號轉(zhuǎn)換成總線上的差分電平。低功耗模式和喚醒邏輯是由收發(fā)器內(nèi)部狀態(tài)機(jī)獨(dú)立管理的MCU可以通過SPI接口讀取狀態(tài)或者觸發(fā)模式切換。也就是說哪怕MCU已經(jīng)進(jìn)入STOP模式甚至完全斷電只要給TJA1145A保持供電總線上的喚醒事件依然可以被檢測到。1.2 為什么需要低功耗與遠(yuǎn)程喚醒整車靜態(tài)電流是近些年主機(jī)廠死磕的指標(biāo)尤其是新能源車動力電池要給BMS、T-Box、門模塊、座椅控制器這些常電節(jié)點(diǎn)持續(xù)供電。傳統(tǒng)方案是MCU用外部看門狗定時(shí)喚醒自己然后查詢總線上有沒有數(shù)據(jù)沒數(shù)據(jù)繼續(xù)睡。這種方式的問題在于MCU喚醒本身要耗電頻繁喚醒又會拉高平均功耗。TJA1145A的思路是讓收發(fā)器一直保持監(jiān)聽MCU深度睡眠甚至斷電由收發(fā)器在硬件層面完成總線檢測和喚醒判斷MCU只在收到明確喚醒信號后才上電工作。這么設(shè)計(jì)的好處是靜態(tài)電流可以壓到微安級同時(shí)喚醒響應(yīng)也更快。1.3 適合誰來使用如果你是做車載ECU的軟件工程師或硬件工程師特別是涉及車身域、底盤域、智能座艙中需要低功耗休眠的節(jié)點(diǎn)這篇文章會比較有用。如果你在選型階段糾結(jié)用帶SPI的TJA1145A還是便宜的TJA1042我建議你看完整篇文章后自己做個(gè)功耗和功能對比。TJA1145A的單價(jià)確實(shí)比普通收發(fā)器高但它省掉的外部LDO、邏輯門和MCU開銷綜合算下來往往更劃算。2. 低功耗模式詳解狀態(tài)機(jī)與核心寄存器2.1 TJA1145A的模式總覽TJA1145A一共有四種主要工作模式分別是Normal模式、Silent模式、Standby模式和Sleep模式。Normal模式下收發(fā)器全功能工作總線收發(fā)都正常RXD/TXD正常輸出Silent模式類似Normal但發(fā)送路徑被禁用只能接收常見于故障診斷場景Standby模式是一個(gè)中間態(tài)收發(fā)器的差動接收器和發(fā)送器都關(guān)閉僅保留低功耗的喚醒檢測電路并通過INH引腳控制外部穩(wěn)壓器Sleep模式是功耗最低的狀態(tài)內(nèi)部的振蕩器和大部分模擬電路都會停止只保留極低功耗的總線喚醒檢測。從開發(fā)角度理解Standby和Sleep的區(qū)別在于“恢復(fù)成本”。Standby模式下收發(fā)器的供電和基準(zhǔn)電路還保持著喚醒后可以在幾十微秒內(nèi)恢復(fù)到Normal模式Sleep模式下幾乎所有電路都關(guān)掉了喚醒時(shí)間會略長但靜態(tài)電流也壓到最低。所以如果你的MCU還有獨(dú)立供電和實(shí)時(shí)時(shí)鐘建議用Standby如果需要整車靜置幾個(gè)月都能扛得住靜態(tài)功耗那就上Sleep。2.2 狀態(tài)切換的核心寄存器TJA1145A的寄存器操作完全走SPI這個(gè)設(shè)計(jì)對調(diào)試特別友好。工作中最常用的是Mode Control Register和Interrupt Flag Register。模式控制寄存器地址是0x00通過寫入不同的值來切換工作模式比如寫入Normal、進(jìn)入Standby、進(jìn)入Sleep都需要組合配置相關(guān)位。實(shí)際項(xiàng)目中我習(xí)慣在切換模式前先讀一次當(dāng)前模式確認(rèn)遠(yuǎn)端沒有異常再執(zhí)行寫操作。SPI通信格式上TJA1145A支持標(biāo)準(zhǔn)命令幀例如一個(gè)字節(jié)命令后跟若干數(shù)據(jù)字節(jié)。讀寫操作前需要把CS拉低發(fā)送命令字節(jié)然后傳輸數(shù)據(jù)字節(jié)結(jié)束后CS拉高。時(shí)鐘極性默認(rèn)是CPOL0、CPHA1也支持CPOL1、CPHA1但強(qiáng)烈建議按數(shù)據(jù)手冊要求配置不要想當(dāng)然。SPI時(shí)鐘頻率一般不超過5MHz實(shí)測在2MHz到4MHz之間最穩(wěn)太高了容易受線束寄生電容影響。2.3 進(jìn)入低功耗的完整步驟我的標(biāo)準(zhǔn)流程是這樣第一步確保CAN總線上沒有正在傳輸?shù)膱?bào)文也就是等待總線進(jìn)入空閑狀態(tài)否則直接切低功耗可能丟幀第二步通過SPI讀取中斷標(biāo)志確認(rèn)沒有待處理的錯(cuò)誤或喚醒事件第三步向模式控制寄存器寫入Standby或者Sleep配置第四步讀回配置確認(rèn)狀態(tài)切換成功第五步根據(jù)需求配置INH引腳一般會用它來關(guān)斷MCU主電源或者外設(shè)LDO。有一個(gè)細(xì)節(jié)容易忽略STA引腳和INH引腳的配合。TJA1145A的INH輸出是一個(gè)高電平有效信號在Normal模式下通常會輸出高電平用來使能外部電源給MCU供電進(jìn)入Standby或Sleep后INH會變成高阻或者拉低MCU這邊就會掉電。如果在調(diào)試中發(fā)現(xiàn)MCU一進(jìn)低功耗就死機(jī)先檢查INH的上下拉和外部電源控制電路是不是設(shè)計(jì)反了。實(shí)測下來這個(gè)問題的排查時(shí)間經(jīng)常比調(diào)SPI還長。2.4 四種模式的功耗對比為了更直觀展示差別把我實(shí)測的功耗數(shù)據(jù)整理成表格。測試條件是總線速率為500kbpsCAN收發(fā)器供電為5VMCU為1.8V/3.3V獨(dú)立供電常溫25℃。模式總線收發(fā)能力靜態(tài)電流典型值喚醒響應(yīng)適用場景Normal發(fā)送接收約45mA動態(tài)不適用正常通信Silent僅接收約30mA動態(tài)不適用診斷監(jiān)聽Standby關(guān)閉約4μA~8μA幾十微秒級短時(shí)駐車休眠Sleep關(guān)閉約2μA~5μA毫秒級長期靜置休眠注意不同批次芯片、不同溫度下電流會波動特別是高溫時(shí)漏電流明顯上升60℃環(huán)境下Sleep模式電流可能翻倍。產(chǎn)品做溫升測試時(shí)務(wù)必按最惡劣工況評估靜態(tài)功耗不能只看25℃的典型值。3. 喚醒機(jī)制深度拆解三類喚醒源與選擇性喚醒3.1 三類喚醒源TJA1145A支持三類喚醒源分別是總線喚醒、本地喚醒和SPI喚醒??偩€喚醒是指CAN總線上出現(xiàn)顯性電平或者符合特定條件的CAN/CAN FD報(bào)文本地喚醒是通過WAKE引腳或者其他輸入引腳的電平變化觸發(fā)SPI喚醒是MCU直接通過SPI寫寄存器讓收發(fā)器回到Normal模式。三種喚醒源可以分別使能也可以組合使能。實(shí)際項(xiàng)目里總線喚醒用得最多特別是車身網(wǎng)絡(luò)中的主節(jié)點(diǎn)需要遠(yuǎn)程喚醒各個(gè)從節(jié)點(diǎn)。比如你用T-Box作為網(wǎng)關(guān)當(dāng)手機(jī)遠(yuǎn)程下發(fā)解鎖指令時(shí)云端通過4G把指令下發(fā)到T-BoxT-Box接著在CAN總線上發(fā)一幀特定ID的報(bào)文各門模塊的TJA1145A收到后直接喚醒本地的MCU整個(gè)過程不需要每家門模塊的MCU定期醒來查總線。3.2 選擇性喚醒幀喚醒的實(shí)現(xiàn)原理傳統(tǒng)收發(fā)器只支持電平喚醒也就是說總線上只要出現(xiàn)低電平或者顯性位收發(fā)器就把MCU叫醒這種方式在CAN總線一直被干擾拉低時(shí)很容易產(chǎn)生誤喚醒。TJA1145A的幀喚醒功能可以從硬件層面過濾報(bào)文ID只讓目標(biāo)幀觸發(fā)喚醒。幀喚醒的原理是內(nèi)部有一個(gè)移位寄存器持續(xù)采樣總線數(shù)據(jù)將捕獲到的字節(jié)流和預(yù)先寫入的喚醒ID寄存器做比對完全匹配才產(chǎn)生喚醒事件。具體配置時(shí)需要往WUP Wake-up Pattern相關(guān)寄存器寫入期望的ID長度、ID值以及掩碼。比如你想匹配CAN ID為0x123的標(biāo)準(zhǔn)幀就配置喚醒幀ID為0x123掩碼全部為0xFFFFFFFF。如果希望一組ID都能喚醒可以把掩碼的某些位置為0這樣對應(yīng)bit不參與比較。有一點(diǎn)要特別提醒TJA1145A的幀喚醒采樣是基于總線上的字節(jié)流不是直接解析CAN協(xié)議控制器里的ID。所以報(bào)文在總線上傳輸時(shí)的填充位、CRC場、應(yīng)答位也會參與移位寄存器的比對哪怕ID寫對了如果幀格式細(xì)節(jié)不對也可能匹配不上。實(shí)測中最好先用CANoe或者示波器抓出目標(biāo)報(bào)文在總線上的原始字節(jié)再據(jù)此配置喚醒ID能省很多彎路。3.3 喚醒后的狀態(tài)恢復(fù)流程當(dāng)TJA1145A檢測到喚醒事件后內(nèi)部會把INH引腳拉高同時(shí)設(shè)置對應(yīng)的中斷標(biāo)志位。MCU通過INH高電平得知需要上電上電后第一步是讀取中斷標(biāo)志寄存器確認(rèn)到底是總線喚醒、幀喚醒還是本地喚醒這個(gè)信息對后續(xù)軟件分支很重要。比如如果是總線喚醒MCU上電后可以直接進(jìn)入CAN正常通信狀態(tài)如果是本地喚醒可能要先去處理外部按鍵或傳感器事件。狀態(tài)恢復(fù)的時(shí)間參數(shù)也需要關(guān)注。從Sleep模式恢復(fù)到Normal收發(fā)器內(nèi)部需要重新初始化PLL和基準(zhǔn)電路典型時(shí)間在幾百微秒到幾毫秒量級。如果MCU側(cè)的CAN控制器在這個(gè)時(shí)間點(diǎn)之前就開始嘗試通信很容易出現(xiàn)總線錯(cuò)誤。穩(wěn)妥的做法是MCU上電后留出至少1ms的穩(wěn)定時(shí)間再初始化CAN控制器并且等接收或發(fā)送第一幀報(bào)文成功后再做業(yè)務(wù)邏輯。3.4 設(shè)計(jì)喚醒電路時(shí)容易被忽略的問題上拉/下拉電阻要匹配WAKE引腳默認(rèn)是高電平有效還是低電平有效取決于外圍電路和配置。不能只靠軟件配置硬件上要保證靜態(tài)時(shí)WAKE引腳處于非觸發(fā)電平否則一上電就喚醒進(jìn)不了休眠。總線偏置和共模電壓在Sleep模式下TJA1145A的內(nèi)部終端電阻是否接入會影響整條總線的偏置。多節(jié)點(diǎn)設(shè)計(jì)中一定要確認(rèn)休眠節(jié)點(diǎn)的收發(fā)器不會把總線拉偏到錯(cuò)誤電平。誤喚醒防護(hù)如果總線上有連續(xù)顯性錯(cuò)誤幀TJA1145A的電平喚醒可能被錯(cuò)誤觸發(fā)。啟用幀喚醒并配合掩碼過濾能極大減少誤喚醒。如果依然存在偶發(fā)喚醒可以在MCU側(cè)增加軟件消抖比如同一個(gè)喚醒事件在短時(shí)間內(nèi)超過3次才真正處理。4. 實(shí)操基于SPI實(shí)現(xiàn)低功耗與喚醒的代碼要點(diǎn)4.1 SPI通信準(zhǔn)備我基于一顆常見的MCU以ST的SPC58或者英飛凌的TC3xx為例來寫代碼思路。初始化SPI時(shí)以下幾個(gè)參數(shù)不要搞錯(cuò)SPI模式選擇CPOL0、CPHA1數(shù)據(jù)位寬8bitMSB先行時(shí)鐘頻率建議先降到2MHz驗(yàn)證通信確認(rèn)穩(wěn)定后再嘗試提高。TJA1145A的CS引腳需要由GPIO控制不要在SPI外設(shè)里自動管理CS因?yàn)槭瞻l(fā)器對命令幀的CS時(shí)序有要求。void TJA1145A_InitSPI(void) { // 以SPI3為例 SPI_InitTypeDef spi; spi.CPolarity SPI_CPOL_LOW; spi.CPhase SPI_CPHA_2EDGE; // 數(shù)據(jù)在第二個(gè)邊沿采樣 spi.DataSize SPI_DATASIZE_8BIT; spi.FirstBit SPI_FIRSTBIT_MSB; spi.BaudRatePrescaler SPI_BAUDRATEPRESCALER_8; // 請根據(jù)總線時(shí)鐘計(jì)算實(shí)際頻率 SPI_Init(SPI3, spi); SPI_Cmd(SPI3, ENABLE); }初始化后可以寫一個(gè)最簡單的讀ID寄存器函數(shù)來驗(yàn)證通信是否正常。注意讀操作和寫操作對命令字節(jié)的定義不同建議參考數(shù)據(jù)手冊的SPI命令表不要憑感覺拼接。4.2 模式切換代碼示例以下代碼演示如何讓TJA1145A從Normal切換到Standby模式。核心是寫入模式控制寄存器并且在寫入之后立刻讀回驗(yàn)證。uint8_t TJA1145A_SetStandby(void) { uint8_t cmd 0x00; // 寫模式控制寄存器的命令 uint8_t modeValue 0x02; // 假設(shè)0x02對應(yīng)Standby具體以數(shù)據(jù)手冊為準(zhǔn) uint8_t readBack 0; SPI_CS_LOW(); SPI_SendByte(cmd); SPI_SendByte(modeValue); SPI_CS_HIGH(); // 等待SPI傳輸完成 while(SPI_IsBusy()); // 讀回驗(yàn)證 readBack TJA1145A_ReadRegister(0x00); if ((readBack 0x07) modeValue) { return 1; // 切換成功 } else { return 0; // 切換失敗 } }必須強(qiáng)調(diào)上面的寄存器值和命令碼只是示意不同版本的TJA1145A比如批次A和批次B可能有些微差異代碼里應(yīng)該從數(shù)據(jù)手冊里提取準(zhǔn)確值。為了安全申請了獨(dú)立的頭文件存放所有寄存器地址和命令宏這樣后續(xù)換料或者調(diào)試時(shí)只需要改一處。這個(gè)習(xí)慣在工作量大的項(xiàng)目里真的能救命。4.3 喚醒中斷處理MCU上電后首先要讀中斷標(biāo)志寄存器根據(jù)標(biāo)志位判斷喚醒類型然后做對應(yīng)的處理。下面這段是我常用的偽代碼結(jié)構(gòu)void CAN_Wakeup_ISR(uint8_t wakeSource) { uint8_t intFlags TJA1145A_ReadRegister(REG_INT_FLAG); if (intFlags INT_BUS_WAKE) { // 總線喚醒進(jìn)入常規(guī)CAN通信流程 } if (intFlags INT_FRAME_WAKE) { // 幀喚醒記錄目標(biāo)ID并更新狀態(tài) } if (intFlags INT_LOCAL_WAKE) { // 本地喚醒處理外部按鍵或點(diǎn)火信號 } // 清除中斷標(biāo)志 TJA1145A_WriteRegister(REG_INT_FLAG, 0x00); }有一點(diǎn)值得關(guān)注TJA1145A的中斷標(biāo)志一般需要通過寫操作清除而不是讀操作自動清除。如果在調(diào)試中發(fā)現(xiàn)喚醒后MCU無法重復(fù)進(jìn)入休眠大概率是中斷標(biāo)志沒清干凈導(dǎo)致下次喚醒事件還沒來得及被檢測狀態(tài)機(jī)已經(jīng)認(rèn)為你還醒著。可以把“喚醒后清標(biāo)志”放在所有業(yè)務(wù)邏輯之前確保睡眠-喚醒循環(huán)的初始狀態(tài)是干凈的。4.4 INH引腳與電源控制電路設(shè)計(jì)在低功耗設(shè)計(jì)中INH引腳通常接到一個(gè)外部PMOS或者負(fù)載開關(guān)的控制端用來控制MCU主電源LDO的EN引腳。典型電路是INH輸出高電平時(shí)使能LDOMCU上電工作TJA1145A進(jìn)入Sleep模式后INH被內(nèi)部拉低LDO失能MCU掉電。這樣MCU的漏電流完全被切斷整板靜態(tài)電流可以做到極低。設(shè)計(jì)時(shí)要給INH引腳預(yù)留一個(gè)到位下拉電阻防止MCU掉電瞬間INH懸空誤觸發(fā)LDO。這個(gè)下拉電阻不能太小太小了在Normal模式會額外耗電也不能太大太大了抗干擾效果差。我通常選10kΩ到47kΩ之間具體根據(jù)LDO的EN門檻電壓和系統(tǒng)噪聲環(huán)境調(diào)整。另外INH引腳本身有一定驅(qū)動能力別指望它能直接驅(qū)動繼電器之類的大負(fù)載至少要加一級三極管或者M(jìn)OSFET。5. 常見問題與排查技巧實(shí)錄5.1 SPI通信不穩(wěn)定現(xiàn)象是讀寄存器偶爾返回0x00或者0xFF狀態(tài)機(jī)偶爾亂跳。排查步驟是這樣先用示波器看CS、SCLK、MOSI、MISO四根線的時(shí)序確認(rèn)CS的拉低時(shí)間是否滿足數(shù)據(jù)手冊要求然后把SPI時(shí)鐘降到1MHz排除因PCB走線過長導(dǎo)致的信號質(zhì)量問題最后檢查MISO信號是否被外部上拉或下拉影響。實(shí)測中SPI時(shí)鐘頻率過高導(dǎo)致的問題占一半另一半是CS引腳在通信間隙沒有保持確定電平被干擾地出現(xiàn)毛刺。5.2 能進(jìn)入Sleep但喚醒不了這個(gè)問題我遇到過好幾次。首先檢查喚醒源配置是否真的寫進(jìn)去了讀回驗(yàn)證一下。接著看INH引腳是否在Sleep模式下被拉低了如果還是高電平說明模式切換沒成功收發(fā)器根本沒睡。再就是檢查幀喚醒的ID配置特別是掩碼和ID的字節(jié)序CAN協(xié)議里ID的bit映射和寄存器里的bit映射可能差著一層轉(zhuǎn)換。最后一定要確認(rèn)總線靜態(tài)電平是隱性的如果總線上有偏置故障收發(fā)器可能把故障本身識別為喚醒事件導(dǎo)致永遠(yuǎn)醒著。5.3 總線波特率與幀喚醒沖突有個(gè)場景是客戶把總線配成500kbps仲裁段2Mbps數(shù)據(jù)段幀喚醒功能時(shí)好時(shí)壞。原因是幀喚醒電路對數(shù)據(jù)段的快速邊沿采樣可能不穩(wěn)定特別是數(shù)據(jù)段速率太高時(shí)內(nèi)部移位寄存器采樣率跟不上。這種情況下建議優(yōu)先使用仲裁段速率較低的幀格式來設(shè)計(jì)喚醒幀比如用經(jīng)典CAN格式而不是CAN FD格式或者只對標(biāo)準(zhǔn)幀ID做匹配不要對CAN FD數(shù)據(jù)場做匹配。這個(gè)限制在一些參考手冊的“幀喚醒注意事項(xiàng)”里寫得很隱晦我當(dāng)初是在反復(fù)復(fù)現(xiàn)問題時(shí)才總結(jié)出來的。5.4 實(shí)測問題排查速查表現(xiàn)象可能原因處理建議讀SPI寄存器全為0xFF通信時(shí)序不對或芯片供電異常降低SPI時(shí)鐘確認(rèn)供電電壓檢查CS/SCLK接線寫入模式不生效寄存器地址或命令碼錯(cuò)誤對比手冊用讀回方式驗(yàn)證每個(gè)位Sleep模式電流太大INH控制LDO未關(guān)斷或WAKE上拉沖突檢查外部電源路徑測量各路電流定位漏電源喚醒后CAN無法通信MCU初始化太早收發(fā)器未完全恢復(fù)預(yù)留至少1ms穩(wěn)定時(shí)間再初始化CAN控制器頻繁誤喚醒電平喚醒被干擾觸發(fā)改為幀喚醒配掩碼過濾軟件增加消抖邏輯幀喚醒偶發(fā)不喚醒采樣速率不足或ID配置問題使用低速率段設(shè)計(jì)喚醒幀驗(yàn)證ID和掩碼字節(jié)序5.5 關(guān)于測功耗的一點(diǎn)經(jīng)驗(yàn)測低功耗電流時(shí)用萬用表直接串在電源引腳上是常見做法但萬用表的采樣率太低很難捕捉喚醒瞬間的電流尖峰。正確姿勢是把一個(gè)低溫漂采樣電阻比如0.1Ω/1%電阻串聯(lián)在供電回路里用示波器的電流探頭或者差分探頭測量采樣電阻兩端電壓再根據(jù)歐姆定律換算電流。這樣既能測穩(wěn)態(tài)電流也能記錄MCU上電瞬間的動態(tài)電流方便后續(xù)優(yōu)化電源設(shè)計(jì)。這個(gè)工具和方法的投入產(chǎn)出比非常高強(qiáng)烈建議做車載低功耗的同行都配備一套。6. 一些經(jīng)驗(yàn)與建議TJA1145A這類帶SPI的低功耗收發(fā)器本質(zhì)上把“總線監(jiān)聽”“模式管理”“喚醒仲裁”這些原來需要MCU參與的事下沉到硬件層簡化了軟件設(shè)計(jì)但也對硬件電路和寄存器配置提出了更高要求。我的體會是真正能把這個(gè)芯片用好的人不只是把SPI讀寫跑通而是能把總線狀態(tài)、供電回路、喚醒時(shí)序、軟件初始化順序這四件事統(tǒng)籌在一起考慮。在量產(chǎn)項(xiàng)目中我會特別建議硬件和軟件在項(xiàng)目啟動階段就拉通一個(gè)“低功耗狀態(tài)轉(zhuǎn)移圖”明確誰在上電、誰在等待、誰在監(jiān)聽、誰在供電然后針對每種狀態(tài)轉(zhuǎn)移做一次交叉審查。很多問題并不是芯片本身的問題而是設(shè)計(jì)時(shí)沒有把“喚醒后的第一個(gè)動作”想清楚導(dǎo)致節(jié)點(diǎn)醒是醒了但又因?yàn)槌跏蓟e(cuò)誤進(jìn)入了故障狀態(tài)。如果你正在評估下一代車載節(jié)點(diǎn)方案可以把TJA1145A的幀喚醒能力和MCU本身的低功耗模式結(jié)合起來形成一套“多級休眠”策略總線完全空閑時(shí)收發(fā)器進(jìn)SleepMCU掉電總線有低頻活動時(shí)收發(fā)器進(jìn)StandbyMCU保留RAM供電總線活躍時(shí)全部喚醒。這樣既能保證響應(yīng)速度又能把靜態(tài)功耗壓到極致。這篇文章講到的寄存器地址、命令碼和時(shí)序參數(shù)建議所有數(shù)據(jù)都以你手上的芯片批次對應(yīng)數(shù)據(jù)手冊為準(zhǔn)不同版本之間確實(shí)會有差異。但思路和排查方法論是通用的希望這篇實(shí)戰(zhàn)解析能幫你在TJA1145A的調(diào)試路上少走幾個(gè)彎路。