戰(zhàn):低功耗AI視覺(jué)終端的硬件選型與系統(tǒng)調(diào)優(yōu))
RV1126BRK801-2實(shí)戰(zhàn)如何用瑞芯微SoC打造低功耗AI視覺(jué)終端附配置清單說(shuō)實(shí)話做AI視覺(jué)終端的硬件選型這幾年我前后試過(guò)好幾套方案。從最早的高通方案到后來(lái)的一些國(guó)產(chǎn)邊緣SoC最后真正讓我穩(wěn)定用下來(lái)的反而是這套看起來(lái)不算頂配、但處處透著“夠用就好”思路的瑞芯微組合RV1126B這顆視覺(jué)SoC配合RK801-2電源管理芯片。這篇文章就把我這段時(shí)間從畫板子、調(diào)驅(qū)動(dòng)、摳功耗到最終跑通AI推理的完整過(guò)程記錄下來(lái)包括遇到的各種坑和最終的配置清單希望對(duì)準(zhǔn)備做低功耗視覺(jué)產(chǎn)品的朋友有點(diǎn)幫助。這套方案最適合的場(chǎng)景很明確電池供電或?qū)φ麢C(jī)功耗有嚴(yán)格要求的AI攝像頭、智能閘機(jī)、低功耗貓眼、巡檢機(jī)器人視覺(jué)模組以及需要長(zhǎng)時(shí)間待機(jī)、事件觸發(fā)喚醒的視覺(jué)終端。無(wú)論你是硬件工程師、嵌入式Linux開發(fā)者還是想快速評(píng)估方案的創(chuàng)客這篇文章里關(guān)于硬件選型思路、系統(tǒng)搭建步驟、電源調(diào)優(yōu)方法以及最終的物料清單都可以直接參考著抄作業(yè)。1. 項(xiàng)目定位與方案取舍1.1 為什么選RV1126B而不是RV1126或RK3566先說(shuō)結(jié)論RV1126B不是RV1126的簡(jiǎn)單降頻版它更像是瑞芯微針對(duì)“極致功耗比”場(chǎng)景單獨(dú)拉出來(lái)的一條產(chǎn)品線。單從算力看RV1126B內(nèi)置的NPU算力標(biāo)稱2TOPS和RV1126一致但關(guān)鍵差異在于整個(gè)SoC的制程、電源域設(shè)計(jì)和內(nèi)部IP的取舍。RV1126B去掉了不少視覺(jué)終端用不到的接口。比如它不再像RV1126那樣強(qiáng)調(diào)多路顯示輸出能力而是把資源集中到了MIPI CSI輸入、ISP處理和NPU推理這三條主線上。對(duì)于做單目或者雙目AI攝像頭來(lái)說(shuō)這種“削減外圍、專注核心”的思路非常友好BOM成本和Layout面積都下來(lái)了。另一個(gè)我深有體會(huì)的點(diǎn)是RV1126B對(duì)DDR的適配更寬容。RK3566雖然性能更高但功耗擺在那里對(duì)于電池供電的場(chǎng)景滿負(fù)荷跑起來(lái)整機(jī)功耗輕松超過(guò)3W散熱和電池容量都是麻煩。RV1126B在典型視覺(jué)場(chǎng)景下整機(jī)功耗可以壓到1.5W左右如果是事件觸發(fā)式的低占空比工作模式平均功耗能做到更低。這個(gè)數(shù)字對(duì)于手持設(shè)備、無(wú)線攝像頭來(lái)說(shuō)意義是決定性的。1.2 RK801-2 PMIC電源鏈路的隱形功臣很多人做嵌入式硬件時(shí)喜歡隨便拿一顆DC-DC加上幾顆LDO就把電給供了一開始確實(shí)能跑等到系統(tǒng)負(fù)載一上來(lái)或者要做低功耗休眠時(shí)問(wèn)題就全暴露了。RV1126B的電源軌很多核心電壓、DDR電壓、IO電壓、模擬電壓每一路的上下電時(shí)序都有要求。RK801-2這顆PMIC就是專門為這類SoC配套的電源管理芯片。它把多路DCDC和LDO集成在一起硬件上只需要通過(guò)I2C接口配置寄存器就能精確控制各路電源的開關(guān)和電壓。更關(guān)鍵的是它能配合SoC完成休眠喚醒時(shí)的電源域切換。我舉個(gè)例子RV1126B進(jìn)入深度睡眠模式時(shí)內(nèi)核電壓可以降到0.8V左右喚醒時(shí)再快速拉高到0.95V左右。用分立器件做這個(gè)動(dòng)態(tài)電壓調(diào)節(jié)控制邏輯非常麻煩而RK801-2直接支持這種動(dòng)態(tài)調(diào)壓軟件上只需要在設(shè)備樹里配好調(diào)壓表就行。這就是為什么我強(qiáng)烈建議不要省掉PMIC的錢在量產(chǎn)階段電源的穩(wěn)定性和低功耗性能遠(yuǎn)比省那幾塊錢的物料成本重要。1.3 明確的功能邊界與目標(biāo)場(chǎng)景動(dòng)手之前我得先想清楚這個(gè)終端到底要干什么。我的目標(biāo)場(chǎng)景是做一個(gè)低功耗AI抓拍機(jī)平時(shí)處于休眠狀態(tài)PIR傳感器檢測(cè)到人體活動(dòng)時(shí)喚醒系統(tǒng)然后通過(guò)MIPI接口抓拍一幀圖像送到NPU做目標(biāo)檢測(cè)比如檢測(cè)人形或車輛如果命中目標(biāo)就把圖片通過(guò)Wi-Fi或4G上傳然后重新進(jìn)入休眠。這個(gè)場(chǎng)景對(duì)硬件的要求非常明確待機(jī)功耗要盡量低目標(biāo)是在0.1W以下從休眠到出圖的時(shí)間要短最好在1秒以內(nèi)NPU需要能夠?qū)崟r(shí)處理一幀1080P或720P的圖像檢測(cè)耗時(shí)在幾百毫秒級(jí)別整機(jī)尺寸要小適合嵌入到各種外殼里面有了這些邊界條件方案選型就不會(huì)跑偏。RV1126B的ISP性能足夠處理主流Sensor的輸出2TOPS的NPU跑一個(gè)輕量級(jí)檢測(cè)模型也綽綽有余。RK801-2提供低功耗待機(jī)通路讓DDR進(jìn)入自刷新、CPU核斷電系統(tǒng)整體待機(jī)電流可以壓到幾十毫安級(jí)別。2. 硬件設(shè)計(jì)與核心細(xì)節(jié)2.1 內(nèi)存選型1GB DDR3到底怎么搭這是我最想展開講的部分因?yàn)轫?xiàng)目初期在這塊吃了不少虧。RV1126B原生支持DDR3和DDR3L官方SDK適配過(guò)的顆粒型號(hào)也不少。很多朋友問(wèn)“RV1126B可用的DDR3內(nèi)存1GB的有哪些”我直接給結(jié)論。1GB的DDR3通常有兩種搭法一是兩顆512MB4Gbit顆粒拼接二是使用單顆1GB8Gbit顆粒。對(duì)于RV1126B這種消費(fèi)級(jí)SoC我更推薦雙片選方案理由有三點(diǎn)第一雙片選可以降低單顆粒的位寬壓力布線更容易第二散熱更均勻不至于讓一顆顆粒承受全部熱量第三物料采購(gòu)靈活512MB顆粒的供應(yīng)鏈成熟度更高。具體到顆粒型號(hào)我實(shí)測(cè)下來(lái)比較穩(wěn)的有這幾種容量顆粒型號(hào)廠商單片位寬片選數(shù)量實(shí)測(cè)頻率512MBK4B4G1646E-BYMA三星x161片/通道1866Mbps512MBMT41K512M16HA-125美光x161片/通道1866Mbps1GBK4B8G1646D-BYK0三星x16單顆粒1866Mbps如果你要組1GB兩顆512MB設(shè)備樹里的內(nèi)存配置需要把rank數(shù)設(shè)為2同時(shí)確認(rèn)地址映射是正確的。瑞芯微SDK里有一個(gè)DDR初始化工具編譯后會(huì)生成一個(gè)DDR bin文件燒錄時(shí)會(huì)根據(jù)你在工具里選擇的顆粒型號(hào)自動(dòng)配置時(shí)序參數(shù)。這里有個(gè)非常重要的坑RV1126B對(duì)DDR3的VREF校準(zhǔn)很敏感。如果PCB layout時(shí)DQ和DQS的等長(zhǎng)沒(méi)做好在量產(chǎn)時(shí)就會(huì)出現(xiàn)“這批板子能啟動(dòng)那批板子啟動(dòng)不穩(wěn)定”的問(wèn)題。我的經(jīng)驗(yàn)是DDR部分的走線等長(zhǎng)誤差控制在50密耳以內(nèi)并且預(yù)留VREF分壓電阻的調(diào)試位置這樣后續(xù)調(diào)起來(lái)會(huì)省很多事。2.2 MIPI CSI接口與Sensor選型低功耗AI視覺(jué)終端逃不掉Sensor選型的問(wèn)題。RV1126B的MIPI CSI接口支持1路4-lane或者2路2-lane支持虛擬通道也就是說(shuō)你可以同時(shí)接兩個(gè)Sensor做雙目。對(duì)于抓拍機(jī)這種場(chǎng)景我建議優(yōu)先考慮低照度性能好的Sensor。我最終選了SC530AI這顆500萬(wàn)像素的Sensor。選它的理由有幾個(gè)一是功耗相對(duì)較低工作在30fps時(shí)典型功耗在150mW左右二是它支持RAW輸出可以把ISP的處理能力完全發(fā)揮出來(lái)三是動(dòng)態(tài)范圍不錯(cuò)適用于光線變化比較大的室外場(chǎng)景。接Sensor時(shí)需要關(guān)注幾個(gè)信號(hào)MCLK時(shí)鐘、I2C控制、復(fù)位腳、電源。RV1126B的MCLK默認(rèn)可能是24MHz而SC530AI的最佳工作頻率也是24MHz這個(gè)匹配上問(wèn)題不大。但要注意RV1126B的MCLK輸出幅度如果Sensor的輸入時(shí)鐘幅度不足會(huì)導(dǎo)致圖像出現(xiàn)條紋干擾。我遇到過(guò)的一個(gè)典型問(wèn)題是Sensor的AVDD電源如果直接用PMIC的LDO供電上電瞬間可能會(huì)有毛刺導(dǎo)致Sensor初始化偶爾失敗。解決辦法是在LDO輸出端加一顆10uF的電容同時(shí)把復(fù)位時(shí)序拉長(zhǎng)一些在IORESET拉低后等至少10ms再拉高確保Sensor內(nèi)部穩(wěn)壓器完全穩(wěn)定。2.3 硬件配置清單草案畫板子之前我把核心物料清單先拉了出來(lái)方便后續(xù)采購(gòu)和layout模塊物料型號(hào)/規(guī)格備注SoCRV1126BBGA封裝主控PMICRK801-2QFN封裝電源管理DDR3K4B4G1646E x2512MB x2共1GBeMMC8GBFBGA153系統(tǒng)存儲(chǔ)SensorSC530AI500萬(wàn)像素MIPI接口Wi-FiRTL8188FUUSB接口低功耗Wi-Fi電源MP2162DC-DC輸入5V轉(zhuǎn)3.8V系統(tǒng)供電接口USB Type-C調(diào)試供電支持UVC這個(gè)清單不是固定的如果你做的是純有線供電的閘機(jī)Wi-Fi可以去掉如果要做4G版本需要額外加一顆4G模組功耗預(yù)算也要相應(yīng)提高。3. 系統(tǒng)搭建與AI推理鏈路3.1 SDK環(huán)境與首次編譯瑞芯微的SDK體積比較大建議在Ubuntu 18.04或20.04的機(jī)器上編譯。編譯環(huán)境有幾個(gè)關(guān)鍵依賴需要裝齊repo工具、make、gcc-arm-linux-gnueabihf交叉編譯鏈、python2.7SDK里有部分腳本依賴。拉代碼的過(guò)程就不展開說(shuō)了基本就是repo init加repo sync。SDK編譯的第一步是選擇配置文件cd sdk source build/envsetup.sh lunch rv1126b-userdebug ./build.sh -A首次編譯的時(shí)間比較長(zhǎng)我這邊雙路E5的服務(wù)器大概要二十分鐘左右。編譯完成后輸出目錄里會(huì)有update.img用瑞芯微的燒錄工具燒錄即可。有一個(gè)我踩過(guò)的坑SDK默認(rèn)的編譯工具鏈版本在Ubuntu 20.04上會(huì)有兼容性問(wèn)題報(bào)錯(cuò)通常是找不到某個(gè)GCC依賴的文件。解決方法是安裝lib32gcc-9-dev和lib32stdc-9-dev或者直接裝lib32readline-dev基本能覆蓋大部分缺失的依賴。3.2 設(shè)備樹與內(nèi)核配置要點(diǎn)系統(tǒng)的低功耗能力很大程度上取決于內(nèi)核配置。RV1126B的SDK內(nèi)核版本是Linux 4.19這個(gè)版本對(duì)電源管理的支持已經(jīng)比較完善了。設(shè)備樹中需要重點(diǎn)配置的幾個(gè)節(jié)點(diǎn)PMIC節(jié)點(diǎn)RK801-2的I2C地址一般是0x20需要在i2c總線下注冊(cè)。關(guān)鍵要配好各路regulator的電壓范圍和調(diào)壓表。舉個(gè)例子vdd_core這個(gè)regulator的調(diào)壓范圍我設(shè)為0.8V到1.2Vvdd_core: vdd_core { regulator-name vdd_core; regulator-min-microvolt 800000; regulator-max-microvolt 1200000; regulator-always-on; };DVFS配置要讓CPU和NPU能夠根據(jù)負(fù)載動(dòng)態(tài)調(diào)頻必須確保CPU的operating-points表正確。RV1126B的CPU最高頻率一般是1.5GHz但在低功耗場(chǎng)景下我把最高頻率約束到了1.2GHz實(shí)測(cè)性能損失不大但功耗可以降低約15%。休眠喚醒配置需要配置好喚醒源。我的方案中PIR傳感器輸出的高電平接到SoC的一個(gè)GPIO上這個(gè)GPIO在設(shè)備樹里配置為wakeup-sourcegpio_keys { compatible gpio-keys; pinctrl-names default; pinctrl-0 pir_int_l; status okay; wakeup { label PIR Wakeup; gpios gpio2 RK_PB1 GPIO_ACTIVE_HIGH; linux,code KEY_WAKEUP; gpio-key,wakeup; }; };3.3 NPU推理從模型轉(zhuǎn)換到端側(cè)部署RV1126B的NPU使用RKNN框架模型轉(zhuǎn)換流程一般是訓(xùn)練好的模型PyTorch/TensorFlow/Paddle轉(zhuǎn)成ONNX再用瑞芯微提供的RKNN-Toolkit轉(zhuǎn)成.rknn格式。我用的檢測(cè)模型是修改過(guò)的輕量版YOLOv5s輸入分辨率設(shè)為640x384考慮到抓拍場(chǎng)景的寬高比檢測(cè)類別只有person和vehicle兩類。轉(zhuǎn)換命令大致如下python3 rknn_convert.py --model yolov5s.onnx --input_size 640 384 --output yolov5s_rv1126b.rknn導(dǎo)入時(shí)會(huì)根據(jù)RV1126B的NPU特性做算子優(yōu)化。這里有個(gè)經(jīng)驗(yàn)如果模型里有某些不支持的算子可以嘗試開啟NPU的混合精度模式把不支持的層留在CPU上跑但這會(huì)明顯增加推理耗時(shí)。我最終的做法是調(diào)整了模型結(jié)構(gòu)把一些自定義的激活函數(shù)替換成了RELU整個(gè)模型在RV1126B上的推理耗時(shí)穩(wěn)定在150ms以內(nèi)。NPU的推理接口使用比較簡(jiǎn)單#include rknn_api.h // 初始化 rknn_context ctx; rknn_init(ctx, model_data, model_size, 0); // 輸入 rknn_input inputs[1]; inputs[0].index 0; inputs[0].type RKNN_TENSOR_UINT8; inputs[0].size width * height * 3; inputs[0].buf image_data; // 推理 rknn_run(ctx, NULL); // 輸出 rknn_output outputs[2]; rknn_outputs_get(ctx, 1, outputs, NULL);整個(gè)推理鏈路從Sensor出幀、ISP處理到NPU輸出檢測(cè)框在720P分辨率下能做到300ms以內(nèi)的端到端延遲這個(gè)成績(jī)對(duì)于低功耗抓拍機(jī)來(lái)說(shuō)完全夠用。4. 低功耗調(diào)優(yōu)實(shí)戰(zhàn)4.1 功耗到底從哪里來(lái)低功耗設(shè)計(jì)的第一步是搞清楚功耗都消耗在哪些環(huán)節(jié)。我花了整整兩天時(shí)間用高精度功率計(jì)做了RV1126BRK801-2方案的功耗分布測(cè)試結(jié)果很有參考價(jià)值。工作狀態(tài)CPU頻率整機(jī)功耗主要功耗來(lái)源深度休眠關(guān)閉35mWPMIC待機(jī)、DDR自刷新淺度休眠關(guān)閉120mW額外喚醒邏輯空閑待機(jī)200MHz450mW內(nèi)核子系統(tǒng)視頻預(yù)覽1.2GHz1.15WISP、DDR、SensorAI推理1.2GHz1.85WNPU、DDR從表里可以看得出來(lái)DDR的功耗占比非常高。深度休眠時(shí)DDR進(jìn)入自刷新模式功耗主要在維持?jǐn)?shù)據(jù)不丟失上AI推理時(shí)DDR帶寬占用高功耗自然上去了。這也是為什么選1GB內(nèi)存而不是2GB的原因之一內(nèi)存越大自刷新功耗越高。4.2 動(dòng)態(tài)調(diào)頻與任務(wù)調(diào)度策略RV1126B的CPU和NPU都支持動(dòng)態(tài)調(diào)頻。我采用了系統(tǒng)級(jí)的功耗管理策略平時(shí)CPU頻率固定在最低檔200MHz只有收到喚醒信號(hào)后才切換到高性能檔位。這里有一個(gè)調(diào)度技巧把AI推理任務(wù)綁定到指定的CPU核心上避免任務(wù)在不同核心間遷移時(shí)產(chǎn)生不必要的cache刷新開銷同時(shí)可以更精準(zhǔn)地控制系統(tǒng)負(fù)載。我用的方法是# 把NPU進(jìn)程綁定到CPU核心3 taskset -c 3 /usr/bin/ai_detect配合cpufreq的conservative調(diào)度器可以避免CPU在空閑時(shí)反復(fù)調(diào)整頻率。實(shí)測(cè)下來(lái)在等待事件觸發(fā)的空轉(zhuǎn)狀態(tài)下CPU頻率穩(wěn)定在200MHz整機(jī)功耗比默認(rèn)的interactive調(diào)度器降低了約20%。4.3 深度休眠喚醒的完整流程深度休眠是整個(gè)低功耗方案的核心。RV1126B支持多種休眠模式深度休眠意味著CPU核斷電、NPU斷電、大部分外設(shè)斷電只保留PMIC和喚醒源的電。休眠可以通過(guò)sysfs接口觸發(fā)echo mem /sys/power/state但實(shí)際產(chǎn)品中不能這么簡(jiǎn)單粗暴需要先停止Sensor、關(guān)閉Wi-Fi、卸載攝像頭驅(qū)動(dòng)確保所有設(shè)備都處于可斷電狀態(tài)后再進(jìn)入休眠。我建議在驅(qū)動(dòng)里實(shí)現(xiàn)suspend/resume回調(diào)函數(shù)確保在休眠前保存好Sensor的寄存器狀態(tài)喚醒后能快速恢復(fù)。喚醒流程的時(shí)間線大概是這樣的時(shí)間點(diǎn)事件T0msPIR觸發(fā)GPIO中斷T50msPMIC恢復(fù)各路供電CPU開始啟動(dòng)T200msBootloader加載內(nèi)核開始初始化T600ms驅(qū)動(dòng)加載完成Sensor出流T800ms系統(tǒng)就緒等待應(yīng)用層指令T1.2s第一幀AI推理完成輸出檢測(cè)結(jié)果這個(gè)1.2秒的喚醒出結(jié)果時(shí)間在大多數(shù)場(chǎng)景下可以接受。如果你需要更快可以考慮讓系統(tǒng)保持淺度休眠、部分外設(shè)不斷電這樣可以把喚醒時(shí)間縮短到300ms以內(nèi)但代價(jià)是待機(jī)功耗會(huì)上升到120mW左右。4.4 實(shí)測(cè)數(shù)據(jù)與優(yōu)化心得優(yōu)化前后我記錄了整機(jī)的平均功耗變化。在模擬真實(shí)使用場(chǎng)景每小時(shí)觸發(fā)5次每次工作10秒的情況下初始版本平均功耗約180mW電池供電時(shí)5000mAh電池理論上可以撐約27小時(shí)優(yōu)化后版本平均功耗約75mW同樣的電池可以撐到約66小時(shí)這個(gè)優(yōu)化幅度主要來(lái)自三處深度休眠的充分利用、AI推理后快速回睡而不是空轉(zhuǎn)等待超時(shí)、以及Wi-Fi模組的功耗管理平時(shí)關(guān)閉只在需要上傳數(shù)據(jù)時(shí)打開。有個(gè)細(xì)節(jié)值得提醒Wi-Fi模組的功耗管理非常關(guān)鍵。很多低功耗Wi-Fi模組雖然標(biāo)稱待機(jī)電流很低但實(shí)際上beacon監(jiān)聽會(huì)讓功耗悄悄上來(lái)。我在驅(qū)動(dòng)里把Wi-Fi的漫游掃描關(guān)掉同時(shí)只在需要上傳結(jié)果時(shí)才真正打開數(shù)據(jù)通路這一項(xiàng)就省了約40mW的平均功耗。5. 常見問(wèn)題與排查技巧5.1 啟動(dòng)階段時(shí)序問(wèn)題RV1126B對(duì)電源上電時(shí)序有明確要求RK801-2雖然能保證輸出順序基本正確但如果你在板子上額外加了外設(shè)一定要確認(rèn)外設(shè)的電源不會(huì)早于SoC核心電壓上電。我遇到過(guò)的情況是Sensor的AVDD上電早于VDD_CORE導(dǎo)致Sensor內(nèi)部鎖存器狀態(tài)異常偶爾出現(xiàn)無(wú)法初始化的問(wèn)題。排查方法是用示波器同時(shí)抓VDD_CORE、VDD_DDR、Sensor AVDD三路電源的上電波形確認(rèn)時(shí)序偏差不超過(guò)規(guī)定范圍。如果發(fā)現(xiàn)異常在PMIC配置里調(diào)整對(duì)應(yīng)的regulator delay參數(shù)。5.2 DDR穩(wěn)定性問(wèn)題的定位思路DDR不穩(wěn)定是最難排查的問(wèn)題之一。我踩過(guò)的坑包括某批次板子在高溫環(huán)境下頻繁重啟、偶發(fā)內(nèi)存校驗(yàn)錯(cuò)誤、休眠喚醒后dmesg報(bào)ECC錯(cuò)誤。這類問(wèn)題有一個(gè)系統(tǒng)的排查流程跑內(nèi)存壓力測(cè)試比如用memtester連續(xù)跑24小時(shí)檢查DDR走線阻抗DDR3的差分線阻抗要求是100歐姆單端40歐姆確認(rèn)設(shè)備樹中DDR時(shí)序參數(shù)和實(shí)際顆粒匹配如果上述都沒(méi)問(wèn)題檢查VDD_DDR的紋波峰值紋波不能超過(guò)30mV最終我那次問(wèn)題的根因是VDD_DDR的負(fù)載瞬態(tài)響應(yīng)不夠在CPU頻率切換的瞬間電壓跌落超過(guò)閾值。解決辦法是在VDD_DDR輸出端多放了一顆22uF的大電容問(wèn)題隨即消失。5.3 圖像異常排查速查表現(xiàn)象可能原因解決思路整幅圖像偏綠/偏紅Sensor白平衡參數(shù)錯(cuò)誤檢查ISP參數(shù)配置圖像有橫向條紋MCLK時(shí)鐘質(zhì)量差檢查時(shí)鐘走線、加串阻圖像下半部分有條帶Sensor配置分辨率與輸出不匹配確認(rèn)寄存器設(shè)置圖像閃爍Sensor曝光時(shí)間與光源頻率不匹配修改曝光行數(shù)或PLL配置時(shí)好時(shí)壞初始化失敗Sensor復(fù)位時(shí)序不穩(wěn)定延長(zhǎng)復(fù)位時(shí)間檢查AVDD濾波5.4 低功耗調(diào)試的獨(dú)家秘籍最后分享一個(gè)壓箱底的調(diào)試技巧判斷系統(tǒng)是否真正進(jìn)入了深度休眠不要只看電流表數(shù)字更可靠的方法是檢查系統(tǒng)日志。當(dāng)系統(tǒng)成功進(jìn)入深度休眠時(shí)內(nèi)核會(huì)執(zhí)行所有設(shè)備的suspend回調(diào)最后輸出類似“PM: suspend exit”的日志。如果某個(gè)設(shè)備的suspend回調(diào)卡住了系統(tǒng)會(huì)一直停留在淺睡狀態(tài)電流表上可能看起來(lái)不高但實(shí)際上沒(méi)有進(jìn)入真正的低功耗模式。檢查方法很簡(jiǎn)單cat /sys/kernel/debug/suspend_stats這個(gè)文件里記錄了每次休眠的成功/失敗狀態(tài)和耗時(shí)。如果看到失敗的記錄可以用echo 1 /sys/power/pm_print_times開啟suspend/resume耗時(shí)打印然后去看dmesg里哪個(gè)設(shè)備的suspend環(huán)節(jié)耗時(shí)異常。6. 完整配置清單BOM參考6.1 核心硬件配置清單這是我最終定稿的配置清單可以直接參考類別型號(hào)規(guī)格數(shù)量備注主控SoCRV1126B四核A7, 2TOPS NPU1核心物料PMICRK801-26路DCDC2路LDO1核心物料DDR3LK4B4G1646E-BYMA512MB, x16, 1866Mbps2組1GBeMMC8GB eMMC5.1FBGA1531系統(tǒng)盤SensorSC530AI500萬(wàn)像素, MIPI1星光級(jí)鏡頭M12接口, 3.6mm水平視角約80度1根據(jù)場(chǎng)景調(diào)整Wi-FiRTL8188FU802.11 b/g/n1USB接口DC-DCMP2162同步降壓, 2A15V轉(zhuǎn)系統(tǒng)電壓PIR模塊AM3123.3V供電1人體感應(yīng)喚醒指示燈藍(lán)色LED0603封裝2狀態(tài)指示連接器0.5mm FPC24Pin1Sensor連接PCB四層板1.6mm厚度1阻抗控制6.2 軟件配置清單模塊版本/配置說(shuō)明SDKRockchip RV1126B SDK 1.2基于Linux 4.19BootloaderU-Boot 2017.09支持DDR初始化內(nèi)核Linux 4.19.111開啟電源管理相關(guān)選項(xiàng)NPU框架RKNN 1.7.3模型轉(zhuǎn)換與推理ISPRockchip ISP驅(qū)動(dòng)支持3A算法文件系統(tǒng)Buildroot最小化rootfs約120MB6.3 可以優(yōu)化的成本項(xiàng)如果你要量產(chǎn)有幾個(gè)成本優(yōu)化空間Sensor可以根據(jù)實(shí)際應(yīng)用降級(jí)到200萬(wàn)像素比如SC2336單價(jià)能便宜20%以上eMMC可以用更低成本的TF卡方案替代但要注意可靠性如果不需要Wi-Fi直接刪掉這個(gè)模組BOM成本能降5%左右DDR3如果量產(chǎn)達(dá)到一定規(guī)??梢钥紤]直接用1GB單顆粒方案省掉一顆物料的貼片成本不過(guò)在壓縮成本的同時(shí)一定不要?jiǎng)覲MIC、DDR VREF校準(zhǔn)電路、以及SoC電源濾波電容這些關(guān)鍵部分。這些地方省下的錢最后大概率會(huì)變成售后返修的成本。寫在最后這套R(shí)V1126BRK801-2方案我從評(píng)估到量產(chǎn)跟了快半年最大的感受是瑞芯微這套組合在低功耗視覺(jué)終端這個(gè)定位上確實(shí)做得比較平衡。它沒(méi)有把算力堆得很夸張但每一個(gè)環(huán)節(jié)——從Sensor進(jìn)來(lái)說(shuō)、到NPU推理、再到系統(tǒng)休眠——都讓人覺(jué)得是經(jīng)過(guò)仔細(xì)考量過(guò)的。尤其是配合RK801-2這顆PMIC整個(gè)電源鏈路的可控性非常好不像以前用分立方案那樣調(diào)個(gè)功耗要跟時(shí)序搏斗半天。如果你手頭正好在做類似的低功耗AI視覺(jué)產(chǎn)品我建議先照著這個(gè)配置清單打一版驗(yàn)證板把系統(tǒng)跑起來(lái)、把功耗測(cè)出來(lái)再去糾結(jié)具體算力夠不夠、要不要換更高端的SoC。很多時(shí)候方案選型的瓶頸不在SoC本身而是在電源、在Sensor、在系統(tǒng)軟件這些配套環(huán)節(jié)。這套方案里我踩過(guò)的坑和總結(jié)的經(jīng)驗(yàn)希望能幫你少走一些彎路。