資料介紹
方案介紹
FPGA 非常適合低延遲、高吞吐量的成像應(yīng)用。最好使用直接連接到 FPGA 的相機(jī)(而不是 USB/網(wǎng)絡(luò)相機(jī))來(lái)實(shí)現(xiàn)這一點(diǎn)。然而,對(duì)于業(yè)余愛(ài)好者、修補(bǔ)匠和小型初創(chuàng)企業(yè)來(lái)說(shuō),可用的相機(jī)模塊選項(xiàng)數(shù)量有限,而且并非所有可用的選項(xiàng)都很便宜(相對(duì)而言)。最重要的是,許多都有自己的物理接口,所以通常你只能將相機(jī)與它的開(kāi)發(fā)套件一起使用。沒(méi)有相當(dāng)大的努力,就是這樣。
然而,由于帶有 15 針 FFC 攝像頭接口 (MIPI-CSI) 的 Raspberry Pi 等低成本單板計(jì)算機(jī)的普及,情況已經(jīng)好轉(zhuǎn)。隨著時(shí)間的推移,RPi 攝像頭接口變得非常流行,如今許多單板計(jì)算機(jī)都可以使用相同的攝像頭連接器(Jetson 套件、RPi 替代板等)。甚至一些 FPGA 板現(xiàn)在也配備了相同的 15 針連接器(Zybo-Z7、Kria 等)。由于流行,現(xiàn)在可以從各個(gè)供應(yīng)商(RPi 基金會(huì)、Arducam、VEYE 等等)獲得許多低成本圖像傳感器。
不幸的是,一旦我們開(kāi)始在我們的 FPGA 中使用這些圖像傳感器之一,我們就會(huì)遇到一個(gè)大問(wèn)題:大多數(shù)圖像傳感器的數(shù)據(jù)表都不公開(kāi)!
您會(huì)看到,在使用任何現(xiàn)代圖像傳感器之前,您需要根據(jù)您的用例對(duì)其進(jìn)行配置。雖然高吞吐量數(shù)據(jù)通過(guò) MIPI-CSI 等協(xié)議傳輸,但配置通常通過(guò) I2C 進(jìn)行。但是,要知道通過(guò) I2C 接口發(fā)送哪些命令需要知道傳感器的寄存器映射以及這些寄存器的每一位的功能。但如果沒(méi)有公開(kāi)的數(shù)據(jù)表,這是一個(gè)大問(wèn)題。在某些情況下,如果您足夠幸運(yùn),您將能夠在互聯(lián)網(wǎng)上找到泄露的特定圖像傳感器的數(shù)據(jù)表,但情況并非總是如此。例如,在撰寫(xiě)本文時(shí)(2021 年 9 月),RPi“高質(zhì)量”相機(jī)沒(méi)有公開(kāi)可用的數(shù)據(jù)表。
有時(shí)即使有數(shù)據(jù)表,事情也不會(huì)太樂(lè)觀。現(xiàn)代圖像傳感器是復(fù)雜的硅片,配置大多數(shù)圖像傳感器需要正確設(shè)置數(shù)百個(gè)寄存器,然后才能以正確的格式輸出正確的圖像數(shù)據(jù)。有時(shí)鐘/PLL 配置、分辨率、分級(jí)、曝光、增益、白平衡、輸出接口格式設(shè)置——僅舉幾例。至少獲得一個(gè)參考或起點(diǎn)來(lái)構(gòu)建不是很好嗎?
所以,我們能做些什么?
“嗅探”或“竊聽(tīng)”是軟件/硬件黑客攻擊中常用的一種技術(shù)。這個(gè)想法是在不干擾原始對(duì)話的情況下監(jiān)聽(tīng)兩個(gè)設(shè)備之間的通信,并保留細(xì)致的記錄以備后用。我們可能不明白對(duì)話的每個(gè)部分的含義,但有時(shí)我們可以重播相同的序列,并設(shè)法欺騙目標(biāo)設(shè)備給我們需要的東西。
我的設(shè)置
在這種特殊情況下,我有一塊我之前購(gòu)買的Zybo-z7-20板以及PCAM-5C板相機(jī)。我能夠使用Digilent 提供的演示項(xiàng)目非常快速地讓兩者協(xié)同工作,該項(xiàng)目運(yùn)行“裸機(jī)”。但是,對(duì)于未來(lái)的項(xiàng)目,我希望有更多的相機(jī)選項(xiàng),而不僅僅是 PCAM-5C。許多 RPi 接口兼容傳感器都帶有自己的 Linux 驅(qū)動(dòng)程序。我希望能夠在運(yùn)行裸機(jī)時(shí)使用相同的傳感器。
我的計(jì)劃如下:
- 選擇具有匹配物理/電子接口的相機(jī)
- 使用我需要的設(shè)置(分辨率、幀率等)使用它的原生平臺(tái)(RPi、Jetson 等)
- 使用邏輯分析器設(shè)置 I2C 嗅探器并記錄從處理器到相機(jī)的所有命令。
- 使用我自己的 FPGA 板清理、適當(dāng)格式化和重新播放命令。
對(duì)于這個(gè)特定的實(shí)驗(yàn),我將使用我已有的:- Raspberry Pi v2.1 相機(jī)- RaspberryPi 4B 作為“本機(jī)”平臺(tái)- Saleae Logic 16 pro 作為我的邏輯分析儀- Zybo-Zy-20 作為我的“目標(biāo)” FPGA 板。
步驟 1:驗(yàn)證接口兼容性
N. 通過(guò)查看電路板原理圖來(lái)檢查引腳配置和電壓電平。
我們可以看到連接器將為連接的相機(jī)提供 3.3V 電壓,并且 I2C 也在 3.3V 電壓下工作。
接下來(lái),我們看一下攝像頭模塊。從RPi v2.1 相機(jī)模塊的原理圖,我們可以驗(yàn)證引腳配置和電壓確實(shí)匹配。
您可能會(huì)注意到 1.8V 而不是 3.3V 的上拉電壓,但這沒(méi)關(guān)系,因?yàn)榻M件 Q1 正在執(zhí)行電壓電平轉(zhuǎn)換。它期待相同的 3.3V 電源輸入。我還驗(yàn)證了 ENABLE 信號(hào)可以與來(lái)自 Zybo-Z7 的 3.3V 信號(hào)一起使用。MIPI 信號(hào)和地的所有位置都符合預(yù)期。
第 2 步:讓相機(jī)與原生平臺(tái)一起工作
首先,我們需要讓相機(jī)與其本地支持的平臺(tái)一起工作,在這種情況下是 Raspberry Pi 4。但是,對(duì)于不同的相機(jī),它可以是任何其他嵌入式系統(tǒng)(Jetson Nano 等);平臺(tái)沒(méi)有太大關(guān)系。主要目標(biāo)是能夠使用可用的驅(qū)動(dòng)程序命令相機(jī)進(jìn)行正確的設(shè)置,以便我們可以監(jiān)視 I2C 線路。
我不會(huì)詳細(xì)介紹如何讓 v2 ??相機(jī)與 Raspberry Pi 一起工作,因?yàn)檫@在互聯(lián)網(wǎng)上的很多地方都有介紹,包括官方文檔。簡(jiǎn)而言之,我在 RPi 4 上啟動(dòng)了 Raspbian OS 映像,啟用了攝像頭,然后打開(kāi)終端發(fā)出以下命令:
實(shí)時(shí)視頻立即開(kāi)始在連接的 HDMI 監(jiān)視器上顯示,表明相機(jī)正在按預(yù)期工作。Ctrl+C退出。注意上面gstreamer管道的使用,這是上面命令工作的先決條件。
第 3 步:嗅探 I2C 通信
現(xiàn)在我們有了一個(gè)工作系統(tǒng),下一步是嗅探 RPi 和圖像傳感器之間的 I2C 通信。首先,我使用烙鐵將三根細(xì)跳線連接到 FFC 上的接地、SDA、SCL 引腳,然后用 Kapton 膠帶覆蓋以作為連接線的機(jī)械釋放。我這樣做是因?yàn)榕c在焊接過(guò)程中弄亂 RPi 或相機(jī)板相比,F(xiàn)FC 電纜便宜且易于更換,如果您犯了錯(cuò)誤。此外,這給了我一條“間諜電纜”,我也可以將其重新用于其他相機(jī)/平臺(tái)。
在此之后,我將這些電線與我的邏輯分析儀連接起來(lái)。對(duì)于這一步,我使用 USB“邏輯分析儀”來(lái)嗅探 I2C 通道上的通信。我使用了 Saleae Logic 16 pro,因?yàn)檫@是我所擁有的,但任何便宜的邏輯分析儀都可以用于此(I2C 的數(shù)據(jù)速率相當(dāng)慢)。最后,我為 I2C 解碼配置了邏輯分析儀并點(diǎn)擊了開(kāi)始按鈕。
現(xiàn)在我們有一些捕獲的數(shù)據(jù)。接下來(lái),我們需要清理和準(zhǔn)備數(shù)據(jù),然后才能將其與我們的 FPGA 板一起使用。我遵循的確切程序非常特定于我的設(shè)置,我將詳細(xì)說(shuō)明每個(gè)步驟的意圖以供讀者理解。
步驟 4:清理和準(zhǔn)備 I2C 數(shù)據(jù)
現(xiàn)在我們有一些捕獲的數(shù)據(jù),我們需要清理和準(zhǔn)備數(shù)據(jù),然后才能將其與我們的 FPGA 板一起使用。由于我遵循的確切過(guò)程非常特定于我的設(shè)置,因此我將詳細(xì)說(shuō)明每個(gè)步驟的意圖,以便讀者理解。
我注意到的第一件事是,有一個(gè)初始的命令突發(fā)(左),然后是另一個(gè)密集的命令突發(fā)(中),然后經(jīng)過(guò)一段時(shí)間的延遲,每約 15 毫秒(右)有一個(gè) I2C 命令。
每 ~15ms 的命令對(duì)應(yīng)于 60fps 的幀之間的時(shí)間。此外,命令被發(fā)送到相同的 I2C 地址并且都是寫(xiě)命令。
所以我得出結(jié)論,經(jīng)過(guò)一些實(shí)驗(yàn),這些必須是從 ISP 到相機(jī)的命令,用于在處理每一幀之后調(diào)整不斷變化的光照條件(自動(dòng)增益/曝光控制,可能還有自動(dòng)白平衡)。這也意味著,就目前而言,我可以刪除在這些命令的第一次實(shí)例之后發(fā)送的任何數(shù)據(jù)數(shù)據(jù),因?yàn)榘l(fā)送一次曝光命令就足以開(kāi)始了。另外,請(qǐng)注意這些重復(fù)的命令被發(fā)送到 I2C 地址 0x10。因此我們可以推斷出我們相機(jī)的I2C 地址是 0x10 。
接下來(lái),我查看了修剪后的數(shù)據(jù),并注意到開(kāi)頭有一些讀取命令,以及一些對(duì) I2C 地址 0x71 的寫(xiě)入命令。
因?yàn)槲覀儾恢廊绾翁幚韽淖x取命令返回的數(shù)據(jù),所以保留它們沒(méi)有意義,所以我刪除了它們。
尋址到 0x71 的命令最有可能用于位于 Rpi V2.1 cam 上的 EEPROM,Raspberry pi 固件使用它來(lái)查看是否連接了真正的相機(jī),因此我們也不需要保留它們。因此我也刪除了它們。
對(duì)于轉(zhuǎn)儲(chǔ)的數(shù)據(jù),我只會(huì)提到一些細(xì)分。讓我們隨機(jī)選擇一行轉(zhuǎn)儲(chǔ)數(shù)據(jù):
在這一行中,0x10 是相機(jī)的 I2C 地址,0x0162 是寄存器地址,0x0D、0xE8 是數(shù)據(jù)字節(jié)。通常一個(gè)寄存器是一個(gè)字節(jié)長(zhǎng),因此由于大多數(shù)傳感器中的 I2C 地址自動(dòng)遞增功能,第二個(gè)字節(jié)實(shí)際上將轉(zhuǎn)到下一個(gè)寄存器地址 (0x1063)。
無(wú)論如何,在此之后,我將剩余的修剪數(shù)據(jù)復(fù)制到 Excel 表中,刪除了除 I2C 數(shù)據(jù)之外的所有文本并對(duì)其進(jìn)行了格式化(通過(guò)一些手動(dòng)操作),以便稍后在 Xilinx 內(nèi)部將其用作 C 中的數(shù)組開(kāi)發(fā)工具包。其中一部分包括在每行中添加一列,其中包含 I2C 字節(jié)數(shù),因?yàn)檗D(zhuǎn)儲(chǔ)數(shù)據(jù)中的不同行發(fā)送的 I2C 字節(jié)數(shù)不同。
步驟 5:使用 FPGA 重放命令
現(xiàn)在,為了使用我們的 FPGA 板測(cè)試我們的數(shù)據(jù),我需要一個(gè) Vivado &SDK 項(xiàng)目。幸運(yùn)的是,我已經(jīng)從Adam Taylor的優(yōu)秀帖子中下載了一個(gè) Vivado 項(xiàng)目,它為我提供了一個(gè)工作系統(tǒng),可以從 PCAM-5C 相機(jī)以 720p60 分辨率獲取數(shù)據(jù)并通過(guò) HDMI 輸出顯示。
接下來(lái),我為此轉(zhuǎn)到了 SDK 項(xiàng)目,并添加了一個(gè)數(shù)組,其中包含前面步驟中轉(zhuǎn)儲(chǔ)和格式化的 I2C 數(shù)據(jù),并將其設(shè)置為啟動(dòng)后發(fā)送到 v2 相機(jī) I2C 地址(0x10)。其余什么都不必更改,事實(shí)上我什至在文件中保留了以前的 PCAM-5C 代碼,因?yàn)楫?dāng)該地址上沒(méi)有設(shè)備響應(yīng)時(shí),直接忽略對(duì)該地址的命令。我還配置了 Adam 的 vivado 項(xiàng)目以使用 CSI 輸入(而不是 HDMI IN)作為源。包含所有修改的完整項(xiàng)目鏈接在帖子末尾。
軟件修改完成后,剩下要做的就是將 RPi v2.1 攝像頭連接到 Zybo-Z7 上的 MIPI 連接器,將 HDMI 電纜從 HDMI TX 端口連接到顯示器,然后上傳代碼。
幾秒鐘后,現(xiàn)場(chǎng)視頻出現(xiàn)在屏幕上!
然而,在成功之前,我會(huì)提到一個(gè)我立即觀察到的問(wèn)題:曝光和白平衡保持不變。公平地說(shuō),這是意料之中的,因?yàn)槲覀儾粫?huì)在初始配置后更新曝光或白平衡。將來(lái),這可以通過(guò)構(gòu)建一些 HLS 塊來(lái)計(jì)算曝光、白平衡等,并在每一幀后將更新發(fā)送回傳感器來(lái)完成。
結(jié)果和結(jié)論
我能夠使用 Zybo-Z7-20 FPGA 從 RPi Cam v2.1 成功獲得 720p-60fps 視頻,甚至沒(méi)有查看數(shù)據(jù)表(順便說(shuō)一句,它可用于 RPi v2.1 cam 上的 IMX219 傳感器模塊)。這證明這里采用的概念也適用于其他可用的傳感器(盡管有一些警告),并且應(yīng)該為我們提供更多用于 FPGA 項(xiàng)目的 MIPI 圖像傳感器選項(xiàng)。
在此過(guò)程中,我了解到一些注意事項(xiàng):
如今越來(lái)越多的圖像傳感器沒(méi)有內(nèi)部 ISP(圖像信號(hào)處理器),而是依靠芯片內(nèi)部的 ISP 來(lái)接收視頻以實(shí)現(xiàn)自動(dòng)曝光/增益、白平衡等功能。這意味著,如果這些傳感器之一是與 FPGA 一起使用,那么我們需要在 FPGA 中自己處理這些功能。在受控的光照條件變化下,通過(guò)查看每一幀之后發(fā)送到相機(jī)的數(shù)據(jù),應(yīng)該可以找到相關(guān)的寄存器。另一方面,一些相機(jī)模塊還帶有板載 ISP,在這種情況下,這不會(huì)成為問(wèn)題。(看看來(lái)自 Arducam、VEYE 的一些傳感器)
并非所有圖像傳感器本身都支持 720p 或 1080p 等格式。因此,在某些情況下,與用戶通過(guò)命令行請(qǐng)求的相比,驅(qū)動(dòng)程序會(huì)將傳感器設(shè)置為高度/寬度(或兩者)更大的模式。在這種情況下,Raspberry Pi/Jetson 等內(nèi)部的 ISP(圖像信號(hào)處理器)應(yīng)將圖像裁剪為用戶要求的分辨率。這意味著如果我們使用 FPGA 來(lái)接收這個(gè)流,那么我們將需要在我們的 FPGA 中進(jìn)行裁剪。通過(guò)為圖像起始位置、活動(dòng)像素和水平和垂直方向的步幅設(shè)置適當(dāng)?shù)闹怠?/p>
- 嵌入式日記:破解RPi攝像頭以與Zynq FPGA配合使用
- labview本地視頻及攝像頭資料 36次下載
- V380攝像頭客戶端下載 0次下載
- 基于LABVIEW編程的USB攝像頭拍照VI文件 56次下載
- 紅外攝像頭驅(qū)動(dòng)工具ThermoX軟件下載 75次下載
- 如何使用CMOS攝像頭與FPGA實(shí)現(xiàn)位置檢測(cè)系統(tǒng)的設(shè)計(jì) 13次下載
- 手機(jī)攝像頭的MIPI接口如何通過(guò)FPGA采集 59次下載
- 如何實(shí)現(xiàn)家庭安防系統(tǒng)中的多攝像頭和視頻采集與網(wǎng)絡(luò)傳送 22次下載
- CCD攝像頭 18次下載
- 基于CMOS攝像頭與FPGA的位置檢測(cè)系統(tǒng)設(shè)計(jì) 5次下載
- 攝像頭的硬件函數(shù)(IP核) 13次下載
- 攝像頭入門 0次下載
- MINI攝像頭接線圖 35次下載
- 微視攝像頭驅(qū)動(dòng)下載
- 001攝像頭萬(wàn)能驅(qū)動(dòng)下載
- FPGA在智能攝像頭優(yōu)化中的作用 421次閱讀
- 用usb攝像頭替換手機(jī)前置攝像頭可以嗎 3062次閱讀
- AHD攝像頭與CVBS的區(qū)別 1.5w次閱讀
- 技術(shù)前沿:攝像頭模組 5446次閱讀
- 攝像頭應(yīng)用領(lǐng)域及應(yīng)用產(chǎn)品型號(hào) 1745次閱讀
- 如何正確的安裝監(jiān)控攝像頭 1.3w次閱讀
- fireflyAIO-3288C主板攝像頭模組簡(jiǎn)介 2202次閱讀
- 為什么智能攝像頭這么受歡迎 4813次閱讀
- 微雪電子 樹(shù)莓派原裝攝像頭V2兼容模組介紹 2199次閱讀
- 微雪電子樹(shù)莓派原裝攝像頭V2簡(jiǎn)介 2753次閱讀
- FireflyRK3288的攝像頭模組介紹 2432次閱讀
- 關(guān)于Firefly攝像頭模組的簡(jiǎn)介 3347次閱讀
- 如何使用luvcview來(lái)實(shí)現(xiàn)UVC雙攝像頭拍攝 1w次閱讀
- 攝像頭芯片型號(hào)有哪些_攝像頭芯片型號(hào)匯總 5.9w次閱讀
- 雙攝像頭系列原理 6736次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多