Independent developer project · not affiliated with, endorsed by, or sponsored by BrainChip, Inc.

Install AKD1500 on Raspberry Pi 5 — the path that actually works

Reproduced twice: August 2026 and the full September rebuild.

OUR OBSERVATIONLast verified: 2026-09-27 · Build 1.9.37Pi 5 · Bookworm · kernel 6.12 · akida 2.19.3 · BC.A1.003.009
Quick reference. The long path with checkpoints: chapter 04, chapter 05, chapter 06, chapter 07 of the guide.

0. OS

Use Raspberry Pi OS Bookworm 64-bit, not Trixie, for the Akida 2.19.3 / Python 3.11 stack reproduced here. Test the camera before anything else.

vcgencmd version
python3 -c "from picamera2 import Picamera2; print(Picamera2.global_camera_info())"
Expected: Firmware output and a camera list containing `imx708`. If `vcgencmd` fails, stop: fix the firmware/SD-card layer first.

1. System packages

sudo apt update && sudo apt full-upgrade -y
sudo apt install -y git python3-venv python3-pip python3-picamera2 python3-opencv dkms
sudo reboot
Expected: Clean reboot; Picamera2 still imports from the system packages.

2. PCIe driver — two patches on kernel 6.12

The public Brainchip-Inc/akida_dw_edma installer rejects this kernel. setup_akida_treiber.sh removes BUILD_EXCLUSIVE_KERNEL from dkms.conf, replaces the Makefile abort above 6.9 with the 6.9 branch, installs through DKMS and registers the module in /etc/modules-load.d/akida-pcie.conf.

bash setup_akida_treiber.sh
lspci | grep -i -c brainchip
lsmod | grep akida
ls -l /dev/akd1500_*
Expected: Card count matches hardware; module loaded; one `/dev/akd1500_N` node per card.
Boundary: driver repo/install.sh = official baseline. The two 6.12 patches = our reproduced workaround.

3. Runtime environment — no TensorFlow

python3 -m venv ~/akida-env --system-site-packages
source ~/akida-env/bin/activate
pip install --upgrade pip
pip install akida==2.19.3
pip install "numpy<2" opencv-python pyserial
python3 -c "import akida,cv2,numpy; from picamera2 import Picamera2; print(akida.devices(), numpy.__version__)"
Expected: AKD1500 devices plus numpy 1.26.x.

Why numpy<2: numpy 2 caused simplejpeg: numpy.dtype size changed and broke the camera path. Do not install tensorflow/cnn2snn in this environment.

4. Training environment

bash setup_m3_train.sh
~/m3-train-env/bin/python -c "import numpy,cv2,tensorflow,cnn2snn,akida; print('train-env ok', numpy.__version__)"
Expected: numpy 2.1.3 with tensorflow 2.19.0, tf_keras 2.19.0, cnn2snn 2.19.3 and akida 2.19.3.

The server calls training as a subprocess and loads the resulting .fbz itself.

5. Run

python3 tools/run_web.py --synthetisch --port 8080
Expected: Synthetic UI on port 8080; footer build string matches the code you launched.
sudo cp vorsa.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now vorsa
Expected: Hardware service running; UI build string matches deployment.

6. Transfer the project

git clone https://github.com/<org>/vorsa-inspect ~/vorsa-m3   # once public; until then: scp of the project folder
chmod +x ~/vorsa-m3/start.sh

What start.sh sets — VORSA_BAND=relais (12 V relay on GPIO 18; sim runs the belt in simulation, echt = L298N driver, VORSA_BAND_PIN changes the pin) and VORSA_ARM=uno (RAMPS/Arduino on /dev/ttyACM0; VORSA_ARM_PORT changes the port; VORSA_ARM_URL=http://<pi4>:8000 uses an external arm server instead). Without belt and arm, comment both lines out.

Service file — edit User= and the two /home/<user>/vorsa-m3 paths in vorsa.service before copying it.

PCIe reset button without password (sudo visudo):

<user> ALL=(root) NOPASSWD: /usr/bin/tee /sys/bus/pci/devices/*/remove, /usr/bin/tee /sys/bus/pci/rescan
Expected: the card tiles in the UI offer a reset button; a DMA timeout on one card is followed by a remove/rescan and a re-probe (probed (akd1500_N) in dmesg).
Kernel update = hardware event. Rebuild/reverify the driver after every kernel change.