System designExplainer

MIPI CSI-2 frame rate estimation: lanes and data rate

MIPI CSI-2 frame rate estimation: lanes, lane speed, 20% overhead and packed bytes per pixel, with a worked example for a 2 MP sensor.

LumaSpec Vision11 min read Share on LinkedIn

On this page 10 sections
  1. 01Your frame rate is the lower of two caps
  2. 02What the link carries: lanes, lane speed and overhead
  3. 03What one frame costs: packed bytes per pixel
  4. 04Worked example: a 2 MP RAW12 sensor on two lanes at 1.5 Gbit/s
  5. 05Which cap binds, and what that tells you
  6. 06What to change when the link is the limit
  7. 07When the lane math says pick a different link
  8. 08Checks before you commit
  9. 09Where the estimate breaks down
  10. 10Questions

You have a sensor that reaches 120 fps on the vendor's evaluation kit. Your carrier wires that sensor to two lanes at 1.5 Gbit/s per lane instead of four at 2.5, and the first bench run comes back at half the rate. That gap is arithmetic, not mystery. A MIPI CSI-2 link moves a fixed amount of payload per second, and the frame rate is that payload divided by the bytes in one frame. This page gives you the estimation in four inputs — lane count, lane speed, protocol overhead and packed bytes per pixel — so you can predict the rate before you order a board or a camera, and know which of the two caps, sensor or link, is the one actually binding. The same four numbers work for any resolution, bit depth and lane configuration.

Your frame rate is the lower of two caps

Write the whole estimation as one line:

usable payload = lanes × lane speed × 0.8 bytes per frame = width × height × packed bytes per pixel fps(system) = min( sensor fps at full resolution , usable payload ÷ (8 × bytes per frame) )

The first term of the min() comes from the sensor data sheet: the rate it reads out at full resolution in the format you plan to stream. The second comes from the link, and it is the term engineers guess at. Usable payload means the raw line rate of lanes × lane speed with protocol overhead and blanking taken out; plan on 20%, so multiply by 0.8.

Take the smaller of the two terms and you have the answer. When the sensor term is smaller, the platform does not matter: the same sensor holds the same rate on every carrier that can carry it. When the link term is smaller, the frame rate scales with bandwidth, and every lane or gigabit you add or remove shows up in the rate.

Raw bandwidth is lanes × lane speed. Entry-level embedded receivers typically clock 1.5 Gbit/s per lane; faster application processors reach 2.5 Gbit/s per lane, and a few go higher — the processor's interface documentation states the ceiling for your part. Four configurations cover most embedded builds:

Receiver configuration Raw bandwidth Usable at 20% overhead Payload per second
2 lanes at 1.5 Gbit/s 3.0 Gbit/s 2.4 Gbit/s 300 MB/s
4 lanes at 1.5 Gbit/s 6.0 Gbit/s 4.8 Gbit/s 600 MB/s
2 lanes at 2.5 Gbit/s 5.0 Gbit/s 4.0 Gbit/s 500 MB/s
4 lanes at 2.5 Gbit/s 10.0 Gbit/s 8.0 Gbit/s 1000 MB/s

The gap between raw and usable is packet headers, sync traffic and, biggest of all, the horizontal and vertical blanking windows during which the sensor sends nothing and the link idles. Field estimates for CSI-2 links land between 15% and 20% of the raw rate: the low end belongs to large frames with little blanking, the high end to blanking-heavy modes. Size the link at 20% and the estimate stays conservative. The MIPI camera lane bandwidth guide walks the same lane math from the bandwidth side.

What one frame costs: packed bytes per pixel

Count what crosses the wire, not what lands in memory. CSI-2 packs pixels into the stream without per-pixel word alignment, so the negotiated data type sets the cost:

Data type on the wire Packing Bytes per pixel
RAW8 1 pixel per byte 1.00
RAW10 4 pixels in 5 bytes 1.25
RAW12 2 pixels in 3 bytes 1.50
RAW14 4 pixels in 7 bytes 1.75
YUV422 8-bit, RGB565 2 bytes per pixel 2.00
RGB888 3 bytes per pixel 3.00

Bytes per frame = width × height × bytes per pixel. A RAW12 1920 × 1080 frame is 2,073,600 × 1.5 = 3,110,400 B, about 3.11 MB. If a pipeline pulls RGB out of an ISP before anything sees RAW, count the RGB format instead — the RAW sensor output explainer sorts out what an ISP-less sensor actually emits. Cache lines and 16-bit memory words are your problem after the DMA, never on the wire.

Worked example: a 2 MP RAW12 sensor on two lanes at 1.5 Gbit/s

The inputs, each with its source:

  • Receiver: two data lanes at 1.5 Gbit/s per lane, the configuration entry-level embedded carriers typically wire to one camera.
  • Sensor mode: 1920 × 1080 at RAW12, a typical 2 MP global-shutter mode.
  • Sensor limit: 120 fps at full resolution, read from the sensor data sheet — a typical figure for this class of part.

The rule in words: usable payload equals lanes × lane speed × 0.8; the link's rate equals usable payload divided by bytes per frame; the system rate is the smaller of the link rate and the sensor rate.

The arithmetic:

  1. Raw link: 2 lanes × 1.5 Gbit/s = 3.0 Gbit/s.
  2. Usable payload: 3.0 Gbit/s × 0.8 = 2.4 Gbit/s = 300 MB/s.
  3. Bytes per frame: 1920 × 1080 = 2,073,600 pixels; 2,073,600 × 1.5 B = 3,110,400 B ≈ 3.11 MB.
  4. Link rate: 300 MB/s ÷ 3.11 MB = 96.4, so about 96 fps.
  5. System rate: min(96, 120) = 96 fps. The link binds, not the sensor.

The decision: a 60 fps target clears with 60% headroom (96 ÷ 60 = 1.6). Keep the target at least 25% under the estimate and this link covers targets up to 76 fps (96 × 0.8 = 76.8). A 120 fps target fails in every packed format on this link — RAW10 lifts the rate only to 300 MB/s ÷ 2.59 MB ≈ 116 fps — so the fix is link-side. Two lanes at 2.5 Gbit/s deliver 500 MB/s ÷ 3.11 MB ≈ 160 fps and hand the cap back to the sensor's 120; four lanes at 1.5 Gbit/s deliver 600 MB/s ÷ 3.11 MB ≈ 192 fps with the same result.

Which cap binds, and what that tells you

Compare the sensor's own byte rate with the usable payload: sensor bytes per second = bytes per frame × native fps. When that product sits well under the payload, the sensor never saturates the link and you will see the same rate on every platform; extra lanes buy nothing. When it sits above, the rate follows the link exactly — halve the payload, halve the rate.

A pocket check: a 5 MP RAW8 sensor (2592 × 1944 = 5.04 MB per frame) at 120 fps pushes 5.04 MB × 120 = 604 MB/s. Four lanes at 1.5 Gbit/s deliver 600 MB/s, so that sensor runs at its native rate only just, and falls to about 60 fps on two lanes (300 ÷ 5.04 ≈ 59.5). That halving is the behavior people blame on drivers. Once the link has real headroom, the bottleneck moves downstream — planning 2000 fps recording is its own data-rate exercise, covered in the high frame rate data rate plan.

Ranked by what each lever buys:

  1. More lanes. Payload scales exactly with lane count: two to four lanes doubles it. Check first that the receiver port wires four lanes out and that the sensor supports a four-lane mode; the case where a camera probes on two lanes but not four is covered in why the sensor probe fails on 2-lane vs 4-lane mode.
  2. A faster lane rate. 1.5 → 2.5 Gbit/s per lane multiplies payload by 1.67 on the wiring you already have. The ceiling belongs to the processor, not to the camera.
  3. Fewer bits per pixel. RAW12 to RAW10 cuts wire bytes by 16.7% (1.5 → 1.25 B/px) and lifts the link rate by 20% (1.5 ÷ 1.25 = 1.2); RAW8 buys another 33% if your algorithms tolerate the depth loss.
  4. Fewer pixels. Binning, cropping or subsampling shrink bytes per frame in proportion and usually raise the sensor cap too, so both terms of the min() improve.
  5. Tighter blanking. Some sensors let you trim vertical blanking, which recovers a few percent of overhead. Do it last.

If the target rate needs more than four lanes at the processor's ceiling — more than the ~1 GB/s of payload that 4 × 2.5 Gbit/s delivers — or the board simply has no fourth lane routed, move the stream to a host-standard interface and spend the effort elsewhere. Embedded camera interfaces from CSI-2 to GMSL2 lays the options side by side.

The payload numbers, roughly: 1 GigE sustains about 110 MB/s of image data; USB3 delivers about 350–400 MB/s to one camera before you share the port; 10GigE multiplies that by ten. The USB3 per-camera budget math and the GigE Vision frame rate fit carry each budget in detail. Where the host has no CSI-2 receiver at all, a bridge chip works, but the bridge has its own payload budget and quietly becomes the new limit — sizing the CSI-2 to USB data path shows where.

Over USB3, the compact LS-BCM-0003 board camera pairs a 3.1 MP global-shutter sensor with a 120 fps full-resolution rate, and the LS-CMR-0166 area scan camera carries 4000 × 3000 at 30 fps on the same port type.

Board-level cameras3.1 MP USB3 board-level camera, IMX252, 1/1.8" global shutter, 120 fps (LS-BCM-0003)LS-BCM-0003
Sensor format
1/1.8"
Lens mount
C-mount
$690.00View part
Area scan cameras12 MP USB3 area scan camera, IMX226, 1/1.7" rolling shutter, 30 fps, 4000 × 3000 resolution (LS-CMR-0166)LS-CMR-0166
Sensor format
1/1.7"
Interface
USB3
$560.00View part

Where the camera sits a few metres from the host, GigE stretches further than USB3: the MV-CB016-10GM-M-W board camera runs 1.6 MP global-shutter frames over GigE from an M12 mount.

Board-level camerasHikrobot MV-CB016-10GM-M-W 1.6 MP GigE board-level camera, IMX296, Mono, M12 lens mount, WTB GigE portMV-CB016-10GM-M-W
Sensor format
1/2.9"
Lens mount
M12
Interface
GigE
Resolution
Up to 3 MP
$559.00View partBuild a system with it

Checks before you commit

  • Sensor data sheet: native fps at full resolution in the exact format you will stream — the first term of the min().
  • Processor interface documentation: the per-lane rate ceiling and how many lanes each port wires out — the inputs of the second term.
  • Board wiring: which lanes are routed to the connector; a four-lane sensor on a two-lane carrier runs the two-lane math.
  • Data type: the packed bytes per pixel of the format actually negotiated, not the sensor's ADC depth.
  • Margin: target fps at least 25% under the link estimate; the worked example's 96 fps covered targets up to 76 fps.
  • Total data rate: bytes per frame × target fps in MB/s, one number to sanity-check link, memory and storage together.

When the numbers close, pick the camera with the camera finder or start the camera configurator; compact builds live in the board-level cameras and area scan cameras categories.

Where the estimate breaks down

Three gaps turn up between the estimate and the bench. Blanking-heavy modes — high-fps readouts with short active time — can push real overhead past 20%, so measure the first stream; the estimate is the plan and the bench is the proof. Long or low-grade flex assemblies can force the receiver to negotiate a lower lane rate than the processor's ceiling, so keep the flex short and read the negotiated rate back from the driver. And the host can cap what the wire carries: driver buffers and downstream processing throttle the achieved rate below the link limit, which is exactly where the acquisition faster than processing fix picks up. If a capture API reports a frame rate of zero or a nonsense value, the reliable FPS read guide explains what that number really reports.

The same budget thinking runs across the systems topic page. If your two caps sit uncomfortably close to the target, send the sensor-and-carrier combination through the contact page and we will run the numbers with you.

Questions

How much payload does one MIPI CSI-2 lane carry?

A lane clocked at 1.5 Gbit/s moves about 150 MB/s of usable payload after 20% overhead; at 2.5 Gbit/s it moves about 250 MB/s. Multiply by the lane count that is actually wired out. Four lanes at 2.5 Gbit/s therefore deliver roughly 1 GB/s, which is the practical ceiling for a single CSI-2 receiver on mainstream embedded processors.

What is the highest frame rate 4 lanes at 2.5 Gbit/s can carry?

10 Gbit/s raw, about 8 Gbit/s usable, i.e. 1000 MB/s. A RAW12 1080p frame of 3.11 MB passes about 320 times per second; a RAW12 8 MP frame of 12.44 MB passes about 80 times per second. At 1080p the sensor's native rate usually caps you before the link does; at 8 MP the link is the cap.

Does cropping or binning increase the frame rate?

Both caps rise. Fewer pixels shrink bytes per frame, which lifts the link cap in direct proportion, and most sensors also read out cropped or binned arrays faster, which lifts the sensor cap. A half-width crop can therefore more than double the rate on a bandwidth-limited sensor. Test the exact mode: blanking and readout timing differ per mode, so the gain is rarely the clean ratio the pixel count suggests.

Should I plan on 15% or 20% protocol overhead?

Plan on 20%. Field estimates for CSI-2 links span roughly 15–20%, and the spread comes from packet overhead plus the blanking windows a sensor idles through. Large frames with little blanking land near 15%; heavily blanked high-fps modes land near 20% or above. Sizing the link at 20% keeps the estimate conservative, and you recover the difference as measured margin rather than as a surprise.

Why does my camera drop frames when the bandwidth math says it fits?

Usually one of three things: the receiver negotiated a lower lane rate than the platform's ceiling, two cameras share one receiver port and split its lanes, or the driver's buffer chain cannot sustain the calculated rate even though the wire can. Confirm the negotiated lane rate and lane count in the driver log first — that is the most common gap between the estimate and the bench.

How do I find the lane speed my board actually supports?

It is a property of the processor's CSI-2 receiver and the carrier wiring, not of the camera. The processor's interface documentation states the maximum per-lane rate and how many lanes each receiver port wires out; the board's documentation shows which of those lanes are routed to the connector. The camera then negotiates a rate at or below that ceiling when streaming starts.