A depth camera that drops frames on a small embedded board is rarely a broken camera. The stall almost always sits in the chain between the sensor and your application: the cable, the USB controller, the operating system image, or a mismatched SDK build. This guide is for engineers running depth cameras on Arm-based single-board computers and compact hosts, where USB bandwidth, power budgets and platform support are far tighter than on a desktop PC. You will learn how to tell a real stream stall from a misleading drop counter, work through the likely causes in order of probability, and recover the camera with vendor-documented procedures when software fixes are not enough.
First: confirm the stall is real
Start by separating two things that look identical on a graph. Many viewer tools draw a per-second drop counter that counts frames the host never requested, or frames a stream produces that your pipeline ignores. That counter is not a health metric and has sent many debugging sessions down the wrong path.
What matters:
- The sustained frames-per-second of each active stream, read over at least 30 seconds.
- Whether the feed visibly freezes or your application's callback stops firing for hundreds of milliseconds or more.
- Whether the whole host stutters, not just the camera pipeline.
If the stream holds its rated frame rate, for example 30 fps steady, and your application never stalls, there is no frame drop problem to fix. If the feed genuinely sticks once every second or two, continue below. The same discipline applies to acquisition stalls on any camera type; the isolation method in camera acquisition stalls under load: isolate recovery faults transfers directly to depth devices.
Cause 1: USB cable, port and bandwidth
Depth cameras with a color stream plus depth plus optionally an infrared stream can push several hundred megabits per second. Embedded boards often share one USB 3 controller across several ports, and some ports are wired as USB 2 only even when the connector looks identical.
Work through these checks in order:
- Swap in the shortest good-quality USB 3 cable you have, ideally 1 m, shielded. Long or unshielded cables cause exactly the intermittent stalls described in depth camera black image: fix USB bandwidth and power issues.
- Confirm in the system log that the device enumerated at SuperSpeed, roughly 5000 Mbps, not 480 Mbps. A USB 2 link cannot carry depth plus color at full rate, and the host will drop frames silently.
- Move the camera to a different physical port, preferably one on its own root controller, never through a hub.
- Reduce the combined bandwidth: run depth only, or halve the frame rate, and see whether the stalls disappear. If they do, the link was saturated.
Power is part of the same bucket. Some depth cameras draw more than the 900 mA a USB 3 port must supply, especially at startup. On battery-powered or lightly regulated boards, use a powered hub or a supply that meets the camera's documented current draw.
Cause 2: platform, OS and SDK mismatch
Arm-based boards complicate software support. A build compiled for x86 desktop Linux will not run correctly, and even a correct Arm build must match the board support package generation. A common failure pattern: an OS image one major version older than the board support package the SDK was built against, producing stalls that no cable swap can fix.
Check three things as a matched set:
- Architecture: the SDK build must match the board's Arm variant and toolchain.
- OS version: the SDK's supported OS list must include the exact release on your image. If the board support package targets one Ubuntu release and your image is another, reinstall to the documented pairing.
- Camera firmware: the firmware generation must be the one the SDK version documents as compatible. Firmware and SDK versions are paired; an unrelated newer firmware can introduce behavior the SDK does not handle.
Bring all three to the vendor's documented combination before you conclude the hardware is at fault. For boards running several cameras at once, the shared-bus limits in multiple USB depth cameras on Linux: startup troubleshooting add another layer worth checking.
Cause 3: a corrupted calibration table
If cable, power, bandwidth and software versions are all sound and the camera still misbehaves on every host you try, the camera's internal calibration data is the next suspect. Depth cameras store per-unit factory calibration in an internal table; if that table is damaged, the device can produce bad output or fault repeatedly.
Manufacturers document a reset or restore procedure for this, typically in the camera tool: write a fresh calibration table built from the stored factory parameters. Two practical notes:
- This is a different operation from a simple hardware reset. A hardware reset reboots the device; a calibration restore rebuilds stored data.
- In most tools the write control stays inactive until the depth stream is running. If the write option appears unavailable, start the depth stream first, then open the calibration interface. This single step resolves most reports of a greyed-out write button.
Use only the vendor's own tool and documented steps. If the procedure fails on the vendor's supported versions, contact the manufacturer through its support channel before attempting anything else; see our contact page for help choosing a replacement in the meantime.
Cause 4: the host itself is the bottleneck
Sometimes the camera is fine and the board is out of resource. Depth post-processing, point cloud generation and any vision inference compete for the same CPU, memory bandwidth and often the same storage I/O. Watch for:
- Sustained CPU saturation at the moment of each stall.
- Memory pressure or swap activity in the system monitor.
- Thermal throttling on the board's SoC, which cuts clocks in steps and shows up as periodic hitching.
If the host freezes entirely, not just the stream, the board's power supply or cooling is a likely contributor. At that point the fix is host-side: a faster module, better cooling, or offloading capture to a dedicated controller. Where a general-purpose board will not keep up, a machine-vision unit built for the job is the sturdier route. Compact depth and ToF devices such as the MV-DT01WMU ToF sensing camera are designed to deliver depth directly, offloading stereo computation from the host.
- Type
- Depth / ToF camera
Structured-light and projected-pattern cameras behave differently
Not every depth camera streams continuously the same way. Projected structured-light devices capture a pattern pair and compute depth on board or in the SDK, so a hitch in your pipeline may be frame pacing rather than dropped data. The MV-DPS200P-02 projected structured-light 3D camera, for example, handles the pattern projection internally, which reduces host load compared with a fully software-processed stereo pair.
- Type
- Stereo / structured light
If you are evaluating whether the camera model is the problem, test a different depth technology on the same host before replacing anything. If a second camera of a different type runs cleanly with identical cables, ports and SDK versions, the first device or its calibration is implicated. If both stall, the host, its OS image or its USB wiring is the cause.
When to stop debugging and change the architecture
There is a point of diminishing returns. If the board stalls under a workload you cannot reduce, or its board support package lags the camera SDK's supported versions, consider:
- Streaming fewer streams at a lower frame rate and letting the host process serially.
- Choosing a camera with on-board depth computation, so the host receives a finished depth map instead of raw streams.
- Moving the capture to dedicated hardware and sending only results to the embedded board.
For guidance picking a device with on-board processing, the 3D sensors range covers laser profilers, structured-light and ToF cameras, and the board-level cameras category lists compact modules if you would rather build the pipeline yourself. The camera finder filters both by interface and resolution, and the system configurator walks through matching camera, host and cabling step by step.
Prevention checklist
- Use a short, shielded USB 3 cable, 1 to 2 m, directly into a root port.
- Confirm SuperSpeed enumeration in the system log at every deployment.
- Budget the camera's full current draw against the board's supply.
- Keep SDK, camera firmware and OS image on the vendor's documented matched versions.
- Ignore per-second drop counters; monitor sustained frame rate and callback latency instead.
- Start the depth stream before any calibration write, and use only vendor-documented reset procedures.
- Log CPU, memory and temperature alongside frames so the next stall has a timestamped context.
Fix the transport first, versions second, calibration last. That order resolves the overwhelming majority of embedded depth camera stalls without replacing a single part.
Questions
Why does my depth camera viewer show frame drops when the stream looks fine?
Many viewers report a per-second drop counter that counts frames the host did not request or frames dropped by design, such as unused color frames. It is not a measure of stream health. Watch the actual frames-per-second readout and the wall-clock behavior of your application instead. If the stream holds its rated frame rate and your pipeline never stalls, treat the counter as noise.
What USB settings fix frame drops on an embedded board?
Use a short, shielded USB 3 cable of 1 to 2 m, connect directly to a root port rather than through a hub, and confirm the port enumerates at 4800 Mbps or higher in the system log. Then lower the combined bandwidth: reduce resolution or frame rate, or stream depth only. On boards with shared USB bandwidth, move other devices to a separate controller or bus.
When should I reset a depth camera's calibration table?
Only after cable, power, bandwidth and software mismatches are ruled out, and only through the manufacturer's documented procedure. A corrupted calibration table can cause persistent bad depth output or repeated internal faults. Most tools require the depth stream to be running before the write step is enabled, so start the stream first if the write control stays unavailable.
Do embedded boards need special SDK builds for depth cameras?
Yes. Arm-based boards need an SDK build for the Arm architecture, and the SDK version must match the camera firmware generation and the board support package. Check the vendor's compatibility matrix: SDK, firmware and OS version should be a matched set. Mixing a PC-oriented build with an Arm board support package is one of the most common causes of intermittent stalls.

