- [[Linux_BSP] Week1。Linux架構、 Boot、kernel、driver、device tree 筆記](https://hackmd.io/@YungHuiHsu/ryZ1i45dT)
- [[Linux_BSP] Week2。UART與GPIO控制](https://hackmd.io/@YungHuiHsu/B1e_heHt6)
- [[Linux_BSP] Week3_1。I2C 通訊、GMSL2 Camera](https://hackmd.io/@YungHuiHsu/HkaQBH0K6)
- [[Linux_BSP] Week3_2。GMSL2 Camera](https://hackmd.io/@YungHuiHsu/Hyjmb5V96)
- [[Linux_BSP] Week4。HPC Debug](https://hackmd.io/@YungHuiHsu/HknGTEw9p)
---
## BSP Week3任務
> 1. - [x] 學習 I2C 通訊
2. - [ ] 學習與應用:GMSL2 Camera
:::success
學習並了解 GMSL2 camera:
1. 與 USB camera、MIPI camera 的差異
2. 與 SERDES(Serializer、Deserializer)的關係
需要輸出文件描述學習心得 (文件格式為投影片)
3. 投影片重點
- Mandatory
* Camera
* GMSL2 camera、USB camera、MIPI camera
* **與 Host 之間的串接**
* GMSL2 camera 與 SERDES 的關係
- Serializer
* Deserializer
* 關聯性
* 舉例說明
- Plus
* 以Nvidia平台為例說明之
* Kernel
* Driver
* Framework
:::
> 3. - [ ] 評核驗收
> :::success
> 1. 串接 econ-System 的 camera module 到 Nvidia Xavier Kit
> 2. 根據 Vendor 文件,porting camera driver 到Xavier Kit
> 3. 透過 Gstreamer 指令串接 camera driver,將camera capture 的影像輸出至 HDMI 螢幕
> :::
---
## 2. 學習與應用:GMSL2 Camera
## 2.1 GMSL2 camera與 USB camera、MIPI camera 的差異
- **GMSL2相機**:
- 設計適用於車載環境。
- 使用同軸電纜減少EMI/EMC干擾。
- 最高16Gbps的帶寬,適合傳輸高解析度和高幀率視頻。
- **USB 3.0相機**:
- 基於通用的USB技術。
- 即插即用功能,方便使用。
- EMI/EMC性能可能不如GMSL2相機。
- **MIPI CSI-2相機**:
- 主要用於移動設備和嵌入式系統。
- 總帶寬可達1.28Gbps,適合空間有限的應用。
#### 與主機(Host)之間的連接方式與考量
| 特性 | GMSL2 | USB 3.0 | MIPI CSI-2 |
|---------|-------|---------|------------|
| **在SoC上的可用性 <br>(Availability on SoC)** | 特定介面所需 | 常見於高端SoC | 廣泛可用 |
| **帶寬 (Bandwidth)**<br>Gbps | 最高:16Gbps | 中等:5Gbps | 每通道高達0.32,<br>四通道合計高達1.28 |
| **電纜長度 <br>(Cable Length)**<br>m | 最常:15 | 中等:5 | 短:0.3 |
| **空間要求 <br>(Space Requirements)** | 適中 | 高 | 低 |
| **即插即用 <br>(Plug-and-play)** | 不支援 | 支援 | 不支援 |
| **開發成本 <br>(Development Costs)** | 高 | 低 | 中至高 |
| **EMI/EMC性能** | 優異 | 良好 | 良好 |
| **應用場景 <br>(Application Scenarios)** | 汽車和工業 | 消費性和工業 | 移動裝置、<br>嵌入式系統 |
#### Gigabit Multimedia Serial Link™ (GMSL) cameras
- GMSL interface

> GMSL SERDES System
> 在GMSL 技術的嵌入式視覺系統中,從圖像感測器到處理器的資料傳輸流程。
> - 在傳輸端,圖像感測器捕捉的原始像素資料通過一個序列化器(Serializer)轉換為序列資料流,然後通過 GMSL 線路以高達 6Gbps 的速率傳輸。
> - 在接收端,一個解序列器(Deserializer)再將這些序列資料轉換回平行的字詞資料,以供通用圖像處理器(ISP)或系統單芯片(SoC)進行處理。
>
> 這種設計允許高速、長距離且具備強大傳輸能力的資料流在車載娛樂系統和先進駕駛輔助系統(ADAS)等應用中進行
> [source: GMSL Camera over MIPI Camera](https://www.e-consystems.com/blog/camera/technology/gmsl-camera-over-mipi-camera/)
## 2.2 GMSL2 camera 與 SERDES 的關係

[source: wiki](https://en.wikipedia.org/wiki/SerDes)
### 數位與類比信號轉換:SerDes 技術解析

[source: 顏睿甫。SerDes 系統簡介及相關數位訊號處理技巧](chrome-extension://mhnlakgilnojmhinhkckjpncpbhabphi/pages/pdf/web/viewer.html?file=http%3A%2F%2Fdjj.ee.ntu.edu.tw%2FSerDes.pdf)
:pencil: SerDes技術通過轉換與傳輸信號,支援從圖像感測器到處理器的高效資料流。
**數位信號與類比信號的轉換**:在傳輸資料時,類比信號的連續波形可利用整個電纜頻帶,適於高速傳輸;數位信號則因具有僅兩種狀態(0、1)的特性,在長距離傳輸與高噪環境下提供較好的錯誤檢測和信號完整性。
**序列化與傳輸過程**:
- **序列化(Serializer)**
- Serializer 的工作是將來自圖像感測器的多位元資料(例如,一個圖像像素的原始資料)轉換成序列資料流。這個過程中,資料被壓縮以便於通過一個單一的高速序列連結傳輸。
- **傳輸器(Transmitter)**
- 將序列化的低速序列數位信號轉換為高速類比信號,適用於長距離傳輸。
**反序列化與接收過程**:
- **接收器(Receiver)**
- 在接收端,混合信號設備接收高速類比信號,並將其轉換回低速的數位信號。
- **反序列化(Deserializer)**
- 在資料的接收端,Deserializer 則執行相反的過程,它接收來自 Serializer 的序列資料流,並將其轉換回原始的多位元格式,以便後續的設備(例如,通用圖像處理器或系統單芯片)可以進行處理。
在圖中,上層和下層代表的是資料處理的兩個不同階段,但它們處理的是相同的資料流:
1. **上層 (Serializer > Deserializer)**:這一層負責資料格式的轉換。Serializer 將來自感測器或其他數位裝置的多位元數位信號(N-bit input)轉換為序列的二進制信號(一連串的0和1,稱為 One-bit communication)。Deserializer 則將這序列的二進制信號轉換回原始的多位元數位信號(N-bit output)。
2. **下層 (Transmitter > Receiver)**:這一層負責信號的傳輸。Transmitter 接收來自 Serializer 的低速序列二進制信號,然後將其轉換為高速的類比信號以進行高效率的長距離傳輸。Receiver 則在接收端將高速類比信號轉換回低速序列二進制信號,供 Deserializer 使用。
所以,上層的 "One-bit communication" 是指轉換後用於序列傳輸的二進制資料流,而下層的 "低速數位信號" 指的是這個資料流在被轉換為類比信號之前的形態。這兩者都涉及到同樣的序列二進制資料,但是處於轉換過程的不同階段。
### GMSL2 camera 與 SERDES 的關聯性
**GMSL2相機結合SerDes技術**的核心優勢在於其高吞吐量和低延遲傳輸能力。在電動車和自駕車的應用中,這種高效率的數據傳輸可以提供車輛即時處理速度,使其從各種感測器和攝影機高速獲取即時數據進行準確決策。
使用GMSL2相機時,通常會遇到的一個挑戰是將圖像數據從點到點(Point-to-Point)傳輸至處理器,特別是當這些點距離處理器有相當距離時。SerDes技術透過其**N-to-1/1-to-N**的資料序列化和反序列化功能,允許以較少的硬體針腳(pins)實現高速數據傳輸。這樣的序列化減少了訊號的干擾和信號衰減,(Electromagnetic Interference,電磁干擾)/EMC(Electromagnetic Compatibility,電磁兼容性)環境中尤為重要。
從技術細節上講,**GMSL2**提供了高達16Gbps的連結速度(Link speed),使用較少的電纜和連接器,這有助於簡化車輛內部的電線束。此外,GMSL2支持高動態範圍(HDR)影像和高分辨率視頻。還具有內建的錯誤檢查和重傳機制。
:::info
- N-to-1/1-to-N:
- 指序列化過程中的數據打包和解包。
- 在序列化(N-to-1)階段,多個數據位(N位)被合成(或壓縮)成單一序列數據流,以便於通過單一的傳輸媒介進行高速傳輸。
- 而在反序列化(1-to-N)階段,這個序列數據流被重新擴展成原始的多位元格式。
- 較少的硬體針腳(pins):
- 使用SerDes技術可以將數據通過較少的物理連接傳輸。
- 在傳統的平行傳輸中,每一位數據都需要單獨的針腳和電纜。
- 序列化之後,多位元數據通過單一對針腳進行序列傳輸,從而減少了硬體複雜性和成本。
- 對於嵌入式系統而言,將資料從平行傳輸轉換為序列傳輸確實可以顯著減少所需的物理針腳數量。儘管這種轉換可能聽起來像是會降低傳輸速度,但實際上,透過現代SerDes技術,這樣的序列傳輸可以在非常高的速度下進行。
- 這是因為,雖然資料是逐位元(bit-by-bit)而非同時傳輸,但**序列化的資料可以以極高頻率傳輸**,這意味著即使是單一針腳也能在單位時間內傳輸更多資訊。
- 此外,**序列通訊通常採用差分信號**,這種信號傳輸方式對於減少噪音和提高信號的完整性尤為有效。因此,即使減少了物理連接的數量,序列傳輸也能達到或超過平行傳輸的速度。
- 差分信號(Differential Signaling)
- 差分信號通過同時發送兩個相互反相的信號來增強信號完整性。如果兩條平行的傳輸線遭受到外部電磁干擾,那麼這種干擾將對這兩條線產生大致相同的影響。
- 在接收端,通過計算兩個信號的差值,可以有效消除這些干擾,因為干擾將在差分比較中相互抵消。這種設計大大降低了信號的串擾問題(Crosstalk)。
- 減少串擾(Crosstalk)和信號衰減:
- 序列傳輸相較於平行傳輸在物理電纜上表現出更好的信號完整性。由於信號以序列形式傳輸,減少了線之間的電磁串擾(Crosstalk)和信號在長距離傳輸中的衰減。這種方式利用差分信號傳輸,可以進一步增強信號的抗串擾能力。
- 串擾(Crosstalk)
- 串擾是由於線路之間的耦合引發的訊號和雜訊等的傳播,也稱為“串音干擾”。特別是“串音”在類比通訊時代是字如其意、一目了然的表達。
- 兩根線(也包括PCB的薄膜佈線)獨立的情況下,相互間應該不會有電氣訊號和雜訊等的影響,但尤其是**兩根線平行**的情況下,會因存在於線間的雜散(寄生)電容和互感而引發干擾。所以,串擾也可以理解為感應雜訊。
:::
#### 具體案例說明
> 在嵌入式視覺系統和汽車應用領域,GMSL2相機透過SerDes技術實現了高效能的圖像數據傳輸。SerDes技術,尤其是在GMSL(Gigabit Multimedia Serial Link)應用中,允許從圖像感測器到處理單元的高速資料流傳輸,得以支持先進駕駛輔助系統(ADAS)和其他安全相關功能。
>
> 舉例來說,在現代汽車中,後方攝影機捕捉的高解析度錄影需要被實時傳輸到駕駛員的顯示螢幕,以幫助倒車和監控車輛後方的環境。這要求數據從車輛後部快速且穩定地傳輸到前方的處理系統。GMSL2相機透過SerDes技術將圖像數據序列化,使之能夠通過單一的同軸電纜高速傳輸,並在車輛的顯示系統處進行反序列化,恢復成可用的錄影信號。
>
> 在更複雜的應用,例如多攝影機系統,GMSL2技術能夠同時處理來自車輛周圍多個感測器的資料流。這些資料流經由SerDes技術序列化後,可以被集中傳輸到中央處理器,進行環境監測、物體識別和即時決策支持。這一點在自動駕駛和車聯網技術中尤為重要,其中需要處理來自多個源的大量數據以確保駕駛安全和車輛的自主運行。
>
> 透過這種方式,SerDes技術滿足了對高解析度、低延遲傳輸的需求,並且由於它的高抗干擾性,保證了信號在複雜汽車電子環境中的完整性。這些特性使GMSL2相機及其SerDes傳輸在現代汽車系統中變得不可或缺。
## Task 2 參考資料
### SerDes
#### [2021.11。What is SERDES?](https://www.utmel.com/blog/categories/integrated%20circuit/what-is-serdes)
- [2023.06。封狼居胥。超详细:SerDes知识详解](https://zhuanlan.zhihu.com/p/639915241)

#### [浩陽半導體。SerDes序列器](https://www.hawyang-semi.com/serdes)

#### [2011。CTIMES。SerDes 的基礎](https://www.ctimes.com.tw/DispArt/tw/1107261455DR.shtml)
#### [2023.06。顏睿甫。SerDes 系統簡介及相關數位訊號處理技巧](chrome-extension://mhnlakgilnojmhinhkckjpncpbhabphi/pages/pdf/web/viewer.html?file=http%3A%2F%2Fdjj.ee.ntu.edu.tw%2FSerDes.pdf)
### GMSL
#### [2021.11。e-consystems。GMSL Camera over MIPI Camera](https://www.e-consystems.com/blog/camera/technology/gmsl-camera-over-mipi-camera/)
> - SerDes在原文其實為「Serializer」與「Deserializer」兩個單字的縮寫。中文多半將其翻譯為「序列器」與「解序列器」。SerDes是一個能夠將高位元通訊訊號在並列通訊 (Parallel Communication) 與序列通訊 (Serial Communication) 模式間轉換的裝置。所謂「序列器」(Serializer) 即為將輸入的並列訊號轉換為序列訊號;「解序列器」(Deserializer) 則反之將序列訊號轉換回並列訊號。
> - SerDes是應用一個或多個差動訊號 (differential signal) 的裝置使大量資料能夠在點對點間傳輸,以消弭並列通訊在現實上匯流接口多、面積大、成本高、功耗強、頻率校準不易及佔用電路板空間等等的缺點。
#### [2021.07。e-consystems。How to choose the right interface for an embedded vision system?](https://www.e-consystems.com/blog/camera/technology/how-to-choose-the-right-interface-for-an-embedded-vision-system/)
#### [2021.11。e-consystems。MIPI camera vs USB camera – a detailed comparison](https://www.e-consystems.com/blog/camera/technology/mipi-camera-vs-usb-camera-a-detailed-comparison/)
#### [2021.07。e-consystems。What are SerDes cameras? Where are they used in embedded vision?](https://www.e-consystems.com/blog/camera/technology/what-are-serdes-cameras-where-are-they-used-in-embedded-vision/)

> architecture of a SerDes system (source: Texas Instruments)
#### [2024.01。Kainan Wang。Gigabit Multimedia Serial Link (GMSL) Cameras as an Alternative to GigE Vision Camera](https://www.analog.com/en/analog-dialogue/articles/gigabit-multimedia-serial-link-gmsl-cameras.html)



#### [Jetson Virtual Channel with GMSL Camera Framework](https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-325/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/gmsl_camera_framework.html)
- GMSL Protocol

- GMSL Camera

- Software Framework and Programming

---
# 3. 評核驗收
## 3.1 串接 econ-System 的 camera module 到 Nvidia Xavier Kit
:::success
- **操作步驟**:
1. 確認 camera module 和 Xavier Kit 的接口相容性。
2. 將 camera module 連接到 Xavier Kit。
3. 驗證連接成功,如通過命令行檢查。
:::

大致跟著文件指示,補上一些額外註解
### PREREQUISITES
- on dev. kit(AGX Xavier)
* L4T版本 (<L4T_version>): R35
* 發布日期 (<release_date>): 20230319(根據日期格式 YYYYMMDD)
* 發布版本 (<release_version>): 3.1
```bash=
yh@AGX-Xavier:~$ head -n 1 /etc/nv_tegra_release
# R35 (release), REVISION: 3.1, GCID: 32827747, BOARD: t186ref, EABI: aarch64, DATE: Sun Mar 19 15:19:21 UTC 2023
```
- on dev. kit(AGX Xavier)
* L4T版本 (<L4T_version>): R35
* 發布日期 (<release_date>): 20230319(根據日期格式 YYYYMMDD)
* 發布版本 (<release_version>): 3.1
- Downloading the Requirements
有針對 R35.3.1 Jetson™ Driver下載與安裝的詳細指引
#### SETTING UP THE ENVIRONMENT
#### DOWNLOADING THE REQUIREMENTS
#### EXTRACTING AND PREPARING L4T
- Extracting the Release Package
Run the following commands to extract the NileCAM21_CUOAGX_1H04R1 release package.
- on dev. kit(AGX Xavier)
* L4T版本 (<L4T_version>): R35
* 發布日期 (<release_date>): 20230319(根據日期格式 YYYYMMDD)
* 發布版本 (<release_version>): 3.1
```bash=
yh@AGX-Xavier:~$ head -n 1 /etc/nv_tegra_release
# R35 (release), REVISION: 3.1, GCID: 32827747, BOARD: t186ref, EABI: aarch64, DATE: Sun Mar 19 15:19:21 UTC 2023
```
- on hostPC
- NileCAM21_CUOAGX_JETSON_<L4T_version>_<release_date>_<release_version>.tar.gz
```bash=
# on hostPC
cd $TOP_DIR
tar -xaf NileCAM21_CUOAGX_JETSON_R35_20230319_3.1.tar.gz
```
#### EXTRACTING THE RELEASE PACKAGE
### INSTALLATION PROCEDURE
#### BUILDING FROM SOURCE
#### DOWNLOADING AND CONFIGURING THE KERNEL
#### BUILDING AND INSTALLING THE KERNEL
#### MODIFYING THE ROOTFS
#### LASHING JETSON DEVELOPMENT KIT
### LOADING THE DRIVERS
#### INSTALLING THE SAMPLE APPLICATION
#### USING THE SAMPLE APPLICATIONS WITH NILECAM21_CUOAGX_1HO4R1
## 3.2 根據 Vendor 文件,porting camera driver 到Xavier Kit
:::success
- **操作步驟**:
1. 下載並閱讀 vendor 提供的 camera driver 文件。
2. 根據文件說明,在 Xavier Kit 上編譯並安裝 driver。
3. 驗證 driver 安裝成功並正常運作。
:::
"根據 Vendor 文件,porting camera driver 到 Xavier Kit" 指的是將相機製造商(Vendor)提供的Driver移植到 NVIDIA Jetson AGX Xavier 開發套件上。這通常涉及幾個主要步驟,包括準備工作、Driver的配置、建構、測試和調試。以下是這些步驟的詳細指引:
### 1. 預備環境
- 確保開發環境滿足所有軟件需求,例如具有正確版本的交叉編譯工具鏈和必要的依賴項。
- 安裝 NVIDIA SDK Manager,下載並安裝與 Jetson AGX Xavier 相對應的 Linux for Tegra (L4T) 發布Package。
- 確保有 Vendor 提供的相機DriverSource Code。
### 2. 獲取相機Driver的Source Code
- 從相機製造商提供的連結或存儲媒體上獲取相機Driver的Source Code。
### 3. 編譯Driver
- 根據 Vendor 文件中的指示,準備必要的Kernel配置選項。可能需要啟用特定的Kernel選項或者添加新的配置。
- 將相機Driver的Source Code放到 L4T KernelSource Code樹的適當位置。
- 使用交叉編譯工具鏈來編譯Kernel Module。
### 4. Driver配置
- 修改 Device Tree(如果需要),以包括對新相機硬體的描述。
- 更新相關的Kernel配置文件,以確保Driver能夠被正確識別和加載。
### 5. Driver安裝
- 將編譯好的Driver `.ko` 文件複製到 Xavier 開發套件中的適當位置。
- 使用 `insmod` 或 `modprobe` 命令加載DriverModule到Kernel。
### 6. 驗證和測試
- 檢查 `dmesg` 或其他相關日誌文件來驗證Driver是否已經正確加載。
- 使用 Vendor 提供的測試腳本或工具來進行功能測試。
### 7. 調試
- 如果Driver不按預期工作,使用Kernel調試工具,如 `gdb`、`kgdb`、`printk` 等來進行調試。
### 8. 文檔和支援
- 閱讀 Vendor 提供的文檔,如開發指南、API 參考、FAQs 等,以獲取額外的支援。
### 9. 提交和維護
- 如果需要,提交Driver更改給 Vendor 或者程式碼庫。
- 維護Driver,以跟上新的Kernel版本和相機硬體的更新。
## 3.3 透過 Gstreamer 指令串接 camera driver,將camera capture 的影像輸出至 HDMI 螢幕
:::success
- **操作步驟**:
1. 確認 Gstreamer 已在 Xavier Kit 上安裝。
2. 使用 Gstreamer 命令行構建 pipeline,從 camera 接收資料。
3. 將接收到的影像資料輸出到 HDMI 顯示器。
:::