i.MX95 Configuration
i.MX95 Configuration (Advanced)
The i.MX95 platform is a powerhouse for vision applications but requires careful configuration due to its Crossbar routing architecture. Unlike simpler chips, the i.MX95 uses a chain of intermediate devices (csidev, formatter, crossbar) to route data to the ISP.
Visualizing the Architecture
The i.MX95 routing topology is complex. Data flows through several blocks before reaching the processing pipeline.
Collision Risk: Crossbar Output Config
The Crossbar sits at the end of the pipeline, collecting streams from the Formatters and distributing them to the ISIs.
- Pipeline A (Formatter@20) connects to Crossbar Input Pad 2.
- Pipeline B (Formatter@120) connects to Crossbar Input Pad 3.
A collision occurs if you try to route both input pipelines to the same output destination (ISI) simultaneously.
- Correct: Pipeline A -> route to ISI.0 (Pad 5) | Pipeline B -> route to ISI.1 (Pad 9).
- Collision: Pipeline A -> ISI.0 | Pipeline B -> ISI.0.
Physical Port Mapping Table
Use the table below to ensure you are targeting the correct devices in your YAML file.
| Physical Port | YAML Device Name | Connected Pipeline |
|---|---|---|
| CSI1 | csidev-4ad30000.csi | Pipeline A (via Formatter@20) |
| CSI2 | csidev-4ad40000.csi | Pipeline B (via Formatter@120) |
Crossbar Pad Reference
The Crossbar is the core routing component. Understanding the pad layout is critical for avoiding collisions.
| Pad Type | Pad Number | Connected Device | Pipeline |
|---|---|---|---|
| Input | Pad 2 | Formatter@20 | Pipeline A (CSI1) |
| Input | Pad 3 | Formatter@120 | Pipeline B (CSI2) |
| Output | Pad 5 | mxc_isi.0 | ISI Channel 0 |
| Output | Pad 6 | mxc_isi.1 | ISI Channel 1 |
| Output | Pad 7 | mxc_isi.2 | ISI Channel 2 |
| Output | Pad 8 | mxc_isi.3 | ISI Channel 3 |
| Output | Pad 9 | mxc_isi.4 | ISI Channel 4 |
| Output | Pad 10 | mxc_isi.5 | ISI Channel 5 |
| Output | Pad 11 | mxc_isi.6 | ISI Channel 6 |
| Output | Pad 12 | mxc_isi.7 | ISI Channel 7 |
- Pipeline A cameras (CSI1) typically route from Pad 2 → Pads 5-8 (ISI.0-3)
- Pipeline B cameras (CSI2) typically route from Pad 3 → Pads 9-12 (ISI.4-7)
YAML Configuration Examples
For complete configuration files, check our GitHub Repository:
| Configuration | Connection | Description |
|---|---|---|
VxRoute_iMX95_GMSL_2CAM_CSI1.yaml | ![]() | 2 cameras on CSI1 |
VxRoute_iMX95_GMSL_CSI1.yaml | ![]() | 4 cameras on CSI1 |
VxRoute_iMX95_GMSL_CSI2.yaml | ![]() | 4 cameras on CSI2 |
VxRoute_iMX95_GMSL_CSI1_CSI2.yaml | ![]() | 8 cameras (both ports) |
Each device in the chain requires internal routing configuration:
Sensor → max96717 (Serializer) → max96724 (Deserializer) → csidev → formatter → crossbar → mxc_isi
Example: Routing 2 cameras on CSI1 to ISI.0 and ISI.1
Routes:
# 1. Crossbar: Route Pipeline A inputs to ISI.0 and ISI.1
- device: "crossbar"
links:
- {src: "2/0", dst: "5/0", enable: 1} # Camera 1 (VC0) -> mxc_isi.0
- {src: "2/1", dst: "6/0", enable: 1} # Camera 2 (VC1) -> mxc_isi.1
# 2. Formatter: Enable data pass-through for 2 virtual channels
- device: "4ac15000.syscon:formatter@20"
links:
- {src: "0/0", dst: "1/0", enable: 1}
- {src: "0/1", dst: "1/1", enable: 1}
# 3. CSI Device: Route input to formatter
- device: "csidev-4ad30000.csi"
links:
- {src: "0/0", dst: "1/0", enable: 1}
- {src: "0/1", dst: "1/1", enable: 1}
# 4. Deserializer: Aggregate 2 serializer inputs to CSI output (Pad 4)
- device: "max96724 1-002e"
links:
- {src: "0/0", dst: "4/0", enable: 1} # Port A -> VC0
- {src: "1/0", dst: "4/1", enable: 1} # Port B -> VC1
# 5. Serializers: Pass sensor data through
- device: "max96717 12-0040"
links:
- {src: "0/0", dst: "1/0", enable: 1}
- device: "max96717 13-0040"
links:
- {src: "0/0", dst: "1/0", enable: 1}
MediaLinks:
# Connect deserializer output (Pad 4) to CSI device input (Pad 0)
- {src: "max96724 1-002e:4", dst: "csidev-4ad30000.csi:0", enable: 1}



