The TB-RK1808M0 is a Mini-PCIe AI compute card — plug it into a host and the NPU does the inference while your PC stays in control. This note walks the host-side bring-up and a MobileNet_v1 demo. Translated and annotated from jax.fang, Rockchip / Toybrick community.
The TB-RK1808M0 is a Mini-PCIe form-factor card carrying the Rockchip RK1808 (a dedicated 3.0 TOPS NPU). You mount it on a host PC through an adapter and run inference on the card while your PC feeds it data and collects results through a proxy. That makes it a neat "add an NPU to any box" building block — and the same split (host + NPU endpoint) is the mental model behind the modern RK3588 / RK3576 NPU too.
rknnlite inside RKNN Toolkit2 — but the bring-up discipline (confirm the device, update firmware, then run a known-good model) is identical. See Solutions → Edge AI.
lspci (look for ASM1042A) and lsusb (look for 2207:1108).npu_transfer_proxy.| Item | Requirement |
|---|---|
| Host PC | Ubuntu 18.04 |
| Toolkit | RKNN-Toolkit v1.4.0 (install steps: community thread tid=964) |
| Host-side helper | npu_transfer_proxy for the PC side |
| Card firmware | Latest firmware image (flashing steps: community wiki "Quick Start") |
The npu_transfer_proxy is the user-space bridge that lets a Python script on the PC talk to the NPU endpoint on the card. Install it on the host (separate from the firmware that lives on the card).
Set the card's DIP switch to the PCIe x1 position (switch up), then assemble:
After reboot, run lspci and look for a device reporting ASM1042A (the ASMedia PCIe bridge the adapter exposes):
lspci
# look for a line mentioning ASM1042A
Then run lsusb and look for the Rockchip NPU vendor/product ID 2207:1108:
lsusb
# look for a line: 2207:1108
If ASM1042A / 2207:1108 do not appear, check two things first: the card firmware is the latest version, and the DIP switch is actually in PCIe x1 mode. If you are already on the latest firmware, you can skip the firmware-update steps below.
If the card needs a firmware bump, tether it to the host over USB-Ethernet and let the card grab updates from the network.
toybrick / toybrick).ip a
# note the USB Ethernet interface name (e.g. eth1) — it varies by environment
$1 with the interface name from the previous step:sudo su
echo '' > /var/lib/dhcp/dhclient.leases
echo 'timeout 2147483647;' > /etc/dhcp/dhclient-toybrick.conf
sudo ip link set $1 up
sudo dhclient -cf /etc/dhcp/dhclient-toybrick.conf -nw -e DHCLIENT_IGNORE_GATEWAY=yes $1
ip a
sudo apt update -y
sudo apt upgrade -y
sudo reboot
This is the payoff: a classification model running entirely on the RK1808 NPU, driven from the PC.
# Fetch the demo package
wget http://repo.rock-chips.com/rk1808/mobilenet_v1.tar.gz
tar xvf mobilenet_v1.tar.gz
cd mobilenet_v1/
# Fetch the host-side proxy, make it executable, run it in the background
wget http://repo.rock-chips.com/rk1808/npu_transfer_proxy_20200605/linux-x86_64/npu_transfer_proxy
chmod 755 npu_transfer_proxy
./npu_transfer_proxy &
# Run the demo
python test.py
test.py loads MobileNet_v1 onto the card through the proxy, hands it an input, and prints the classification result. If the proxy and the card are both up, the script runs to completion and the inference result prints to the console.
rknn.load_rknn(...) + rknnlite on the board itself — no separate PCIe/USB compute card, no npu_transfer_proxy, no USB-Ethernet firmware tether. The model flow (quantize → load → inference) is the same one we covered in "Quantizing a model for the Rockchip NPU (MNIST RKNN walkthrough)". If you are starting fresh today, target RKNN Toolkit2; treat this RK1808 note as the historical reference for the host-driven pattern.
The card also supports a USB 3.0 variant: instead of the Mini-PCIe-to-PCIe adapter, use a Mini-PCIe-to-USB3.0 adapter and set the DIP switch to USB 3.0 mode. The bring-up then follows the TB-RK1808S0 guide (the USB-attached sibling card) — same npu_transfer_proxy + test.py demo, different physical transport.
The TB-RK1808M0 turns any Ubuntu PC into an NPU-equipped box: set the mode, confirm the device with lspci/lsusb, update firmware over USB-Ethernet if needed, then run a model through npu_transfer_proxy. The host-driven NPU pattern here is the ancestor of the on-chip RK35xx NPU workflow — and the bring-up discipline carries straight over.