動移植與調(diào)試實(shí)戰(zhàn)指南)
簡介面向 Allwinner 平臺 Linux 驅(qū)動開發(fā)者的 RN6752V1 無線芯片資料包聚焦芯片數(shù)據(jù)手冊與驅(qū)動源碼的配套解讀。手冊涵蓋技術(shù)規(guī)格、接口定義、工作模式、電氣特性與參考電路源碼則呈現(xiàn)驅(qū)動初始化、I/O 讀寫、中斷處理、電源管理及設(shè)備樹適配等關(guān)鍵實(shí)現(xiàn)適合需要在該平臺完成 Wi-Fi/藍(lán)牙模塊驅(qū)動移植與調(diào)試的開發(fā)者。資源為 RAR 壓縮包共 2 個文件包含 1 份 PDF 數(shù)據(jù)手冊和 1 個 C 驅(qū)動源文件整體大小約 1.55MB文件數(shù)量少但針對性強(qiáng)便于快速定位核心內(nèi)容。已有 1342 人學(xué)習(xí)瀏覽實(shí)用性得到初步驗(yàn)證。通過手冊與源碼對照讀者可掌握芯片寄存器操作、通信接口配置和 Linux 驅(qū)動框架為實(shí)際項(xiàng)目中的無線模塊接入提供直接參考。 幾個月前幫一個做車載電子方案的朋友調(diào)過一塊板子主控是瑞芯微的方案外接一路模擬攝像頭需求很簡單倒車影像要出圖分辨率不能太糊延時盡量低。硬件工程師在原理圖上放了顆 RN6752V1結(jié)果軟件這邊一查資料發(fā)現(xiàn)手上的資料就一個簡版規(guī)格書和一份不太完整的參考驅(qū)動網(wǎng)上流傳的所謂RN6752V1 datasheet和源碼也大多版本混亂照著移植費(fèi)了不少勁。這篇文章我就把這一路調(diào)通的過程中關(guān)于這顆芯片 datasheet 的閱讀方法、驅(qū)動源碼的獲取與移植、以及實(shí)際調(diào)試中那些不太會寫進(jìn)文檔里的經(jīng)驗(yàn)整理出來給后面接這顆芯片的人省點(diǎn)時間。RN6752V1 是一顆模擬視頻解碼芯片輸入 CVBS 信號輸出 MIPI CSI-2 或 DVP 數(shù)字信號典型應(yīng)用場景就是嵌入式平臺接模擬攝像頭。很多 SoC 本身沒有模擬視頻輸入接口而車載后裝、安防、工業(yè)視覺領(lǐng)域又有大量現(xiàn)成的模擬攝像頭這時候就需要 RN6752V1 這類芯片做翻譯官把模擬信號轉(zhuǎn)成 SoC 能直接吃的數(shù)字信號。這篇文章適合正在做相關(guān)方案嵌入式驅(qū)動開發(fā)、想快速移植這顆芯片驅(qū)動的工程師閱讀也適合硬件選型階段需要評估這顆芯片是否適合自己項(xiàng)目的人參考。1. RN6752V1 到底解決什么問題一顆模擬轉(zhuǎn)數(shù)字的橋接芯片先說這顆芯片的定位。RN6752V1 屬于模擬前端加視頻解碼器的復(fù)合芯片內(nèi)部集成了 ADC、視頻解碼器、時序控制器和 MIPI/DVP 發(fā)送器。它的輸入是標(biāo)準(zhǔn)的 CVBS 復(fù)合視頻信號也就是常說的蓮花頭信號輸出則是 SoC 的 MIPI CSI-2 接口或者并行 DVP 接口。為什么需要這樣一顆芯片原因是現(xiàn)在主流的應(yīng)用處理器尤其是手機(jī)、平板、車載中控上用的 SoC一代比一代更數(shù)字化優(yōu)先芯片原廠通常在 SoC 上只保留 MIPI CSI、DVP 這類數(shù)字?jǐn)z像頭接口模擬視頻輸入接口基本被砍掉了。但現(xiàn)實(shí)世界里的模擬攝像頭存量非常大一個項(xiàng)目里可能已經(jīng)布了幾十路模擬攝像頭或者出于成本考慮產(chǎn)品就是想用一顆幾塊錢的模擬攝像頭模組。這時候要么換數(shù)字?jǐn)z像頭模組成本高且方案變動大要么就加一顆 RN6752V1 這樣的橋接芯片把模擬信號接進(jìn)來SoC 什么都不用感知當(dāng)作一顆普通的 MIPI 攝像頭來用就行。這顆芯片能解決的問題我總結(jié)成三點(diǎn)解決模擬攝像頭與數(shù)字 SoC 之間的接口不匹配問題相當(dāng)于一個翻譯官。解決多路模擬輸入信號切換和后處理的問題。解決模擬視頻信號數(shù)字化過程中的噪聲處理、自動增益、白平衡等模擬域信號質(zhì)量問題。在對比同類芯片時RN6752V1 有一個比較突出的點(diǎn)它直接輸出 MIPI CSI-2而早期很多國產(chǎn)模擬解碼芯片輸出的是 BT.656 或者 DVP 并行接口需要 SoC 端再接一個并行轉(zhuǎn) MIPI 的橋接芯片又多一級硬件、多一層調(diào)試。RN6752V1 一顆芯片就把模擬解碼和 MIPI 發(fā)送做完了BOM 上省一顆料PCB 上省一片面積在這個價位段里性價比很高。從應(yīng)用場景來看RN6752V1 我很常見于這幾類產(chǎn)品車載倒車影像/360 環(huán)視、安防攝像頭、門禁對講、醫(yī)療內(nèi)窺鏡、工業(yè)視覺檢測。這些場景有一個共同特點(diǎn)現(xiàn)場要接入的信號源是模擬的但處理平臺是嵌入式 SoC 或 Linux 系統(tǒng)。如果只是 MCU 級別的小系統(tǒng)對分辨率要求不高那可能用一顆簡單的 ADC 芯片就夠了。但一旦上了 Linux 系統(tǒng)、要跑 V4L2、要接 ISP 做圖像處理那用 RN6752V1 是最順手的方案因?yàn)?Linux 內(nèi)核的 V4L2 框架對它支持得相對成熟出圖路徑非常標(biāo)準(zhǔn)。當(dāng)然這顆芯片也有局限。它的輸入是單路 CVBS單顆芯片只支持一路模擬攝像頭。如果要做四路或者八路的 360 環(huán)視需要同時用多顆 RN6752V1或者選多通道解碼芯片。這一點(diǎn)在選型時一定要想清楚別等畫完板子才發(fā)現(xiàn)一路不夠用。2. datasheet 不能從頭讀到尾先抓這四個關(guān)鍵板塊拿到一份 RN6752V1 datasheet很多新手容易犯的錯就是從頭開始讀讀了一堆電氣特性、絕對最大額定值腦子已經(jīng)暈了真正關(guān)鍵的寄存器配置和時序參數(shù)反而沒注意到。我的建議是datasheet 不是教科書它是一本工具書你要帶著問題去查。做驅(qū)動移植你最需要關(guān)心的是四塊內(nèi)容管腳定義、I2C 寄存器映射、輸出接口時序、初始化流程。2.1 管腳定義先確認(rèn)你的硬件連對了沒這塊內(nèi)容雖然看起來枯燥但排查問題的時候最先要回到這里。RN6752V1 的管腳大致分三組模擬輸入組、數(shù)字輸出組、控制與電源組。模擬輸入組CVBS 信號輸入腳通常有一個或者幾個需要注意輸入阻抗匹配datasheet 上會給出推薦的輸入電路。數(shù)字輸出組MIPI CSI-2 的差分對D0P/D0N可能還有 D1P/D1N或者 DVP 的并行數(shù)據(jù)腳。用 MIPI 還是 DVP 取決于你的 SoC 支持什么這個決定上板之前就要定好。控制與電源組I2C 的 SCL/SDA、復(fù)位腳、電源腳3.3V 和 1.2V 內(nèi)核電壓有些版本還有中斷輸出腳。我遇到過一個坑硬件工程師把 MIPI 的 D0P、D0N 接反了圖像出不來查了半天最后發(fā)現(xiàn)是差分對接反。這時候如果你提前看過 datasheet 的管腳定義就能很快定位是硬件問題而不是驅(qū)動問題。2.2 I2C 寄存器映射驅(qū)動源碼的靈魂RN6752V1 的寄存器映射是驅(qū)動移植的核心所有視頻制式選擇、輸出格式配置、圖像效果調(diào)節(jié)都通過 I2C 寄存器完成。datasheet 里通常會給一張寄存器表包含寄存器地址、默認(rèn)值、功能描述。看寄存器表的時候我建議重點(diǎn)抓三類芯片 ID 寄存器讀出來校驗(yàn) I2C 通信是否正常很多驅(qū)動在 probe 階段會讀這個寄存器和預(yù)期的 ID 對比。初始化序列相關(guān)寄存器包括軟件復(fù)位、時鐘使能、模擬模塊上電、輸出格式選擇等。圖像質(zhì)量控制寄存器包括亮度、對比度、飽和度、色相調(diào)整這些在后期調(diào)效果時經(jīng)常要動。這里有一個重要的通用經(jīng)驗(yàn)很多視頻解碼芯片的寄存器不止一頁RN6752V1 這類芯片也常常采用分頁寄存器機(jī)制。datasheet 里如果出現(xiàn)類似bank select或者page的概念說明寄存器是分頁的操作寄存器之前必須先切換到正確的頁否則讀寫的都是默認(rèn)頁的地址。在移植源碼的時候特別要注意有沒有這個切換動作。2.3 輸出接口時序告訴 SoC 怎么接數(shù)據(jù)如果用的是 MIPI CSI-2 輸出datasheet 會給出通道數(shù)、數(shù)據(jù)類型RAW8、RAW10 還是 YUV422、時鐘范圍、LP/HS 時序參數(shù)。如果用的是 DVP 輸出會給 PCLK、HSYNC、VSYNC 的極性以及時序圖。這一塊決定了你在設(shè)備樹或者 SoC 端配置 MIPI 時填什么參數(shù)。比如 SoC 的 D-PHY 配置里有一個參數(shù)是每 lane 數(shù)據(jù)速率如果你知道 RN6752V1 的輸出時鐘范圍就能推算大概的速率范圍避免 SoC 端配置和芯片輸出不匹配導(dǎo)致無圖。2.4 初始化流程別跳過軟復(fù)位就亂寫寄存器datasheet 的應(yīng)用說明部分一般會給一個簡化的初始化流程。常見的套路是上電 - 等待電源穩(wěn)定 - 拉復(fù)位 - I2C 寫初始化序列 - 檢測輸入信號 - 正常出圖。很多芯片初始化序列里都包含一個軟件復(fù)位寄存器這個寄存器必須在最前面寫目的就是讓芯片回到一個已知的狀態(tài)避免上電時序不確定導(dǎo)致的寄存器隨機(jī)值。我強(qiáng)烈建議第一次調(diào)板子的時候嚴(yán)格按照 datasheet 推薦的初始化流程走一遍不要自己亂裁剪。等能正常出圖了再一個一個寄存器試哪些可以省、哪些可以改這樣排查問題的時候心里有底。3. 源碼從哪來原廠 SDK、開源倉庫、自己造輪子關(guān)于RN6752V1 源碼這個話題很多人一上來就全網(wǎng)搜搜到的卻往往是別的芯片的驅(qū)動改的或者版本很老根本編譯不過。我分享一下我常用的三條路線以及它們的優(yōu)缺點(diǎn)。3.1 原廠 SDK最全但也最封閉RN6752V1 的原廠通常會提供一份完整的 Linux 驅(qū)動源碼和配套的初始化寄存器序列一般通過代理商或者 FAE 獲取。這份源碼的優(yōu)勢是寄存器配置經(jīng)過驗(yàn)證照著用基本能出圖。缺點(diǎn)是提供的代碼往往面向某個特定平臺比如只適配瑞芯微或者全志的某幾個 SoC拿過來用在別的平臺上需要改不少地方。我在朋友那個項(xiàng)目里拿到的原廠參考代碼就是基于瑞芯微的里面的設(shè)備樹配置、pinctrl 設(shè)置都是按 RK 平臺的風(fēng)格寫的。這類代碼移植到別的平臺主要改動點(diǎn)是設(shè)備樹中 MIPI D-PHY 的配置、I2C 控制器的引用、以及 V4L2 subdev 注冊方式。如果你走這條路線記得向 FAE 多要一樣?xùn)|西最新的初始化寄存器序列寄存器數(shù)組。很多時候 FAE 會給你一個新版本初始化代碼比 datasheet 里附帶的更完善能修復(fù)一些出圖偏色或者暗光下噪聲大的問題。3.2 GitHub 等開源倉庫有參考價值但別全信在 GitHub 上直接搜rn6752或者rn6752v1有機(jī)會搜到一些個人開發(fā)者或小團(tuán)隊(duì)上傳的驅(qū)動源碼。這些源碼質(zhì)量參差不齊有的能用有的只是一個大綱。我看過一份內(nèi)核驅(qū)動寫得還算規(guī)范probe 函數(shù)、s_stream 回調(diào)、寄存器讀寫函數(shù)都齊全但是它的初始化序列很短只有二十幾個寄存器我燒進(jìn)去之后圖像顏色明顯不對后來對比原廠序列才發(fā)現(xiàn)少了很多模擬前端校準(zhǔn)的寄存器寫入。用開源源碼的正確姿勢是把它當(dāng)框架參考而不是可直接使用的成品。也就是說用它的驅(qū)動結(jié)構(gòu)V4L2 subdev 如何注冊、i2c_driver 如何寫、media controller 的 link 如何建立但寄存器配置部分對照你的 datasheet 和實(shí)際硬件重新理一遍。3.3 自己寫驅(qū)動推薦放在 V4L2 subdev 框架里如果你的平臺沒有現(xiàn)成驅(qū)動那就得自己寫。這里我強(qiáng)烈建議把驅(qū)動寫成標(biāo)準(zhǔn)的 V4L2 subdev 驅(qū)動而不是一個獨(dú)立的字符設(shè)備驅(qū)動。原因是你的 SoC 端 ISP 和 video 設(shè)備節(jié)點(diǎn)都是按 V4L2 框架管理的RN6752V1 作為 subdev 掛上去才能和主控的 capture 鏈路正常配合。一個標(biāo)準(zhǔn)的 RN6752V1 驅(qū)動骨架大概包含這幾部分static const struct v4l2_subdev_ops rn6752v1_ops { .core rn6752v1_core_ops, .video rn6752v1_video_ops, }; static int rn6752v1_probe(struct i2c_client *client) { // 分配 subdev 內(nèi)存 // 讀取芯片 ID 校驗(yàn) // 注冊 subdev // 設(shè)置 subdev 的 pad 信息 } static int rn6752v1_s_stream(struct v4l2_subdev *sd, int enable) { if (enable) { // 向芯片寫入初始化序列 // 啟動 MIPI 輸出 } else { // 關(guān)閉輸出進(jìn)入低功耗 } }關(guān)鍵點(diǎn)有三個probe 階段讀芯片 ID 判斷硬件是否存在避免驅(qū)動掛在空 I2C 地址上報錯。s_stream 回調(diào)里做真正的上電出流動作因?yàn)閮?nèi)核可能在系統(tǒng)啟動時不立即啟動攝像頭流。set_fmt 回調(diào)里正確設(shè)置輸出格式RN6752V1 輸出的一般是 YUV422 格式讓 SoC 端知道自己收到的是什么格式的數(shù)據(jù)。自己寫驅(qū)動的時間成本肯定比直接用現(xiàn)成源碼高但好處是你能徹底掌握每個寄存器配置的含義后續(xù)調(diào)效果也好、換平臺移植也好都有主動權(quán)。4. 調(diào)試實(shí)錄從 I2C 不通到畫面異常的完整排查鏈路代碼有了、設(shè)備樹配了上電之后發(fā)現(xiàn)沒有圖這是最讓人頭疼的階段。下面我把整個排查鏈路按順序列出來每一步都有明確的驗(yàn)證方法照著走一遍基本能定位問題。4.1 第一步I2C 能不能通這是最基礎(chǔ)的地基驅(qū)動加載后第一件事就是通過 I2C 讀芯片 ID。如果 I2C 不通后面什么都是白搭。我那次調(diào)試遇到的現(xiàn)象是驅(qū)動 probe 時報chip ID mismatch讀出來的寄存器值全是 0xff。排查步驟用 i2cdetect 掃描 I2C 總線看芯片地址有沒有在列表里。如果掃描到地址說明 I2C 物理層沒問題如果掃描不到先查硬件地址引腳有沒有拉對、I2C 上拉電阻有沒有焊、SCL/SDA 有沒有接反。確認(rèn) I2C 工作速率。有些模擬解碼芯片對 I2C 速率比較敏感400kHz 下工作不穩(wěn)定降到 100kHz 試試??磸?fù)位腳。很多芯片復(fù)位腳是低電平復(fù)位如果硬件把復(fù)位腳拉低了芯片永遠(yuǎn)處于復(fù)位狀態(tài)I2C 自然不通。檢查復(fù)位腳電平是否正確必要時寫一個 GPIO 控制在驅(qū)動里主動拉高釋放復(fù)位。我那次查到最后就是硬件把復(fù)位腳懸空了芯片在上電后的隨機(jī)狀態(tài)里沒起來補(bǔ)焊一個下拉電阻搞定。4.2 第二步MIPI 有沒有數(shù)據(jù)輸出I2C 通了、ID 也讀對了但 SoC 端 v4l2-ctl 直接報no signal。這時候的關(guān)鍵是判斷 RN6752V1 有沒有真的輸出 MIPI 數(shù)據(jù)。在沒有示波器或者邏輯分析儀的條件下一個最實(shí)用的方法是看 SoC 端 MIPI D-PHY 的狀態(tài)寄存器。瑞芯微、全志、NXP 的 SoC 都有 MIPI 控制器狀態(tài)寄存器能看到當(dāng)前有沒有檢測到 LP 信號、有沒有收到 HS 數(shù)據(jù)包。如果狀態(tài)寄存器顯示沒有收到任何數(shù)據(jù)大概率是芯片沒有輸出或者 MIPI 配置不對。重點(diǎn)檢查這幾個地方MIPI lane 數(shù)量對不對。RN6752V1 輸出可能是 1-lane 或 2-lane設(shè)備樹里配置的 lane 數(shù)必須和硬件實(shí)際連接一致。時鐘 lane 的 CPLL 配置對不對。有些 SoC 的 MIPI 時鐘只能在一個范圍內(nèi)工作如果你給 RN6752V1 的外部時鐘選的頻率太離譜MIPI 數(shù)據(jù)率會超出 SoC 的接收范圍。設(shè)備樹里 MIPI 的 data type 配置。RN6752V1 輸出一般是 YUV422 8-bit對應(yīng)的 MIPI data type 是 0x1E。如果你設(shè)備樹里配成了 RAW100x2BSoC 端解析就會完全錯亂。4.3 第三步有數(shù)據(jù)但畫面異常制式和格式的雙重問題如果 MIPI 已經(jīng)能收到數(shù)據(jù)但畫面花屏、偏綠、上下翻轉(zhuǎn)或者只有一半那就是格式和制式配置的問題了。花屏多半是 SoC 端設(shè)置的圖像 width/height 和芯片實(shí)際輸出的不一致。PAL 制式下有效的圖像區(qū)域是 720x576NTSC 是 720x480如果兩邊一個填 720x576 一個填 720x480畫面就會錯位花屏。偏色先檢查 RN6752V1 的輸出格式和 SoC 端 media pipeline 期望的格式是否一致。如果芯片輸出 YUV422而 SoC 端按 RGB888 解析顏色一定不對。另一種情況是初始化序列里自動白平衡AWB、自動增益控制AGC沒有開啟或者配置參數(shù)不對這個需要對照原廠初始化序列一條一條排查。無彩色CVBS 解碼之后色度信號沒有正常解調(diào)常見原因是輸入 CVBS 信號制式配置不對。RN6752V1 有自動制式檢測功能但在某些信號源上自動檢測不可靠需要手動指定 PAL 或 NTSC。畫面上下翻轉(zhuǎn)或鏡像很多車載應(yīng)用要求鏡像輸出這個不是故障是寄存器配置。查 datasheet 里圖像翻轉(zhuǎn)控制位按需求配置即可。4.4 第四步確認(rèn) v4l2 鏈路配置是否正確這一步是 Linux 平臺特有的坑。即使驅(qū)動源碼正確、硬件連接正確如果 media pipeline 的 link 沒有配置對SoC 端同樣無法取流。我建議在調(diào)試階段使用 media-ctl 工具把 pipeline 打出來看一遍media-ctl -p重點(diǎn)關(guān)注RN6752V1 的 subdev pad 是否和 SoC 的 MIPI CSI 控制器正確連接。sensor subdev 和 ISP/接收端之間的 link 狀態(tài)是否是 ENABLED。sink pad 的格式是否和 source pad 一致。很多時候系統(tǒng)啟動時內(nèi)核不會自動建立 link需要在應(yīng)用程序或者啟動腳本里顯式用 media-ctl 配置。這個步驟容易被人忽略但其實(shí)是出圖流程里至關(guān)重要的一環(huán)。4.5 用 v4l2-ctl 做最終驗(yàn)證鏈路配置好之后用 v4l2-ctl 抓一幀圖看效果v4l2-ctl --set-fmt-videowidth720,height576,pixelformatYUYV --stream-mmap --stream-count1 --stream-to/tmp/frame.raw直接把抓到的 raw 數(shù)據(jù)丟到 PC 上用 YUV Viewer 看一眼如果圖像正常說明鏈路通了。如果還是異常回到上面 4.3 繼續(xù)排查制式和格式配置。5. 容易踩的坑和對應(yīng)的保命技巧每個項(xiàng)目都有一些特有的坑RN6752V1 也不例外。下面這幾個問題是我自己實(shí)際遇到過、或者和同行交流時他們反復(fù)提到的提前避開能省很多時間。5.1 電源紋波對模擬信號的影響超出想象這是我最想提醒的一點(diǎn)。RN6752V1 是模擬視頻解碼芯片內(nèi)部有高精度 ADC對電源質(zhì)量非常敏感。如果 3.3V 電源上的紋波過大圖像上會出現(xiàn)滾動的橫條紋或者噪點(diǎn)這種問題你調(diào)寄存器怎么調(diào)都調(diào)不掉因?yàn)樗皇羌拇嫫髋渲玫膯栴}是硬件電源設(shè)計的問題。排查的時候拿示波器量一下芯片電源腳的紋波如果超過 50mV基本可以斷定是電源問題。在芯片電源附近加一顆 10uF 的膽電容和 0.1uF 陶瓷電容通常能明顯改善。如果板子已經(jīng)畫完電容沒留位置就把電源走線加粗并且在背面飛線加電容效果也會好很多。5.2 模擬輸入走線要短、要遠(yuǎn)離數(shù)字信號CVBS 模擬信號是從外部進(jìn)來的非常容易被板上其他數(shù)字信號干擾。有一次我把 CVBS 走線布在了一條 SPI 時鐘線旁邊結(jié)果圖像上一片片斜紋。后來改板把模擬走線遠(yuǎn)離數(shù)字區(qū)域并且加了簡單的 π 型濾波問題才消失。如果是做車載產(chǎn)品模擬輸入線上還要考慮共模干擾。datasheet 推薦輸入電路里通常會有扼流圈或者濾波電容不要為了省成本省略不然后期過 EMC 測試會更痛苦。5.3 初始化寄存器序列要保存好不同版本差異巨大RN6752V1 原廠經(jīng)常會在固件版本更新時修改初始化序列修正一些圖像質(zhì)量問題。同一個芯片用老的初始化序列可能畫質(zhì)一塌糊涂換新的序列立刻清晰通透。所以拿到最早的初始化序列之后一定要注明來源和日期同時向 FAE 確認(rèn)是否有更新的版本。我的做法是把初始化序列做成單獨(dú)的頭文件里面每條寄存器配置都加上注釋說明是干什么用的然后記錄版本號。這樣萬一換了序列可以快速 diff 出差異也方便排查是不是某條新增的配置導(dǎo)致的問題。5.4 制式檢測不穩(wěn)定時手動指定比自動更好用RN6752V1 有自動制式檢測但實(shí)際使用中如果輸入信號源質(zhì)量一般自動檢測可能會在 PAL 和 NTSC 之間反復(fù)跳表現(xiàn)為畫面偶爾閃爍或者顏色抖動。這種情況下與其調(diào)自動檢測的閾值不如直接通過寄存器強(qiáng)制指定制式反正大多數(shù)產(chǎn)品的輸入信號制式是固定的。還有一個經(jīng)驗(yàn)如果項(xiàng)目用的攝像頭信號源是海外市場來的先確認(rèn)一下它輸出的到底是 PAL 還是 NTSC因?yàn)閮烧邎鲱l和行頻不一樣配置錯了輕則畫面滾動重則完全同步不上。5.5 備份好你的能出圖配置這是最后一個建議也是我最常做的操作。當(dāng)系統(tǒng)終于出圖正常了花十幾分鐘用 v4l2-ctl 把當(dāng)前的參數(shù)導(dǎo)出來保存到工程目錄里。別以為設(shè)備樹里寫的就是最終用的配置很多時候驅(qū)動會在運(yùn)行時動態(tài)調(diào)一些寄存器這些運(yùn)行時狀態(tài)和設(shè)備樹里寫的初始值并不完全一致。備份配置的命令v4l2-ctl --all rn6752v1_working_config.txt media-ctl -p rn6752v1_media_pipeline.txt dmesg | grep -i rn6752 rn6752v1_driver_log.txt這三樣?xùn)|西保存好萬一哪天固件升級或者板子改版導(dǎo)致圖像又出了問題拿出來對比就能快速定位是配置變了還是其他因素導(dǎo)致的。我用 RN6752V1 這顆芯片的時間和踩過的坑并不算少但總結(jié)下來就一句話datasheet 是根源碼是樹枝調(diào)試經(jīng)驗(yàn)是果實(shí)。把規(guī)格書讀透把驅(qū)動框架搭對剩下的圖像效果問題絕大部分都能通過寄存器配置解決。希望這篇文章能讓你在接這顆芯片的時候少走一些彎路。本文還有配套的精品資源點(diǎn)擊獲取