Skip to main content

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.
CRITICAL: Avoid Crossbar Collisions

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 PortYAML Device NameConnected Pipeline
CSI1csidev-4ad30000.csiPipeline A (via Formatter@20)
CSI2csidev-4ad40000.csiPipeline B (via Formatter@120)

Crossbar Pad Reference

The Crossbar is the core routing component. Understanding the pad layout is critical for avoiding collisions.

Pad TypePad NumberConnected DevicePipeline
InputPad 2Formatter@20Pipeline A (CSI1)
InputPad 3Formatter@120Pipeline B (CSI2)
OutputPad 5mxc_isi.0ISI Channel 0
OutputPad 6mxc_isi.1ISI Channel 1
OutputPad 7mxc_isi.2ISI Channel 2
OutputPad 8mxc_isi.3ISI Channel 3
OutputPad 9mxc_isi.4ISI Channel 4
OutputPad 10mxc_isi.5ISI Channel 5
OutputPad 11mxc_isi.6ISI Channel 6
OutputPad 12mxc_isi.7ISI Channel 7
Pad Usage Guide
  • 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:

ConfigurationConnectionDescription
VxRoute_iMX95_GMSL_2CAM_CSI1.yaml2 cameras on CSI1
VxRoute_iMX95_GMSL_CSI1.yaml4 cameras on CSI1
VxRoute_iMX95_GMSL_CSI2.yaml4 cameras on CSI2
VxRoute_iMX95_GMSL_CSI1_CSI2.yaml8 cameras (both ports)
Complete Data Flow

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}