就像戴著鐐銬跳舞的大象:約束下的工程智慧)
硬件開發(fā) 戴著鐐銬跳舞的大象太真實了這個比喻我越品越覺得貼切。大象是硬件開發(fā)的體量——一個產(chǎn)品從想法到落地牽扯元器件選型、原理圖設(shè)計、PCB Layout、結(jié)構(gòu)堆疊、嵌入式軟件、測試認(rèn)證、生產(chǎn)供應(yīng)鏈每一個環(huán)節(jié)都是真金白銀的投入和實打?qū)嵉奈锢硎澜缃换ァg備D則是它繞不開的天花板——開發(fā)周期、物料成本、功耗上限、信號完整性、散熱約束、老板的deadline甚至是你根本控制不了的上游芯片交期。你永遠(yuǎn)不可能像純軟件那樣一個CtrlS就萬事大吉寫錯了重來成本極低硬件的每一次改版都是用時間和金錢在買單。更麻煩的是硬件開發(fā)不僅要做出來還要做到量產(chǎn)要做到在成千上萬臺設(shè)備上穩(wěn)定運行這讓它每一步都像是在負(fù)重前行。這篇文章不會跟你講那些教科書上枯燥的理論我盡量用做過項目的人才有的體感來說事結(jié)合我這些年踩過的坑、悟出的道理聊聊硬件開發(fā)的本質(zhì)約束、項目推進中的關(guān)鍵決策、以及結(jié)合當(dāng)下像鴻蒙這類新生態(tài)帶來的開發(fā)思路轉(zhuǎn)變。也會順帶聊聊美團硬件工程師筆試這類招聘考察背后的能力模型以及硬件開發(fā)筆記到底該怎么記才真正有用。先聊聊“鐐銬”到底長什么樣很多人入行前對硬件開發(fā)的想象是——對著芯片手冊畫畫原理圖焊接幾塊板子調(diào)通功能就完事了。真做起來才發(fā)現(xiàn)這只是熱身都算不上。硬件開發(fā)的鐐銬從來不是單一維度的它是一整套互相牽制的約束網(wǎng)絡(luò)。1.1 物理世界是終極天花板軟件世界里的Bug往往是邏輯錯誤找到了根源改一行代碼就結(jié)束了硬件世界的Bug很詭異可能是電源紋波太大可能是阻抗不匹配導(dǎo)致信號反射可能是地環(huán)路引入了噪聲也可能是溫度一高芯片就罷工。每一個問題的背后都是電磁學(xué)、熱力學(xué)、材料科學(xué)這些底層物理規(guī)則在起作用。舉個例子你是做IoT設(shè)備的系統(tǒng)待機電流要小于10uA這時你選的主控睡眠模式漏電流是3uA電源芯片的靜態(tài)功耗是4uA再加上上拉電阻和分壓電阻的漏電整個系統(tǒng)的底噪就已經(jīng)到了8uA以上。你費盡心機把軟件優(yōu)化到極致壓測結(jié)果依然卡在11uA左右過不了標(biāo)。這沒辦法靠軟磨硬泡解決物理規(guī)律決定了部分硬件選型從一開始就是個錯誤。這就是硬件開發(fā)最考驗人的地方——你在做決策的時候就要往前看三步。選型的時候大概能估算出系統(tǒng)的底噪是多少留給外圍電路多少余量最終的規(guī)格能不能達成。如果只看芯片品牌和價格就下單后期調(diào)試再多也是事倍功半。1.2 時間窗口與供應(yīng)鏈的雙重擠壓硬件開發(fā)很少有“萬事俱備”的時候。往往芯片還在等樣片結(jié)構(gòu)件還在開模卻要在一個明確的時間點看到能跑能演示的樣機。而供應(yīng)鏈的波動又讓這件事難上加難。我經(jīng)歷過因為一顆主控缺貨整塊板子的設(shè)計方案重新選了三次的窘境也經(jīng)歷過電容電阻這種基礎(chǔ)物料漲了三倍價項目成本一下被擊穿的狀況。這類問題在軟件開發(fā)里基本不存在但在硬件開發(fā)里卻是家常便飯。一顆物料的交期長可能會讓整個項目的進度繞一大段彎路。這就逼迫硬件工程師在做方案選型時不能只考慮技術(shù)指標(biāo)替代料是否好找、pin-to-pin兼容的是否足夠多、采購渠道是否穩(wěn)定都要納入考量。這種思維模式和純寫代碼是完全不同的——代碼跑在通用平臺上而硬件工程師所有的設(shè)計目標(biāo)都在為一個非常具體的、由成千上萬個物料組成的物理實體服務(wù)。所以這顆“鐐銬”不僅僅鎖在你身上還鎖在整個供應(yīng)鏈上任何一環(huán)掉鏈子最終都會成為你在Debug現(xiàn)場甚至?xí)h室里挨罵的原因。1.3 跨職能協(xié)作帶來的隱性成本有人覺得硬件工程師只跟電路打交道實際上要跟結(jié)構(gòu)工程師溝通堆疊和開孔位置要跟嵌入式軟件工程師對齊寄存器配置和中斷引腳要跟測試工程師商討測試規(guī)范和夾具設(shè)計還要跟采購、PM、品質(zhì)、產(chǎn)線去解釋——為什么這塊板子改版了為什么這個地方要做阻抗控制為什么這個物料不能用便宜替代的。這種跨職能的溝通往往是壓垮項目進度最現(xiàn)實也最容易被忽略的一根稻草。設(shè)計被結(jié)構(gòu)干涉擋住軟件找不到啟動原因測試機臺燒了板子產(chǎn)線良率上不去最后都會順著線索追到硬件這里。戴鐐銬跳舞真正累的地方在于你承擔(dān)的不僅是自己的那部分設(shè)計還要協(xié)調(diào)所有上下游的技術(shù)矛盾。大多數(shù)產(chǎn)品的延期并不是某一個點徹底無解而是無數(shù)個小摩擦攢出來的系統(tǒng)性延遲。核心開發(fā)流程里的關(guān)鍵決策點硬件開發(fā)項目拆開了看無非是需求分析、總體設(shè)計、原理圖繪制、PCB設(shè)計、打樣調(diào)試、驗證迭代、量產(chǎn)維護這套流程。流程本身誰都會背難在每個環(huán)節(jié)里頭的關(guān)鍵決策上。2.1 需求評審先決條件不是功能而是邊界條件很多硬件Project開局就注定結(jié)局已經(jīng)埋雷了。因為需求評審的時候大家只盯著功能清單——能連藍牙、能測溫度、能上傳數(shù)據(jù)卻忽略了一個致命的問題這些東西要在什么環(huán)境下工作供電范圍是多少待機時間要多長工作溫度是多少EMC要過什么等級標(biāo)準(zhǔn)如果這些邊界條件不定義清楚后續(xù)做設(shè)計時就是無根之萍。比如老板說目標(biāo)是做一款“便攜式有源音箱”聽起來很簡單。但你得繼續(xù)往下問便攜到多小電池容量能塞多少音腔體積多少額定功率多大續(xù)航目標(biāo)幾個小時如果在會議室里沒把這些參數(shù)撕扯清楚工程師按自己的經(jīng)驗假設(shè)去做做到后面一定會發(fā)現(xiàn)——結(jié)構(gòu)上的空間根本放不下預(yù)想中的電路板電池也達不到標(biāo)稱的續(xù)航。所以在需求評審階段真正該做的是把模糊的功能描述轉(zhuǎn)變成可測量的技術(shù)指標(biāo)并且逐條拉通各個部門的確認(rèn)。每條需求都要能和機構(gòu)、軟件、測試、生產(chǎn)的限制條件關(guān)聯(lián)起來最終生成一個明確的設(shè)計規(guī)格書。這一階段多花三天后面就能省三個星期的“返工地獄”。2.2 原理圖設(shè)計真正的專業(yè)能力體現(xiàn)在細(xì)節(jié)取舍原理圖設(shè)計是硬件開發(fā)最關(guān)鍵的一環(huán)。外行人覺得原理圖無非是照著器件手冊把引腳連起來事實上器件手冊只告訴你每個引腳的推薦接法沒告訴你為什么有些引腳要加下拉電阻為什么關(guān)鍵的電源輸入要加磁珠或者π型濾波為什么高速信號線要包地。真正的項目經(jīng)驗體現(xiàn)在這些面向成本、電磁兼容、量產(chǎn)穩(wěn)定性的微調(diào)上。原理圖上任何一個看似多余的電容電阻都有它的故事。有的是為了濾除高頻噪聲有的是為靜電防護提供泄放回路有的是給芯片復(fù)位引腳做時序匹配。你省略一個0歐姆電阻看起來省了幾分錢但它可能是為了調(diào)試時方便斷開電源網(wǎng)絡(luò)測量電流而留下的活口。經(jīng)驗豐富的硬件工程師在畫原理圖的時候會在心里預(yù)演整塊板子的工作狀態(tài)。他會考慮電源的上電時序考慮芯片復(fù)位時IO口的默認(rèn)電平會不會引起外設(shè)誤動作考慮敏感信號回路的面積是否過大考慮哪些信號可能會互相干擾。這個階段看得越細(xì)后面PCB布線和Debug就越輕松。2.3 PCB設(shè)計比電路原理更復(fù)雜的物理戰(zhàn)資深工程師都明白一個道理一塊電路能不能穩(wěn)定工作從原理圖上看不出來但PCB Layout能決定六七成。原理圖是邏輯層面PCB才是物理實現(xiàn)。兩個地的回路面積不一樣效果天差地別同一條信號線走在內(nèi)層還是外層走線寬一點窄一點阻抗差多少都直接影響輻射、串?dāng)_和時序余量。PCB設(shè)計中經(jīng)常被新手忽視的一個問題是回流路徑。高速數(shù)字信號從芯片A傳到芯片B看起來是走了一條信號線但實際上電流必須通過地平面回流。如果這個回流路徑被切斷了或者繞了很遠(yuǎn)的路整個環(huán)路面積就會變大不僅是EMC輻射會超標(biāo)信號質(zhì)量也會嚴(yán)重劣化。所以在布局時就要提前規(guī)劃好哪些區(qū)域是數(shù)字區(qū)、哪些是模擬區(qū)、哪些區(qū)域的地平面要完整。我個人的經(jīng)驗是PCB布局階段寧可多花三五個小時去思考擺放位置、考慮發(fā)熱元件的散熱路徑、規(guī)劃連接器的出線方向也千萬不要草草排完就去布線。布局基本決定了一塊板子布線是否能順利也決定了后期是否能調(diào)試。所謂“磨刀不誤砍柴工”在硬件項目里就是字面意義上的真理。從招聘筆試和知識復(fù)盤看清基本功跟這個標(biāo)題一起出現(xiàn)的一些熱搜詞挺值得琢磨的比如美團硬件開發(fā)工程師筆試內(nèi)容以及硬件開發(fā)筆記。招聘筆試和日常筆記表面上是兩件小事但它們映射的其實是同一個根本問題——硬件工程師的基本功和知識體系是否足夠扎實。3.1 美團硬件工程師筆試背后的能力要求互聯(lián)網(wǎng)公司的硬件崗位往往不同于傳統(tǒng)硬件公司它們更強調(diào)系統(tǒng)思維也更關(guān)注把技術(shù)與實際商業(yè)場景結(jié)合的能力。美團這類公司的硬件崗位往往和即時配送、無人配送、智能倉儲、IoT設(shè)備管理相關(guān)所以筆試題一般不會單純考死板的芯片手冊參數(shù)它更側(cè)重考察幾個核心能力。第一是模擬電路和數(shù)字電路的基本功。運放電路的計算、三極管工作狀態(tài)判斷、邏輯門的時序分析都算比較高頻。第二是嵌入式系統(tǒng)的基本概念包括中斷機制、時鐘樹、通信接口協(xié)議等。第三是電源設(shè)計尤其是Buck、Boost這類DC-DC的拓?fù)渫茖?dǎo)和效率分析因為幾乎所有硬件系統(tǒng)都在跟功耗和熱較勁。第四是關(guān)于信號完整性與EMC的基礎(chǔ)認(rèn)知比如端接匹配、去耦電容的布置策略這類問題。如果準(zhǔn)備這類筆試我建議別去背太多復(fù)雜公式反而要把基本的歐姆定律、電容充放電、運放虛短虛斷、濾波器的截止頻率計算這類最基礎(chǔ)的內(nèi)容吃透。硬件知識是一棵技能樹所有高階的技巧都是從這些基礎(chǔ)概念上長出來的。筆試不是看你記住了多少芯片型號而是看你能不能把基礎(chǔ)知識活用在具體的問題場景里。另外還要關(guān)注電路設(shè)計中的工程化問題比如良率、成本、可靠性、可量產(chǎn)性的權(quán)衡這些常常是互聯(lián)網(wǎng)公司硬件崗特別看重的素質(zhì)。3.2 硬件開發(fā)筆記到底記什么才不浪費時間很多人記硬件開發(fā)筆記就是貼幾張芯片手冊截圖、存幾個參考設(shè)計鏈接或者復(fù)述一遍原理圖怎么畫。這類筆記記錄下來最多就是存?zhèn)€檔過了三個月自己也懶得再看第二遍。真正有價值的筆記應(yīng)該是“面向問題的復(fù)盤”。我自己的習(xí)慣是工作中每遇到一個費盡周折才解決的Bug都會單獨開一個筆記文檔結(jié)構(gòu)大致是這樣的問題現(xiàn)象是怎么樣的當(dāng)時的調(diào)試環(huán)境和儀器設(shè)置是什么排查過哪些路徑、排除過哪些可能原因最終定位到的根因是什么從原理上解釋為什么會出現(xiàn)這樣的問題這次教訓(xùn)對后續(xù)設(shè)計流程有什么指導(dǎo)意義記錄最大價值在于“回溯路徑”。你在調(diào)試某塊板子時可能花了一天時間才發(fā)現(xiàn)是某個引腳的默認(rèn)電平不對。走通之后如果沒有記錄你當(dāng)時是怎么一步步縮小范圍的下一次遇到相似問題又得從零開始摸索。硬件開發(fā)過程中踩過的坑都是非常昂貴的經(jīng)驗難道不應(yīng)該讓它發(fā)揮最大價值先不說這是給公司省了探路成本至少給未來的自己少添一點堵。硬件開發(fā)筆記不一定要文筆多好也不需要整理得多精美。關(guān)鍵是一定要有“因果鏈”。一個低概率發(fā)生的偶發(fā)問題往往比穩(wěn)定復(fù)現(xiàn)的問題更具記錄價值因為它通常意味著系統(tǒng)的某個邊界條件沒被充分理解。把這些邊界條件沉淀下來才是經(jīng)驗。鴻蒙時代硬件開發(fā)的解題方式變了聊到鴻蒙結(jié)合硬件開發(fā)這是最近很多嵌軟和硬件群里的熱議話題。有人把它當(dāng)成簡單的換皮RTOS或者換個編譯環(huán)境但如果真正用鴻蒙的生態(tài)去思考硬件開發(fā)你會發(fā)現(xiàn)解題思路是有些變化的。從技術(shù)層面來看鴻蒙跟傳統(tǒng)嵌入式最大的區(qū)別在于分布式能力。傳統(tǒng)硬件設(shè)備往往是信息孤島哪怕支持藍牙或者Wi-Fi設(shè)備之間要實現(xiàn)互聯(lián)和資源協(xié)同也要做大量私有協(xié)議的適配。而鴻蒙的分布式軟總線把設(shè)備硬件能力“虛擬化”和“共享化”了——比如一個帶攝像頭的設(shè)備可以給不帶攝像頭的設(shè)備提供視頻流能力一個帶屏設(shè)備可以遠(yuǎn)程展示另一個設(shè)備的數(shù)據(jù)界面。這種架構(gòu)反向?qū)τ布O(shè)計提出了更高要求比如要支持更低功耗的待機喚醒要預(yù)留足夠的安全相關(guān)硬件能力像安全單元或者加解密模塊要讓通信模塊的射頻性能更好以適應(yīng)設(shè)備間頻繁的發(fā)現(xiàn)和連接。同時鴻蒙生態(tài)對硬件開發(fā)的另一大影響是驅(qū)動框架的標(biāo)準(zhǔn)化?;贖DFHarmonyOS Driver Framework的設(shè)備驅(qū)動開發(fā)讓驅(qū)動層與系統(tǒng)層解耦得更徹底。硬件工程師寫的驅(qū)動代碼從傳統(tǒng)Linux的字符設(shè)備驅(qū)動邏輯中解放出來更加關(guān)注硬件本身的抽象描述。這意味著硬件設(shè)計和驅(qū)動的邊界要定義得更清晰。你在原理圖階段畫出的引腳分配不只是給自己看還要在HDF的配置代碼里描述清楚——這個GPIO是中斷輸入還是輸出控制那個I2C總線上掛了哪幾個外設(shè)地址是多少。這些需求反過來要求硬件設(shè)計具備更強的模塊化和標(biāo)準(zhǔn)化思維。在做硬件方案時你需要更早地了解上層軟件框架對硬件的抽象方式而不是像過去那樣硬件先把板子做出來再讓軟件去適配寄存器從而盡量減少“硬件定死、軟件來遷就”的別扭現(xiàn)狀。實操中的那些典型問題和排障思路實錄講完了宏觀約束和時代變化聊幾個更實際的項目場景。這里只整理我親身踩過、也幫朋友排過的幾種典型問題給讀者建立一個基礎(chǔ)的排查框架。5.1 上電后電流異常偏大現(xiàn)象板子一上電電源指示燈亮但電流到了標(biāo)稱值的兩倍芯片很快發(fā)熱。 排查路徑先用熱成像或者手指經(jīng)驗有限時慎用去找發(fā)熱最明顯的器件。拿萬用表量關(guān)鍵電源軌的對地阻抗排除焊接短路。再看電源芯片的反饋電阻是否焊錯規(guī)格導(dǎo)致輸出電壓比預(yù)設(shè)高。對照原理圖逐段斷開負(fù)載縮小故障范圍。 這類問題百分之六七十其實是焊接或物料貼裝錯誤但偶爾也會碰到芯片本身被打磨過或是假貨的情況。所以從正規(guī)渠道購買器件關(guān)鍵物料是我常年堅持的底線。5.2 通信間歇性失敗現(xiàn)象設(shè)備偶爾連不上手機或網(wǎng)關(guān)重啟之后又恢復(fù)正常毫無規(guī)律。 排查路徑先看通信模塊的供電測量通信發(fā)生瞬間的電源電壓跌落幅度。很多無線模塊在發(fā)射瞬間的電流尖峰很大如果前端電源走線太細(xì)或儲能電容不夠電壓會被拉低到模塊的欠壓復(fù)位閾值以下于是模塊悄悄重啟了表現(xiàn)就是“連不上”或者“時而斷線”。 這類問題的根源常常不在通信鏈路本身而在電源設(shè)計余量預(yù)留不足。給模塊的電源引腳就近加一個100uF甚至更大容量的電容往往能解決大量看似玄學(xué)的通信問題。5.3 產(chǎn)品在低溫環(huán)境下工作異?,F(xiàn)象設(shè)備在常溫下怎么測都穩(wěn)定進了高低溫箱溫度降到零下屏幕就開始花屏或者數(shù)據(jù)錯亂。 排查路徑關(guān)注晶振是否起振穩(wěn)定尤其是一些低成本被動晶振在低溫下可能出現(xiàn)起振困難或頻率偏差加大的情況進而影響通信時序。再檢查LDO或DC-DC的啟動特性低溫下某些電容的ESR變化會影響電源環(huán)路穩(wěn)定性。 這類問題在設(shè)計階段就應(yīng)當(dāng)做高低溫裕量測試而不是等項目量產(chǎn)了才發(fā)現(xiàn)。樣機階段偷懶沒做環(huán)境試驗后面賠的可能是整批貨的聲譽。類似這樣的問題其實還有很多可以看到絕大多數(shù)硬件Bug都是幾個側(cè)面交叉作用的結(jié)果電源、時序、地、信號完整性、溫度特性。排查的時候不要指望一步到位先快速建立假設(shè)再用最小代價的實驗去驗證假設(shè)如此循環(huán)直到鎖定真兇。關(guān)于“戴著鐐銬跳舞”的體感與進階思路回到標(biāo)題那句話上。硬件開發(fā)確實像一頭戴著鐐銬的大象目標(biāo)宏大但路徑受限。不過換個角度來看鐐銬本身就是這套職業(yè)的魅力所在——它不允許你拍腦袋逼迫你系統(tǒng)性地思考每一個決策背后交織的要素逼迫你去尊重物理世界的客觀規(guī)律。能在這些嚴(yán)苛的限制條件里把產(chǎn)品做出來本身就是一種非常有成就感的創(chuàng)作活動。想在這個領(lǐng)域走得更遠(yuǎn)我個人有幾個比較深刻的體會。第一永遠(yuǎn)不要只滿足于“板子能跑”要追問為什么能跑以及什么情況下它可能跑不了。把所有正常工作背后的邊界和原理吃透你才能真正把控產(chǎn)品質(zhì)量。第二盡早建立“設(shè)計-驗證-復(fù)盤-標(biāo)準(zhǔn)化”的閉環(huán)習(xí)慣。每完成一個項目把設(shè)計規(guī)范、檢查清單、問題復(fù)盤都沉淀成團隊的資產(chǎn)而不是讓經(jīng)驗只存在一兩個人的腦子里。第三別抗拒新的軟件生態(tài)和新的硬件架構(gòu)。從傳統(tǒng)的MCU到Linux應(yīng)用處理器再到如今鴻蒙這種面向全場景的分布式OS硬件開發(fā)的解題方式一直在變但核心邏輯始終相通——那就是在真實物理世界的限制下用工程化手段實現(xiàn)產(chǎn)品的價值。最后再分享一個個人偏好我每做一個新項目的硬件方案都會先把上一個項目的復(fù)盤筆記翻出來看一遍。不是因為記性不好而是因為硬件開發(fā)里踩過的坑往往不會只出現(xiàn)一次。它們只是換了一副面孔換了一個項目等在那里看你是否真的有長進。