電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>嵌入式日記:破解RPi攝像頭以與Zynq FPGA配合使用

嵌入式日記:破解RPi攝像頭以與Zynq FPGA配合使用

2023-06-27 | zip | 0.00 MB | 次下載 | 2積分

資料介紹

描述

動機

FPGA 非常適合低延遲、高吞吐量的成像應(yīng)用。最好使用直接與 FPGA 接口的相機(而不是 USB/網(wǎng)絡(luò)相機)來實現(xiàn)這一點。然而,對于業(yè)余愛好者、修補匠和小型初創(chuàng)企業(yè)來說,可用的相機模塊選項數(shù)量有限,而且并非所有可用選項都便宜(相對而言)。最重要的是,許多都有自己的物理接口,所以通常你只能將相機與它的開發(fā)套件一起使用。沒有相當(dāng)大的努力,就是這樣。

然而,由于具有 15 針 FFC 攝像頭接口 (MIPI-CSI) 的 Raspberry Pi 等低成本單板計算機的普及,情況正在好轉(zhuǎn)。隨著時間的推移,RPi 相機接口變得非常流行,如今許多單板計算機都可以使用相同的相機連接器(Jetson 套件、RPi 替代板等)。甚至一些 FPGA 板現(xiàn)在也配備了相同的 15 針連接器(Zybo-Z7、Kria 等)。由于受歡迎程度,現(xiàn)在可以從各種供應(yīng)商(RPi 基金會、Arducam、VEYE 等)處獲得許多低成本圖像傳感器。

pYYBAGNkdGeAFCb6AACDWzhFxBE228.jpg
樹莓派 15 針 MIPI-CSI 攝像頭接口
?

不幸的是,一旦我們開始將這些圖像傳感器之一與我們的 FPGA 一起使用,我們就會遇到一個大問題:大多數(shù)圖像傳感器的數(shù)據(jù)表都是不公開的!

您會看到,在使用任何現(xiàn)代圖像傳感器之前,您需要根據(jù)您的用例對其進行配置。雖然高吞吐量數(shù)據(jù)通過 MIPI-CSI 等協(xié)議傳輸,但配置通常通過 I2C 進行。然而,要知道通過 I2C 接口發(fā)送什么命令需要知道傳感器的寄存器映射,以及這些寄存器的每一位的功能。但如果沒有公開的數(shù)據(jù)表,這是一個大問題。在某些情況下,如果您足夠幸運,您將能夠在互聯(lián)網(wǎng)上找到您的特定圖像傳感器的泄露數(shù)據(jù)表,但情況并非總是如此。例如,在撰寫本文時(2021 年 9 月),RPi“高質(zhì)量”相機沒有公開的數(shù)據(jù)表。

有時即使有數(shù)據(jù)表,事情也不會太樂觀。現(xiàn)代圖像傳感器是復(fù)雜的硅片,配置大多數(shù)圖像傳感器需要正確設(shè)置數(shù)百個寄存器,然后才能開始以正確格式輸出正確的圖像數(shù)據(jù)。時鐘/PLL 配置、分辨率、binning、曝光、增益、白平衡、輸出接口格式等設(shè)置。至少獲得參考或起點不是很好嗎?

所以,我們能做些什么?

“嗅探”或“竊聽”是軟件/硬件黑客中常用的一種技術(shù)。這個想法是監(jiān)聽兩個設(shè)備之間的通信,而不干擾原始對話,并保持細(xì)致的記錄以備后用。我們可能不明白對話的每個部分的含義是什么,但有時我們可以重播相同的序列,并設(shè)法欺騙目標(biāo)設(shè)備給我們需要的東西。

我的設(shè)置

在這種特殊情況下,我有一個我之前購買的Zybo-z7-20板,以及PCAM-5C板相機。使用Digilent 提供的運行“baremetal”的演示項目,我能夠非常快速地讓兩者一起工作。但是,對于未來的項目,我希望有更多的相機選項,而不僅僅是 PCAM-5C。許多與 RPi 接口兼容的傳感器都帶有自己的 Linux 驅(qū)動程序。我希望能夠在運行裸機時使用相同的傳感器。

我的計劃如下:

  • 選擇具有匹配物理/電氣接口的相機
  • 使用我需要的設(shè)置(分辨率、幀率等)讓它在它的本機平臺(RPi、Jetson 等)上工作
  • 使用邏輯分析儀設(shè)置 I2C 嗅探器并記錄從處理器到相機的所有命令。
  • 使用我自己的 FPGA 板進行清理、適當(dāng)格式化和重播命令。

對于這個特定的實驗,我將使用我已經(jīng)擁有的:- Raspberry Pi v2.1 相機- RaspberryPi 4B 作為“本機”平臺- Saleae Logic 16 pro 作為我的邏輯分析儀- Zybo-Zy-20 作為我的“目標(biāo)” FPGA板。

讓我們開始吧……!

第 1 步:驗證接口兼容性

N. 從電路板的示意圖中檢查引腳配置和電壓電平。

poYBAGNkdGmAdldYAAB6ZhsPGwA942.jpg
Shematics 的 Zybo-Z7 相機連接器配置
?

我們可以看到連接器將為連接的相機提供 3.3V 電壓,并且 I2C 也在 3.3V 下工作。

接下來,我們看一下攝像頭模塊。從 RPi v2.1 攝像頭模塊的示意圖中,我們可以驗證引腳配置和電壓確實匹配。

poYBAGNkdGyAeKjIAACXiKDSgbQ472.jpg
RPi v2.1 攝像頭引腳配置
?

您可能會注意到上拉電壓為 1.8V 而不是 3.3V,但這沒關(guān)系,因為組件 Q1 正在執(zhí)行電壓電平轉(zhuǎn)換。Ctrl+C退出。注意上面使用 gstreamer 管道,這是上述命令正常工作的先決條件。

第 3 步:嗅探 I2C 通信

現(xiàn)在我們有了一個工作系統(tǒng),下一步是嗅探 RPi 和圖像傳感器之間的 I2C 通信。首先,我使用烙鐵將三根細(xì)跳線連接到 FFC 上的接地、SDA、SCL 引腳,然后用 Kapton 膠帶覆蓋以作為連接線的機械釋放。我這樣做是因為與在焊接過程中弄亂 RPi 或攝像頭板相比,F(xiàn)FC 電纜便宜且易于更換。此外,這給了我一根“間諜電纜”,我也可以將其重新用于其他相機/平臺。

poYBAGNkdG6AKJfAAACDgYqcxps690.jpg
間諜跳線焊接到相機 FFC
?

在此之后,我將這些電線與我的邏輯分析儀連接起來。在這一步中,我使用 USB“邏輯分析儀”來嗅探 I2C 通道上的通信。我使用的是 Saleae Logic 16 pro,因為這是我所擁有的,但任何便宜的邏輯分析儀都可以解決這個問題(I2C 的數(shù)據(jù)速率相當(dāng)慢)。最后,我為 I2C 解碼配置了邏輯分析儀并點擊了開始按鈕。

pYYBAGNkdHeAAmuPABcdjUwvtIk224.jpg
RPi 4 通過 FFC 連接到 v2 攝像頭,同時 Logic Analyzer 竊聽 I2C 事務(wù)
?

現(xiàn)在我們有一些捕獲的數(shù)據(jù)。

poYBAGNkdHuAdWHjAAHvHVcF63Y109.jpg
邏輯分析儀捕獲的 I2C 信號(左)。右側(cè)的解碼 I2C 事務(wù)。
?

第 4 步:清理和準(zhǔn)備 I2C 數(shù)據(jù)

現(xiàn)在我們有了一些捕獲的數(shù)據(jù),我們需要清理和準(zhǔn)備數(shù)據(jù),然后才能將其與 FPGA 板一起使用。由于我遵循的確切過程非常具體到我所擁有的設(shè)置,因此我將詳細(xì)說明每個步驟的意圖以供讀者理解。

我注意到的第一件事是有一個初始的命令突發(fā)(左),然后是另一個密集的命令突發(fā)(中),然后經(jīng)過一段時間的延遲后,每隔約 15 毫秒就會有一個 I2C 命令(右)。

poYBAGNkdH2AMdVBAABhk9Ks9j8909.jpg
I2C 命令日志
?

每 ~15ms 的命令對應(yīng)于 60fps 幀之間的時間。此外,這些命令被發(fā)送到相同的 I2C 地址,并且都是寫命令。

pYYBAGNkdIKAYq_4AACX3i604ec556.jpg
每~15ms重復(fù)I2C命令序列
?

因此,經(jīng)過一些實驗后,我得出結(jié)論,這些必須是從 ISP 到相機的命令,以便在處理每一幀后根據(jù)不斷變化的照明條件(自動增益/曝光控制,可能還有自動白平衡)進行調(diào)整。這也意味著,就目前而言,我可以刪除在這些命令的第一個實例之后發(fā)送的任何數(shù)據(jù)數(shù)據(jù),因為發(fā)送一次曝光命令就足以開始了。另外,請注意這些重復(fù)的命令被發(fā)送到 I2C 地址 0x10。因此我們可以推斷出我們相機的 I2C 地址是 0x10 。

接下來,我查看了修剪后的數(shù)據(jù),注意到開頭有一些讀命令,還有一些寫到 I2C 地址 0x71 的命令。

pYYBAGNkdIWAEOX8AADU3fssgjo573.jpg
?

由于我們不知道如何處理從讀取命令返回的數(shù)據(jù),因此保留它們沒有意義,因此我刪除了它們。

尋址到 0x71 的命令很可能用于位于 Rpi V2.1 cam 上的 EEPROM,Raspberry pi 固件使用它來查看是否連接了正版相機,因此我們也不需要保留它們。因此我也刪除了它們。

對于轉(zhuǎn)儲的數(shù)據(jù),我將僅提及一些細(xì)分。讓我們隨機選擇一行轉(zhuǎn)儲數(shù)據(jù):

write to 0x10 ack data: 0x01 0x62 0x0D 0xE8

在這一行中,0x10 是相機的 I2C 地址,0x0162 是寄存器地址,0x0D、0xE8 是數(shù)據(jù)字節(jié)。通常一個寄存器是一個字節(jié)長,因此由于大多數(shù)傳感器中的 I2C 地址自動遞增功能,第二個字節(jié)實際上會轉(zhuǎn)到下一個寄存器地址 (0x1063)。

無論如何,在此之后,我將剩余的修剪數(shù)據(jù)復(fù)制到 Excel 表中,刪除除 I2C 數(shù)據(jù)之外的所有文本并對其進行格式化(通過一些手動操作),以便稍后在 Xilinx 內(nèi)部將其用作 C 中的數(shù)組開發(fā)工具包。其中一部分包括在每行中添加一個包含 I2C 字節(jié)數(shù)的列,因為轉(zhuǎn)儲數(shù)據(jù)中的不同行發(fā)送的 I2C 字節(jié)數(shù)不同。

第 5 步:使用 FPGA 重放命令

現(xiàn)在,要使用我們的 FPGA 板測試我們的數(shù)據(jù),我需要一個 Vivado &SDK 項目。幸運的是,我已經(jīng)從 Adam Taylor 的優(yōu)秀帖子下載了一個 Vivado 項目,它為我提供了一個工作系統(tǒng),以 720p60 分辨率從 PCAM-5C 相機獲取數(shù)據(jù)并通過 HDMI 輸出顯示。

接下來,我為此訪問了 SDK 項目,并添加了一個包含先前步驟中轉(zhuǎn)儲和格式化的 I2C 數(shù)據(jù)的數(shù)組,并將其設(shè)置為在啟動后發(fā)送到 v2 相機 I2C 地址 (0x10)。其余什么都不需要更改,事實上我什至將以前的 PCAM-5C 代碼留在了文件中,因為當(dāng)該地址上沒有設(shè)備響應(yīng)時,該地址的命令會被簡單地忽略。我還將 Adam 的 vivado 項目配置為使用 CSI 輸入(而不是 HDMI IN)作為源。包含所有修改的完整項目鏈接在帖子末尾。

完成軟件修改后,剩下要做的就是將 RPi v2.1 攝像頭連接到 Zybo-Z7 上的 MIPI 連接器,將 HDMI 電纜從 HDMI TX 端口連接到顯示器,然后上傳代碼。

pYYBAGNkdI6AOTlEABX6w62z_4s158.jpg
RPi V2.1 攝像頭連接到 Zybo-Z7-20
?

。

poYBAGNkdJWAfar5AAuVQgbfTGY529.jpg
說“茄子”
?

?

pYYBAGNkdJyAJHw9AAYeiBPOWmc316.jpg
。
?

我愿意稱之為成功。這證明這里采用的概念適用于其他可用的傳感器(盡管有一些警告),并且應(yīng)該為我們提供更多 MIPI 圖像傳感器選項以用于 FPGA 項目。這意味著,如果其中一個傳感器是與 FPGA 一起使用,那么我們將需要在 FPGA 中自己處理這些功能。通過在受控的光照條件變化下查看每幀后發(fā)送到相機的數(shù)據(jù),應(yīng)該可以找到相關(guān)的寄存器。另一方面,一些攝像頭模塊還帶有板載 ISP,在這種情況下,這不是問題。(看看一些來自 Arducam、VEYE 的傳感器)

  • 并非所有圖像傳感器本身都支持 720p 或 1080p 等格式。因此,在某些情況下,驅(qū)動程序會將傳感器設(shè)置為在高度/寬度(或兩者)上大于用戶通過命令行請求的模式。在這種情況下,Raspberry Pi/Jetson 等內(nèi)部的 ISP(圖像信號處理器)預(yù)計會將圖像裁剪為用戶請求的分辨率。這意味著如果我們使用 FPGA 來接收這個流,那么我們需要在 FPGA 內(nèi)部進行裁剪。通過在水平和垂直方向上為圖像開始位置、活動像素和步幅設(shè)置適當(dāng)?shù)闹?,Xilinx VDMA 可輕松用于執(zhí)行此裁剪,而無需任何處理開銷。

?

希望你喜歡閱讀和跟隨。下次我們可能會嘗試不同的 MIPI 傳感器(RPi HQ 相機?),看看效果如何。

如果您發(fā)現(xiàn)這有用(或沒有),請在下面的評論部分分享您的評論/想法!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費