單元 1 · 平台相機生態總覽

CSI-2/HSB、Jetson+Holoscan

Thor T5000 的相機介面

Jetson Thor T5000(同平台 T4000)提供三種感測器路徑:

路徑說明適用
MIPI CSI-216 lanes,最多 6 顆相機近距離高速
Holoscan Sensor Bridge(HSB)感測器經乙太網路(25GbE)進 GPU遠距離/多感測器融合
USB 相機即插即用快速原型
感測器MIPI 或 HSB(乙太網路)camera offload engineGPU/ISP

軟體堆疊:Jetson + Holoscan

重點:Thor 的「新」在 HSB——感測器資料不走短距離 CSI,而是乙太網路,支援大規模多感測器與即時融合。

1.3 深入原理:MIPI CSI-2 的位元層與時序

MIPI CSI-2 由 clock lane(DDR clock)與 data lanes 組成。Thor 的 CSI 介面提供最多 16 lanes,lane 以差動訊號(D-PHY)傳輸,在 clock 的雙沿(rising + falling)各送 1 bit,因此每條 lane 的資料速率是 clock 的兩倍。

Clock lane(DDR)data lane ×N每 clock 雙沿各 1 bitpacket(header + payload + CRC)

每個資料封包包含:Packet Header(資料型態 DT、word count)、Payload(像素資料)、Packet Footer(ECC/CRC)。讀取「hs-freq-range」或 CSI-2 速率時,遇到 CRC error 增加通常代表 訊號完整性lane 數設定錯

參數說明檢查方式
lane 數感測器 → CSI 的資料通道數DT 設定 / dmesg
每 lane 速率Gbps/lane,決定總頻寬HSB 設定檔 / 示波器
raw data type如 RAW10/RAW12/YUVv4l2 --list-formats-ext
常見陷阱:lane 數與 raw 位元深是兩個獨立設定。很多人改了解析度卻忘了同步改 lane 數 → 畫面撕裂或 TX timeout

1.4 Worked Example:估算 16 lanes 到底能載多少

頻寬估算(OV9281:1280×800 RAW10 @ 120 fps)
# 每幀 raw bits
1280 × 800 × 10 bit = 10,240,000 bit ≈ 1.28 MB/frame
# 每秒資料量
1.28 MB × 120 fps = 153.6 MB/s ≈ 1.23 Gbps
# 用 4 lanes、每 lane 1 Gbps → 4 Gbps 綽綽有餘
# 對照:16 lanes 全部只給一個感測器 = 浪費;16 lanes 是給多顆 + 高解析用的
直覺:單顆 OV9281 連 4 lanes 都用不滿。Thor 的 16 lanes 是「同時接多顆感測器」的總容量,不是單顆可用的上限。規劃時先算單顆需求,再除以 lane 容量決定配置。

1.5 疑難排解決策樹:三種路徑怎麼選

「我的感測器該走哪條路?」決策樹
1. 感測器離主機 < 30cm 且有現成 CSI 接頭?
   ├─ 是 → MIPI CSI-2(延遲最低)
   └─ 否 ─┐
2. 需要超過 1 顆感測器同步、或部署在移動載具?
   ├─ 是 → HSB(乙太網路,25GbE,可達數十米)
   └─ 否 ─┐
3. 只要快速原型、不要求低延遲/精確同步?
   └─ 是 → USB 相機(最省事,犧牲效能)

⚠️ HSB 具體接頭數、速率上限以 NVIDIA 官方文件為準。

1.6 常見錯誤與陷阱

陷阱 1:把 HSB 當「無線」——HSB 仍是實體乙太網路線(25GbE),不是 Wi-Fi。延遲低於一般網路封包但不等於零。
陷阱 2:忽略了 camera offload engine——資料先進 offload engine 才進 GPU,不是直接「倒進」GPU。offload 引擎負責解封包、重新排列,這層出錯會造成幀錯亂。
陷阱 3:16 lanes 迷思——不是「插滿 16 條就好」,而是要每顆感測器各自設定對應的 lane 數。lane 數不匹配是 top-3 常見影像錯誤。

1.7 深入:camera offload engine 在資料流中的位置

camera offload engine 是 Thor 把感測器資料「收進來、整理好」的第一站:負責解封包(HSB 的乙太網路封包或 CSI-2 packet)、重新排列成連續 buffer、必要時做 格式轉換,再交給 GPU。它不負責影像品質——品質是 ISP 的事(unit-07 起)。

HSB 封包(乙太網路)解封包排列成 bufferGPU/ISP
除錯角度:「畫面錯亂但單幀圖看起來對」→ 通常是 offload/排列層出錯;「單幀就錯」→ 是感測器或 ISP 層。從這層開始分診斷,能省大量時間。

1.8 練習

  1. 用 OV9281 規格(1280×800, RAW10, 120 fps)估算每秒資料量。
  2. 說明為什麼 16 lanes 比單一高速 lane 更適合多感測器。
  3. 畫出 MIPI、HSB、USB 三種路徑各自的「資料進 GPU 前的第一個處理單元」。
看完這單元你應該能說出:
  • Thor 三種感測器路徑。
  • MIPI CSI-2 16 lanes 能力。
  • HSB(感測器走乙太網路)意義。
  • Jetson 堆疊與 Holoscan 分工。

延伸閱讀

1.9 進階真實情境 Worked Example:自駕無人車六鏡頭 HSB 接入

場景:一台自駕實驗車搭載 Thor T5000,車身前後左右共 6 顆 OV5640(5 MP、RAW10、30 fps),全部走 HSB(25GbE)接入 Thor,Holoscan 管線即時融合成環景。

頻寬規劃與 Holoscan 通道配置
每顆 OV5640:2592×1944 × 10 bit × 30 fps ≈ 1.50 Gbps
6 顆總計:≈ 9.0 Gbps
25GbE 裸速 25 Gbps → 保留 50% overhead → 可用 ≈ 12.5 Gbps
9.0 < 12.5 → 可行

Holoscan 配置:
  SensorSourceOp × 6(每顆獨立 channel)
  PreprocessOp(resize + format 轉換,GPU)
  FusionOp(六路拼接 / 立體匹配)
  InferenceOp(物件偵測 / 語義分割)

# 設計決策:
# 1. 選 HSB 而非 CSI:6 顆感測器分布在車身,走乙太網路省布線、抗干擾
# 2. 每顆獨立 I2C 橋接通道:避免多顆共用 I2C 的 address 衝突風險
# 3. PTP(IEEE 1588)同步六路曝光時間戳:確保車速 60 km/h 時幀間距差 < 0.5 ms
設計決策:HSB 讓感測器物理距離不受 CSI 30cm 限制,但必須處理乙太網路的非確定性延遲。實務上用 PTP 硬體時間戳 + Holoscan 的 synchronizer operator 做時間對齊,而非依賴封包抵達順序。

1.10 深入原理擴充:Thor T5000 多媒體子系統與 OFI 架構

Thor T5000 的多媒體引擎不只是 ISP。它整合了 NVDEC 8th generation(硬體解碼器,支援 H.265/AV1 多流解碼)、NVENC(硬體編碼)、OFI(Optical Flow Engine) 與 ISP。OFI 能在硬體層面輸出每像素光流向量,讓物理 AI 管線在不佔 GPU 的情況下取得運動資訊。

感測器資料Camera Offload EngineISP / OFI / NVDECGPU(CUDA/推理)
容易忽略的邊界案例:NVDEC 8th gen 在同時解碼 > 4 路 4K 時,與 ISP 共享記憶體頻寬。若 ISP 管線同時處理多顆高解析度感測器,NVDEC 吞吐可能下降 10–15%。規劃多感測器 + 影片解碼的混合管線時,必須量測「ISP 活動時」的 NVDEC 效能,而非只看單獨基準測試。

1.11 診斷式疑難排解表

症狀可能原因解決方案
HSB 有 link up 但 Holoscan 收不到資料I2C 橋接通道未建立 / 感測器未啟動輸出用 i2cdetect 確認橋接通道;確認感測器 register 設定正確後重新觸發 streaming
多顆感測器中有一顆偶發掉幀25GbE 頻寬不足或 PCIe bus 競爭降低該感測器 fps;檢查 host 端 buffer queue 深度;用 ethtool 檢查網路 drop 計數
CSI-2 接單顆感測器正常,接兩顆後畫面撕裂Lane 數分配錯誤或 DTB overlay 未更新確認每顆感測器的 lane 數設定正確;重新產生 DTB overlay 並驗證 media graph
camera offload engine 後畫面時間戳跳號offload engine buffer 溢位或 DMA 對齊錯誤dmesg 檢查 buffer overflow 警告;確認 DMA stride 與感測器 mode 匹配
USB 相機在 Thor 上比 CSI 慢 3 幀延遲USB 匯流排排程 + 驅動層 buffer 佇列改用 CSI 或 HSB 以降低延遲;若必須用 USB,降低解析度以減少 USB transfer 時間

1.12 進階挑戰題

  1. 規劃一個 Thor T5000 + 4 顆 8MP 感測器(RAW12、24 fps)的 HSB 頻寬預算。考慮封包 overhead、PCIe 3.0 x4 瓶頸與 Holoscan buffer 需求,寫出完整的頻寬計算過程與結論。
  2. 設計一個實驗:在 Thor 上同時使用 CSI 與 HSB 兩條路徑接同一型號感測器,比較兩者的從 trigger 到 Holoscan operator 輸出的端到端延遲。說明你會用什麼工具量測、控制哪些變數。
  3. 若 NVDEC 8th gen 與 ISP 同時處理 6 路 4K 影像串流,預估 GPU 可用頻寬下降比例,並提出一個 Holoscan 管線架構讓 OFI 在不爭搶 GPU 記憶體的情況下運作。

1.13 專案級端到端 Worked Example:完整感測器 Bring-up 專案 — 從 DT overlay 到第一張圖

這是一個整合全站 16 個單元的旗艦專案。目標:在 Thor T5000 上,把一顆全新的 OV9281 從「沒有驅動」帶到「Holoscan 管線輸出第一張圖」,並完成基礎調校。以里程碑(M0–M6)組織,每個里程碑都有通過標準與對應單元。

里程碑規劃(M0–M6)
M0 環境與目標定義(unit-01)
   ├─ 選定路徑:CSI(實驗室原型)
   ├─ 選定軟體堆疊:V4L2 + Argus → Holoscan
   └─ 通過:頻寬估算 ≤ 50% 可用、堆疊清單齊全

M1 硬體與電源(unit-06)
   ├─ 供電(AVDD/DVDD)、MCLK 24MHz、RESET GPIO
   └─ 通過:示波器量測上電時序符合 datasheet

M2 驅動與 DTB overlay(unit-04)
   ├─ 建立 ov9281 的 DT overlay(compatible / reg / clocks / reset-gpios)
   ├─ 重建並載入 overlay
   └─ 通過:dmesg 看到 probe 成功、讀到 ID 0x92

M3 取流(unit-05)
   ├─ v4l2-ctl 取 1 幀 NV12 + 1 幀 RAW
   └─ 通過:檔案大小符合、media graph link 全啟用

M4 資料驗證(unit-08)
   ├─ 解包 RAW10、驗證 Bayer order、黑位
   └─ 通過:Gr≈Gb、黑位=固定常數

M5 基礎調校(unit-10~14)
   ├─ AE 收斂、AWB 灰卡、LSC 網格、NR/Sharpen
   └─ 通過:SNR≥30dB、ΔE<3、四角亮度差<5%

M6 回歸與交付(unit-15/16)
   ├─ 多場景回歸、寫 SOP、進 repo
   └─ 通過:回歸全過、文件齊全
專案管理重點:每個里程碑有「明確通過標準」才進下一步。M2 的 dmesg probe 成功不代表 M3 能取流——中間隔著 CSI 設定與格式匹配。這個專案範本可複製到任何新感測器(換型號只換 M1/M2 的參數)。

1.14 量測 / 驗證 SOP:平台相機子系統總驗證

目的:在「開始任何影像品質工作之前」,先證明平台相機子系統健康。此 SOP 是 M0–M3 的正式化版本,適合每次環境變動後重跑。

總驗證 SOP(Step 1–8)
Step 1  盤點介面
   lspci | grep -i camera / ip link show        # CSI/HSB 路徑存在
Step 2  確認工具鏈
   which v4l2-ctl media-ctl i2c-tools holoscan   # 皆可用
Step 3  掃描感測器
   i2cdetect -y <bus>                            # 0x36 出現
Step 4  讀 ID
   i2cget -y <bus> 0x36 0x300a                  # 0x92
Step 5  media graph
   media-ctl -p -d /dev/media0                   # 感測器→CSI→VI→video 全啟用
Step 6  取流
   v4l2-ctl -d /dev/video0 --stream-mmap=3 --stream-count=1 --stream-to=f.nv12
Step 7  檔案大小驗證
   ls -l f.nv12                                  # 1280×800 NV12 = 1,536,000 B
Step 8  記錄
   tee -a bringup_log.txt                        # 時間戳 + 全部輸出

判讀指標:
  ✅ 全部通過 → 進入調校(unit-10 起)
  ⚠️ Step 3–4 失敗 → unit-03/06
  ⚠️ Step 5 失敗   → unit-04(DTB/驅動)
  ⚠️ Step 6–7 失敗 → unit-05(取流/格式)

1.15 平台間對照:相機生態總覽

面向Thor T5000RPi5Orange PiOrin Nano
感測器路徑CSI-2(16 lanes)+ HSB(25GbE)CSI-2(2×4 lanes)CSI-2(4 lanes)CSI-2 / GMSL
軟體堆疊V4L2/Argus + Holoscanlibcamera + V4L2V4L2(感測器內建 ISP)V4L2/Argus
多感測器規模6+(16 lanes 全用)2(兩組 CSI port)1–24–6(依型號)
遠距感測器✅ HSB(數十米)⚠️ GMSL(串行化)
GPU 直連資料✅ Blackwell + GPUDirect❌(CPU 導向)✅ Ampere
典型定位次世代物理 AI學習/原型底層 DIY工業量產
選擇思考:同樣是「接相機」,Thor 的差異在「規模」與「路徑」——16 lanes 總容量 + HSB 遠距。RPi5 的 2 路 CSI 對學習足夠,但對 6 鏡頭融合就是物理上限。

1.16 互動式檢核清單

完成本單元後,逐項勾選(- [ ])並實際執行過:

1.18 Register 位元級完整工作流

本單元涉及的關鍵 register,以及「讀→改→寫→驗證」的完整位元級操作序列:

Register位址功能Bit Field 說明
VI_CFG_CSI_IPCx0x0c800000+0x100*nVI CSI Port 配置bit[3:0]=lane數, bit[5:4]=data type
讀→改→寫→驗證 完整序列(以 VI_CFG_CSI_IPCx 為例)
# Step 1: 讀取目前值
$ devmem2 0x0c800000+0x100*n w
# 記錄 current_value

# Step 2: 計算新值
$ new_value=$(current_value | 0x0001)

# Step 3: 寫入
$ devmem2 0x0c800000+0x100*n w $new_value

# Step 4: 驗證讀回值與預期一致
$ devmem2 0x0c800000+0x100*n w
$ [ "$(devmem2 0x0c800000+0x100*n w | grep Read)" = "expected" ] && echo "PASS" || echo "FAIL"

1.19 多層疑難排解決策樹

決策樹 1:相機路徑選擇失敗
1. `dmesg | grep -i csi` 出現 "no device"?
   ├─ 檢查 device tree overlay 是否載入:`cat /proc/device-tree/soc/csi*/status`
   │  ├─ "okay" → 驅動問題,查 module 版本
   │  └─ "disabled" → DT overlay 未 apply,重跑 sudo ubootOverlayApply
   └─ DT 正常但仍 no device → 硬體層:MIPI 排線接觸、lane 接線對照表
決策樹 2:HSB 乙太網路感測器無法連線
1. `ip link show` 看 25GbE介面是否 UP?
   ├─ DOWN → cable/switch 問題;換線或直連測試
   └─ UP → ping 感測器 IP
      ├─ timeout → 防火牆或 VLAN 設定;檢查 `sudo iptables -L`
      └─ OK → port 不匹配;確認 Holoscan sensor driver config 的 port

1.20 量測驗證完整 SOP

Thor 相機子系統總驗證 SOP:

步驟動作指令/方法預期輸出
Step 1確認硬件連接MIPI 排線、25GbE cable、電源供應排線無鬆動、cable LED 亮
Step 2載入 DT overlay`sudo ubootOverlayApply` + 重開機dmesg 出現 CSI/HSB 初始化訊息
Step 3列出 V4L2 裝置`v4l2-ctl --list-devices`出現 /dev/video0 以上裝置
Step 4列出支援格式`v4l2-ctl -d /dev/video0 --list-formats-ext`RAW10/RAW12 出現
Step 5取一幀`v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=1 --stream-to=frame.raw`非零位元組檔案
Step 6目視檢查`dd if=frame.raw bs=1 count=100 | xxd`Header 合理(DT=0x2B for RAW10)
Step 7HSB 感測器連通測試`ping && nc -zv `ping OK、port open
Step 8GPU 路徑驗證跑 Holoscan sample pipeline 確認 frame 進 GPUnvdec/nvenc 記憶體有分配

1.21 四平台終極對照

面向Thor T5000RPi5Orange PiOrin Nano
感測器路徑CSI-2 + HSB(乙太網路)CSI-2(2 port)CSI-2(1 port)CSI-2 + GMSL
最大 lane 數164(2×2)24–8
HSB 遠距⚠️
DT overlay 方式`ubootOverlayApply`自動(dtoverlay=)bootscript 或 armbianEnvhardkernel dtb
V4L2 工具完整度完整完整部分完整
支援同步取流⚠️
典型 bring-up 時間2–4 hr(含 DT overlay)30 min1–2 hr(DT 手改)1–2 hr

1.22 完整 Bring-up 小 Checklist

針對「平台相機生態總覽」主題的完整 bring-up 步驟清單: