<!--order=4-->


<h1>Khadas VIM3</h1>
<p>The Khadas VIM3 is an ARM single-board computer that occupies a different space than the Raspberry Pi. It uses the Amlogic A311D SoC — a big.LITTLE design with both Cortex-A73 and Cortex-A53 cores, plus an integrated NPU (neural processing unit) for AI inference workloads. It's more powerful than a Pi 5 in some areas, less convenient in others, and the ecosystem is smaller. Worth knowing about if your project needs more compute or specific hardware features the Pi doesn't have.</p>

<h2>VIM3 vs. Raspberry Pi 5 — Quick Comparison</h2>

<table>
  <thead><tr><th>Feature</th><th>Khadas VIM3</th><th>Raspberry Pi 5</th><th>Notes</th></tr></thead>
  <tbody>
    <tr><td>CPU cores</td><td>4× A73 + 2× A53 (big.LITTLE)</td><td>4× A76 (homogeneous)</td><td>VIM3's A73 cores are older but more numerous; Pi 5's A76 is faster per-core</td></tr>
    <tr><td>NPU</td><td>5 TOPS (built-in)</td><td>None</td><td>VIM3 advantage for ML inference at the edge</td></tr>
    <tr><td>Storage</td><td>eMMC (16/32/64GB onboard) + M.2 PCIe</td><td>microSD + M.2 HAT (add-on)</td><td>VIM3 has faster built-in eMMC; Pi 5 needs HAT for M.2</td></tr>
    <tr><td>RAM</td><td>2GB or 4GB LPDDR4</td><td>2GB, 4GB, or 8GB LPDDR4X</td><td>Pi 5 available in 8GB; VIM3 max is 4GB</td></tr>
    <tr><td>USB</td><td>1× USB 3.0, 1× USB 2.0, 1× USB-C OTG</td><td>2× USB 3.0, 2× USB 2.0</td><td>Pi 5 has more USB ports</td></tr>
    <tr><td>GPIO</td><td>40-pin header (different pinout from Pi)</td><td>40-pin header (standard Pi pinout)</td><td>VIM3 header is NOT Pi-compatible — HATs won't work</td></tr>
    <tr><td>Ethernet</td><td>1Gbps</td><td>1Gbps</td><td>Equivalent</td></tr>
    <tr><td>WiFi/BT</td><td>802.11ac + BT 5.0 (built-in)</td><td>802.11ac + BT 5.0 (built-in)</td><td>Equivalent</td></tr>
    <tr><td>OS ecosystem</td><td>Android, Ubuntu (Fenix), mainline limited</td><td>Raspberry Pi OS (Debian), Ubuntu, extensive</td><td>Pi 5 ecosystem is vastly larger and better documented</td></tr>
    <tr><td>Community</td><td>Smaller, Khadas forums + Discord</td><td>Enormous, extensive documentation</td><td>Pi wins easily for troubleshooting support</td></tr>
  </tbody>
</table>

<h2>The NPU — Where VIM3 Stands Out</h2>
<p>The Amlogic A311D's 5 TOPS neural processing unit is the VIM3's primary differentiator. For running machine learning inference models at the edge — object detection, image classification, audio processing — the NPU offloads the compute from the CPU and runs it at much lower power consumption:</p>
<pre>
Typical NPU use cases on VIM3:
  - YOLO object detection on a camera feed (real-time at 30fps)
  - Wake word detection for voice interfaces
  - Anomaly detection from sensor data
  - Image classification for field monitoring (plant disease, etc.)

Not suitable for NPU:
  - Training models (that's GPU territory)
  - Large language models
  - General-purpose compute
</pre>
<p>Khadas provides their KSNN SDK and documentation for deploying models to the A311D NPU. TensorFlow Lite and ONNX models can be converted to run on it. The toolchain is workable but less polished than NVIDIA Jetson's ecosystem.</p>

<h2>OS Options</h2>

<table>
  <thead><tr><th>OS</th><th>Status</th><th>Notes</th></tr></thead>
  <tbody>
    <tr><td>Khadas Ubuntu (Fenix)</td><td>Best supported</td><td>Based on Ubuntu 22.04/24.04 LTS; built with Khadas's Fenix build system; includes NPU drivers</td></tr>
    <tr><td>Android</td><td>Official support</td><td>Khadas provides Android images; useful for media center use</td></tr>
    <tr><td>Armbian</td><td>Community supported</td><td>Good general-purpose Debian/Ubuntu alternative; less NPU support</td></tr>
    <tr><td>Mainline Linux</td><td>Partial</td><td>A311D mainline support is improving but not complete as of 2025; some features missing</td></tr>
  </tbody>
</table>

<h2>Getting Started</h2>
<pre>
# Flash Khadas Ubuntu to eMMC using USB Burning Tool (Windows) or
# flash to SD card using dd / Balena Etcher as a starting point.

# Default credentials on Khadas Ubuntu images:
Username: khadas
Password: khadas
Change immediately: $ passwd

# The VIM3 boots from eMMC by default; hold the function button at power-on
# to force SD card boot.

# Update:
$ sudo apt update && sudo apt full-upgrade -y

# Check SoC temp (VIM3 runs warm)
$ cat /sys/class/thermal/thermal_zone0/temp
# Divide by 1000 for Celsius. Above 80°C = needs better cooling.

# Khadas provides a fan controller — make sure it's running:
$ systemctl status fan-control
</pre>

<h2>Storage Performance</h2>
<pre>
# eMMC is faster than microSD — useful baseline benchmark:
$ sudo dd if=/dev/zero of=/tmp/test bs=1M count=512 oflag=direct
# eMMC: typically 150-250 MB/s write
# microSD: typically 20-40 MB/s write (class 10)
# NVMe via M.2: 400-1000+ MB/s

# The VIM3 Pro has M.2 M-key for NVMe — a significant upgrade for
# database or data logging applications.
</pre>

<h2>When to Choose VIM3 Over Pi 5</h2>
<ul>
  <li><strong>NPU workloads</strong> — on-device ML inference where you need to avoid cloud APIs</li>
  <li><strong>Built-in eMMC</strong> — more reliable storage than microSD in high-write environments</li>
  <li><strong>Android requirement</strong> — Khadas has solid Android support; Pi 5 does not</li>
  <li><strong>High sustained compute</strong> — the big.LITTLE topology handles mixed-priority workloads differently</li>
</ul>

<h2>When to Stick with Pi 5</h2>
<ul>
  <li>You need HAT compatibility (Pi HATs don't work on VIM3)</li>
  <li>Community support and documentation matter — Pi's ecosystem is orders of magnitude larger</li>
  <li>You need 8GB RAM</li>
  <li>You're new to SBCs — the Pi setup experience is much smoother</li>
</ul>

<h2>The VIM3 in a Pi and LoRa Project</h2>
<p>The VIM3 does not need to replace the Raspberry Pi 5. It can fill a different role in the same project: a capable Linux computer with fast onboard storage, built-in networking, and an NPU for local processing.</p>
<table>
  <thead><tr><th>Board</th><th>Natural role</th><th>Why it fits</th></tr></thead>
  <tbody>
    <tr><td>Raspberry Pi Pico + LoRa HAT</td><td>Battery field node</td><td>Small, inexpensive, and easy to connect to sensors</td></tr>
    <tr><td>Raspberry Pi 5</td><td>General gateway and operations machine</td><td>Large ecosystem, straightforward Debian setup, and excellent documentation</td></tr>
    <tr><td>Khadas VIM3</td><td>Edge-processing gateway or specialized base station</td><td>eMMC storage, built-in networking, and optional NPU workloads</td></tr>
  </tbody>
</table>
<p>A useful arrangement is to leave the Pico with the radio and put the heavier work on the VIM3 or Pi 5. The small board handles Meshtastic packets and sensors; the Linux board stores data, runs dashboards, performs local analysis, and provides remote access.</p>

<h2>Connecting a VIM3 to a Meshtastic Node</h2>
<p>Because the VIM3 header does not use the standard Raspberry Pi HAT pinout, do not assume that a Raspberry Pi LoRa HAT can be moved directly onto it. The least surprising approach is a Meshtastic-capable Pico and Waveshare radio connected to the VIM3 by USB:</p>
<pre>
Field Pico + SX1262
    │
    └── USB serial
          │
       Khadas VIM3
          ├── Meshtastic Python CLI / library
          ├── SQLite or other local storage
          ├── Optional MQTT broker
          └── Remote access over Ethernet or WiFi
</pre>
<pre>
# On the VIM3, use a virtual environment just as on the Pi 5:
$ sudo apt update
$ sudo apt install python3-venv -y
$ python3 -m venv ~/meshtastic-env
$ . ~/meshtastic-env/bin/activate
$ python -m pip install --upgrade pip meshtastic

# Find the USB node
$ ls -l /dev/serial/by-id/

# Inspect it before running a logger
$ meshtastic --port /dev/serial/by-id/usb-... --info
</pre>
<p>This arrangement keeps the radio close to the antenna and lets the VIM3 stay indoors or in a protected enclosure. Use the stable <code>/dev/serial/by-id/</code> path in long-running services rather than assuming the device will always be <code>/dev/ttyACM0</code>.</p>

<h2>What the VIM3 Adds at the Edge</h2>
<ul>
  <li><strong>Local storage:</strong> eMMC is a better starting point than a frequently-written microSD card for logs and databases.</li>
  <li><strong>Local processing:</strong> preprocess sensor or camera data before sending a small summary over the mesh.</li>
  <li><strong>NPU experiments:</strong> run supported inference workloads locally without sending raw images or audio to a cloud service.</li>
  <li><strong>Network services:</strong> host a local dashboard, MQTT broker, or maintenance endpoint over Ethernet or WiFi.</li>
  <li><strong>Separation of duties:</strong> keep radio timing and battery work on the Pico while the VIM3 handles storage and analysis.</li>
</ul>
<p>Do not send camera frames, large logs, or model output over LoRa by default. Send a compact event, measurement, or alert and keep the larger data on the VIM3 or another network-connected machine.</p>

<h2>VIM3 Deployment Checks</h2>
<pre>
Before leaving a VIM3 base station unattended:
  - confirm the exact OS image and kernel in the deployment notes
  - verify the fan or heatsink is working under sustained load
  - test the eMMC or SSD and leave free space for logs
  - use a stable USB serial path for the Pico radio
  - check that the power supply stays stable under CPU and USB load
  - test recovery after a power cut
  - record the VIM3 MAC address and hostname
  - keep a copy of the Meshtastic configuration and gateway code
</pre>
<p>The VIM3 is especially attractive when a project needs more than a tiny field node but does not need a full server. Its main tradeoff is that board-specific setup and troubleshooting require more careful documentation than the Raspberry Pi ecosystem.</p>

<h2>References</h2>
<ul>
  <li><a href="https://docs.khadas.com/products/sbc/vim3/start" target="_blank" rel="noopener">Khadas VIM3 Documentation ↗</a></li>
  <li><a href="https://github.com/khadas/fenix" target="_blank" rel="noopener">Khadas Fenix build system (GitHub) ↗</a></li>
  <li><a href="https://www.armbian.com/khadas-vim3/" target="_blank" rel="noopener">Armbian for VIM3 ↗</a></li>
</ul>
