Today, we’ll review the Raspberry Pi 500+ mechanical keyboard PC using the recently released Raspberry Pi OS “Trixie” based on Debian 13. It’s quite similar to the earlier Raspberry Pi 500 keyboard PC, but comes with more memory (16GB vs 8GB), a 256GB NVMe SSD, and a proper mechanical keyboard with replaceable caps and RGB LED lighting, so we’ll focus on these aspects during our tests, after going through the usual unboxing and teardown process.
Raspberry Pi 500+ unboxing
We received an early prototype of the Raspberry Pi 500+ keyboard PC with a UK layout, white design in a retail package.
The bottom side of the package includes a list of features and confirmation that it’s indeed a UK layout keyboard. Not ideal for Thai users (we usually rely on the US layout), but that was probably the only layout available when Raspberry Pi sent us a sample in mid-September.

The package comes with the mechanical keyboard PC, a spudger tool to open the device, for instance, to replace the SSD, and a keycap puller. There’s nothing else, so you have to bring your own 5V/5A power adapter, mouse, and of course monitor.
All ports can be found on the rear panel. Front left to right: one USB 2.0 port, two USB 3.0 ports, a microSD card slot, a USB-C port for power, two micro HDMI ports, a 40-pin GPIO header covered by a protective rubber cover, and a Gigabit Ethernet port. The Kensington lock slot that was on the earlier Raspberry Pi 500 model is gone.
The underside of the keyboard features a few ventilation holes and five screws that we’ll need to loosen later when tearing down the device.
Raspberry Pi 500+ teardown
Let’s do a teardown now. After removing the five screws, we can slide the spudger tool between the two plastic parts to open the keyboard PC.

Be careful when opening the device since there’s a flat cable between the mainboard and the mechanical keyboard.

We immediately see the 256GB NVMe SSD instead, and a large metal plate to cool the computer. Note that the NVMe drive used in our pre-release sample is physically smaller than the ones found in mass production units, though the capacity is identical.
Let’s check the mainboard in more detail.

and compare it against the board used on the Raspberry Pi 500 model (2024).

It turns out it is the exact same PCB marked “Raspberry Pi 500 R4 (PVT)”, except the Pi 500+ comes with an M.2 socket, and a different (and smaller) connector is used for the mechanical keyboard. The Raspberry Pi RP2040 MCU handling the keyboard was also moved from the green mainboard to the keyboard PCB itself. The PoE section is left unused, pointing to a potential future third version of the Pi 500 with PoE.
Switching from Raspberry Pi OS Bookworm to Trixie
Let’s now reassemble everything and try the Raspberry Pi 500+. We connected an RF dongle for a wireless mouse to the USB 2.0 port, an official 5V/5A Raspberry Pi USB adapter (not provided), and a micro HDMI to HDMI connector to an HDMI display (10.1-inch RPI All-in-One touchscreen display).

Since we received the sample before the Debian 13-based version of Raspberry Pi OS (Trixie) was released, the system boots to the Debian 12 “Bookworm” version, immediately identifiable by its wallpaper.
Since it’s a new installation without modifications, we could likely have upgraded to Raspberry Pi OS Trixie using the command:
|
1 |
sudo apt full-upgrade |
However, Debian developers don’t recommend this method, and Raspberry Pi repeated their advice, so we still did a fresh installation instead. Since we did not want to use a microSD card to do the upgrade, we connected an Ethernet cable to the Pi 500+, rebooted the system, and pressed space to enter the bootloader. We then pressed Shift to enable the net installer, and from there it’s the same process as with Raspberry Pi Imager, except no microSD card is needed, and Raspberry Pi OS Trixie was directly installed on the SSD.
Raspberry Pi 500+ system information, benchmarks, and thermal performance
We are now ready to perform a few more tests. The Raspberry Pi 500 and 500+ rely on the same Broadcom BCM2712 SoC, so the features and performance will be very similar. Let’s check the system information with inxi first:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
aey@raspberrypi:~ $ sudo inxi -Fc0 System: Host: raspberrypi Kernel: 6.12.47+rpt-rpi-2712 arch: aarch64 bits: 64 Desktop: LabWC v: N/A Distro: Debian GNU/Linux 13 (trixie) Machine: Type: ARM System: Raspberry Pi 500 Rev 1.0 details: N/A rev: e04190 serial: 300ecb6f0c92eade CPU: Info: quad core model: N/A variant: cortex-a76 bits: 64 type: MCP cache: L2: 2 MiB Speed (MHz): avg: 2400 min/max: 1500/2400 cores: 1: 2400 2: 2400 3: 2400 4: 2400 Graphics: Device-1: bcm2712-hdmi0 driver: vc4_hdmi v: N/A Device-2: bcm2712-hdmi1 driver: vc4_hdmi v: N/A Display: wayland server: X.Org v: 24.1.6 with: Xwayland v: 24.1.6 compositor: LabWC driver: dri: vc4 gpu: vc4-drm,vc4_crtc,vc4_dpi,vc4_dsi,vc4_firmware_kms,vc4_hdmi,vc4_hvs,vc4_txp,vc4_v3d,vc4_vec resolution: 1280x800~60Hz API: EGL v: 1.5 drivers: swrast,v3d,vc4 platforms: gbm,x11,surfaceless,device API: OpenGL v: 4.5 compat-v: 3.1 vendor: broadcom mesa v: 25.0.7-2+rpt3 renderer: V3D 7.1.10.2 API: Vulkan v: 1.4.309 drivers: v3dv,llvmpipe surfaces: xcb,xlib Info: Tools: api: eglinfo, glxinfo, vulkaninfo wl: kanshi,wlr-randr x11: xdriinfo, xdpyinfo, xprop, xrandr Audio: Device-1: bcm2712-hdmi0 driver: vc4_hdmi Device-2: bcm2712-hdmi1 driver: vc4_hdmi API: ALSA v: k6.12.47+rpt-rpi-2712 status: kernel-api Network: Device-1: Raspberry Pi RP1 PCIe 2.0 South Bridge driver: rp1 IF: wlan0 state: up mac: 2c:cf:67:fd:8b:a9 IF-ID-1: eth0 state: down mac: 2c:cf:67:fd:8b:a8 Bluetooth: Device-1: bcm7271-uart driver: bcm7271_uart Report: hciconfig ID: hci0 state: up address: 2C:CF:67:FD:8B:AA bt-v: 5.0 Device-2: bcm7271-uart driver: ctrl Drives: Local Storage: total: 238.47 GiB used: 7.11 GiB (3.0%) ID-1: /dev/nvme0n1 vendor: Samsung model: MZ9LQ256HBJD-00BVL size: 238.47 GiB Partition: ID-1: / size: 234.17 GiB used: 7.03 GiB (3.0%) fs: ext4 dev: /dev/nvme0n1p2 Swap: ID-1: swap-1 type: zram size: 2 GiB used: 0 KiB (0.0%) dev: /dev/zram0 Sensors: System Temperatures: cpu: 42.1 C mobo: N/A Fan Speeds (rpm): N/A Info: Memory: total: 16 GiB available: 15.83 GiB used: 750.9 MiB (4.6%) igpu: 8 MiB Processes: 223 Uptime: 4m Shell: Sudo inxi: 3.3.38 |
We did a short comparison between Raspberry Pi 500 with Bookworm and Raspberry Pi 500+ with Trixie below:
| Raspberry Pi 500 | Raspberry Pi 500+ | Remarks | |
|---|---|---|---|
| Model Revision | Rev 1.0 (rev: d04190) | Rev 1.0 (rev: e04190) | New revision |
| Kernel Version | 6.6.62+rpt-rpi-2712 | 6.12.47+rpt-rpi-2712 | Updated kernel |
| OS / Distro | Debian GNU/Linux 12 (Bookworm) | Debian GNU/Linux 13 (Trixie) | |
| Desktop Environment | LabWC (Wayland + XWayland 22.1.9) | LabWC (Wayland + XWayland 24.1.6) | New version of compositor |
| CPU | Quad-core Cortex-A76, 1.5–2.4 GHz | Quad-core Cortex-A76, 1.5–2.4 GHz | Same frequency reported |
| CPU Temperature (Idle) | 48.5°C | 42.1°C | 6.4°C cooler |
| Memory (RAM) | 8 GB | 16 GB | Double the memory |
| Storage Device | 32GB microSD card (mmcblk0) | 256GB NVMe SSD (Samsung MZ9LQ256HBJD) | Faster storage device |
| Network (Wi-Fi / BT) | Wi-Fi: RP1 (5 GHz) / BT 5.0 (bcm7271) | Wi-Fi: RP1 / BT 5.0 (bcm7271) | Identical wireless module |
| Bluetooth Version | 3.0 | 5.0 | Differences likely due to a firmware update |
Most information is as expected, except the lower idle temperature (due to firmware/software improvements?) and the different Bluetooth versions reported by the utility.
Let’s run sbc-bench.sh benchmark to find any potential regressions and improvements in performance, and check the thermal performance:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
aey@raspberrypi:~/Downloads/sbc-bench-master $ sudo ./sbc-bench.sh -r Starting to examine hardware/software for review purposes... Average load and/or CPU utilization too high (too much background activity). Waiting... sbc-bench v0.9.72 Installing needed tools: distro packages already installed. Done. Checking cpufreq OPP. Done. Executing tinymembench. Done. Executing RAM latency tester. Done. Executing OpenSSL benchmark. Done. Executing 7-zip benchmark. Done. Throttling test: heating up the device, 5 more minutes to wait. Done. Checking cpufreq OPP again. Done (38 minutes elapsed). Results validation: * Measured clockspeed not lower than advertised max CPU clockspeed * No swapping * Background activity (%system) OK * No throttling # Raspberry Pi 500 Rev 1.0 Tested with sbc-bench v0.9.72 on Mon, 03 Nov 2025 04:42:07 +0000. ### General information: Information courtesy of cpufetch: SoC: Broadcom BCM2712 Technology: 16nm Microarchitecture: Cortex-A76 Max Frequency: 2.400 GHz Cores: 4 cores Features: NEON,SHA1,SHA2,AES,CRC32 The CPU features 8 clusters of same core type: BCM2712, Kernel: aarch64, Userland: arm64 CPU sysfs topology (clusters, cpufreq members, clockspeeds) cpufreq min max CPU cluster policy speed speed core type 0 0 0 1500 2400 Cortex-A76 / r4p1 1 0 0 1500 2400 Cortex-A76 / r4p1 2 0 0 1500 2400 Cortex-A76 / r4p1 3 0 0 1500 2400 Cortex-A76 / r4p1 16214 KB available RAM ### Governors/policies (performance vs. idle consumption): Original governor settings: cpufreq-policy0: ondemand / 1500 MHz (conservative ondemand userspace powersave performance schedutil / 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400) Tuned governor settings: cpufreq-policy0: performance / 2400 MHz Status of performance related policies found below /sys: /sys/module/pcie_aspm/parameters/policy: default [performance] powersave powersupersave ### Clockspeeds (idle vs. heated up): Before at 45.8°C: cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2397 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2382 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu3 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 After at 63.9°C: cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 cpu0-cpu3 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399 ### Performance baseline * cpu0 (Cortex-A76): memcpy: 5927.3 MB/s, memchr: 14705.3 MB/s, memset: 9614.4 MB/s * cpu0 (Cortex-A76): memcpy: 5928.3 MB/s, memchr: 14738.0 MB/s, memset: 9752.4 MB/s * cpu0 (Cortex-A76): memcpy: 5933.8 MB/s, memchr: 14705.4 MB/s, memset: 9727.6 MB/s * cpu0 (Cortex-A76): memcpy: 5933.6 MB/s, memchr: 14712.7 MB/s, memset: 9724.7 MB/s * cpu0 (Cortex-A76): memcpy: 5916.0 MB/s, memchr: 14710.8 MB/s, memset: 9586.4 MB/s * cpu0 (Cortex-A76): memcpy: 5926.8 MB/s, memchr: 14709.6 MB/s, memset: 9709.2 MB/s * cpu0 (Cortex-A76): memcpy: 5917.9 MB/s, memchr: 14713.9 MB/s, memset: 9483.1 MB/s * cpu0 (Cortex-A76): memcpy: 5933.6 MB/s, memchr: 14672.9 MB/s, memset: 9715.3 MB/s * cpu0 (Cortex-A76) 16M latency: 106.5 101.5 100.2 100.7 103.4 109.3 126.8 147.3 * cpu0 (Cortex-A76) 16M latency: 106.4 100.7 100.1 100.8 104.0 108.3 130.6 146.0 * cpu0 (Cortex-A76) 16M latency: 105.2 101.2 99.98 101.1 103.4 107.5 129.1 148.1 * cpu0 (Cortex-A76) 16M latency: 105.3 101.3 100.2 100.7 104.4 107.1 129.3 146.4 * cpu0 (Cortex-A76) 16M latency: 104.4 100.9 100.3 103.8 104.9 108.3 128.0 146.0 * cpu0 (Cortex-A76) 16M latency: 103.7 100.8 99.86 100.6 105.3 106.3 129.2 148.0 * cpu0 (Cortex-A76) 16M latency: 104.6 100.9 100.3 100.7 103.9 107.7 128.0 149.1 * cpu0 (Cortex-A76) 16M latency: 107.4 101.0 100.4 102.3 101.9 109.0 128.9 144.6 * cpu0 (Cortex-A76) 128M latency: 117.2 115.3 116.6 115.8 116.7 115.4 116.5 118.7 * cpu0 (Cortex-A76) 128M latency: 116.8 115.4 116.5 115.9 116.6 115.3 116.5 118.0 * cpu0 (Cortex-A76) 128M latency: 116.9 115.3 116.5 115.9 116.6 115.4 116.5 118.9 * cpu0 (Cortex-A76) 128M latency: 116.9 115.3 116.5 115.8 116.6 115.4 116.5 119.0 * cpu0 (Cortex-A76) 128M latency: 117.1 115.4 116.5 116.0 116.6 115.3 116.5 118.3 * cpu0 (Cortex-A76) 128M latency: 116.9 115.4 116.6 116.0 116.6 115.4 117.2 118.4 * cpu0 (Cortex-A76) 128M latency: 117.2 115.4 116.5 115.8 116.7 115.4 116.6 119.0 * cpu0 (Cortex-A76) 128M latency: 117.2 115.4 116.5 115.8 116.7 115.4 116.5 119.1 * 7-zip MIPS (3 consecutive runs): 11758, 11675, 11794 (11740 avg), single-threaded: 3328 * `aes-256-cbc 561768.08k 1021257.58k 1261860.95k 1335416.15k 1364855.47k 1367496.02k (Cortex-A76)` * `aes-256-cbc 560470.90k 1020305.75k 1262506.92k 1335231.83k 1364817.24k 1367883.78k (Cortex-A76)` * `aes-256-cbc 560321.72k 1020555.82k 1262065.07k 1335387.48k 1364773.55k 1367807.32k (Cortex-A76)` * `aes-256-cbc 562020.86k 1020661.55k 1262365.10k 1335188.82k 1364934.66k 1367785.47k (Cortex-A76)` * `aes-256-cbc 559818.58k 1020444.42k 1262745.77k 1335247.53k 1364871.85k 1367736.32k (Cortex-A76)` * `aes-256-cbc 560465.80k 1020605.18k 1262186.67k 1335354.03k 1364970.15k 1367801.86k (Cortex-A76)` * `aes-256-cbc 562292.05k 1020629.27k 1262430.81k 1335368.36k 1364871.85k 1367845.55k (Cortex-A76)` * `aes-256-cbc 562466.50k 1022220.37k 1262263.21k 1335469.06k 1364961.96k 1367916.54k (Cortex-A76)` ### PCIe and storage devices: * Raspberry RP1 PCIe 2.0 South Bridge: Speed 5GT/s, Width x4, driver in use: rp1, ASPM Disabled * 238.5GB "SAMSUNG MZ9LQ256HBJD-00BVL" SSD as /dev/nvme0: Speed 5GT/s (downgraded), Width x1 (downgraded), 0% worn out, drive temp: 44°C, ASPM Disabled ### Swap configuration: * /dev/zram0: 2G (0K used, zstd, 4 streams, 16K data, 69B compressed, 48K total) ### Software versions: * Debian GNU/Linux 13 (trixie) * Compiler: /usr/bin/gcc (Debian 14.2.0-19) 14.2.0 / aarch64-linux-gnu * OpenSSL 3.5.1, built on 1 Jul 2025 (Library: OpenSSL 3.5.1 1 Jul 2025) * ThreadX: 69471177 / 2025/05/08 15:13:17 ### Kernel info: * `/proc/cmdline: reboot=w coherent_pool=1M 8250.nr_uarts=1 pci=pcie_bus_safe cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0 numa=fake=8 system_heap.max_order=0 smsc95xx.macaddr=2C:CF:67:FD:8B:A8 vc_mem.mem_base=0x3fc00000 vc_mem.mem_size=0x40000000 console=ttyAMA10,115200 console=tty1 root=PARTUUID=391c877a-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=GB` * Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl * Vulnerability Spectre v1: Mitigation; __user pointer sanitization * Vulnerability Spectre v2: Mitigation; CSV2, BHB * Kernel 6.12.47+rpt-rpi-2712 / CONFIG_HZ=250 All known settings adjusted for performance. Device now ready for benchmarking. Once finished stop with [ctrl]-[c] to get info about throttling, frequency cap and too high background activity all potentially invalidating benchmark scores. All changes with storage and PCIe devices as well as suspicious dmesg contents will be reported too. Time fake/real load %cpu %sys %usr %nice %io %irq Temp VCore PMIC DC(V) 04:42:11: 2400/2400MHz 2.52 17% 0% 16% 0% 0% 0% 55.1°C 0.9316V 2.8W 5.13V 04:43:11: 2400/2400MHz 0.92 0% 0% 0% 0% 0% 0% 51.8°C 0.9318V 2.4W 5.13V 04:44:12: 2400/2400MHz 0.34 0% 0% 0% 0% 0% 0% 50.7°C 0.9321V 2.4W 5.13V 04:45:12: 2400/2400MHz 0.12 0% 0% 0% 0% 0% 0% 50.7°C 0.9313V 2.4W 5.13V 04:46:12: 2400/2400MHz 0.04 0% 0% 0% 0% 0% 0% 50.7°C 0.9313V 2.7W 5.13V 04:47:12: 2400/2400MHz 0.01 0% 0% 0% 0% 0% 0% 49.6°C 0.9318V 2.7W 5.13V |
Comparison of results:
| Raspberry Pi 500 | Raspberry Pi 500+ | Delta | |
|---|---|---|---|
| memset | 12,165.9 MB/s | 9,715.3 MB/s | -20.1 % |
| memcpy | 5,513.9 MB/s | 5,933.6 MB/s | +7.6 % |
| 7-zip | 11,050 MIPS | 11,740 MIPS | +6.2 % |
| AES-256 16K | 1,368,140.46k | 1,367,916.54k | -0.016 % |
| Max CPU temperature | 69.4°C | 63.9°C | -5.5°C |
Apart from memset, which is quite lower on the Pi 500+ (is that because of the 16GB of RAM?), the results are slightly better or identical (AES) compared to the Pi 500, and the CPU temperature is lower, potentially because of firmware/software improvements since last year, as the hardware design looks to be mostly the same. The main benefit of the Pi 500+ will be for multitasking since it comes with twice the RAM capacity.
Another major change is the M.2 NVMe SSD, so let’s test the built-in SSD with iozone3:
|
1 2 3 4 5 6 7 8 9 10 11 |
aey@raspberrypi:~ $ sudo iozone -e -I -a -s 1000M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 1024000 4 137003 153102 167724 168136 46708 151560 1024000 16 263371 288841 306683 300485 117276 268907 1024000 512 409554 411300 421177 421151 368722 381865 1024000 1024 413677 390468 404197 400236 364532 412446 1024000 16384 420869 421504 441158 379415 439397 422009 iozone test complete. |
At about 440 MB/s reads and 420 MB/s writes, it works well, although that means the Raspberry Pi 500+ keyboard PC still defaults to PCIe Gen2. Let’s switch to PCIe Gen3 mode by adding the following line to /boot/firmware/config.txt before the [cm4] section:
|
1 |
dtparam=pciex1_gen=3 |
Let’s see if we’ve effectively doubled the data rate:
|
1 2 3 4 5 6 7 8 9 10 |
aey@raspberrypi:~ $ sudo iozone -e -I -a -s 1000M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 1024000 4 167192 201144 206618 206371 50468 189776 1024000 16 382634 427520 456766 456837 128289 423127 1024000 512 763247 773155 795606 794754 680925 768180 1024000 1024 776036 781711 806495 806509 732801 779148 1024000 16384 812588 814601 865952 866313 859177 697534 iozone test complete. |
865MB/s sequential reads and 812MB/s sequential writes are about as expected. In any case, the most important for the OS are the faster random I/Os from the SSD, which may be why Raspberry Pi still keeps PCIe Gen2 as the default.
We also browsed the web, checked email, played YouTube videos with the Raspberry Pi 500+, and everything is rather snappy for a low-end computer system.
Testing Raspberry Pi 500+’s mechanical keyboard and RGB lighting
Besides the SSD and 16GB of RAM, the most important change in the Raspberry Pi 500+ is its mechanical keyboard. The company offers various layouts, but our review sample features an 85-key UK layout using Gateron KS-33 Blue low-profile Clicky switches.
These switch stems use a cross-shaped format that is compatible with the Cherry MX standard or most keycaps available on the market. However, avoid using overly tall profiles, such as XDA, OEM, or SA, as they may hit the edges or produce excessive noise. DSA or Cherry Profile keycaps are recommended. The provided keycap puller allows the user to easily remove keycaps to change the layout or replace the keycaps.
RGB lights control
The Raspberry Pi 500+ features RGB lights controlled via the Vial QMK firmware. It includes basic lights enabled by default, such as the Power button LED (red/green based on the device’s power status), a rainbow boot animation (which can be disabled), and the Caps Lock indicator. It also comes with 7 preset backlight modes, and the user can press the Fn + F4 shortcut to cycle between them.
| Mode | Name | Remarks |
|---|---|---|
| 0 | Off | All lights off, except Power button and Caps Lock |
| 1 | Solid White | |
| 2 | Solid Color | Single color adjustable with Fn + F3 |
| 3 | Gradient Left Right | Rainbow colors from left to right |
| 4 | Cycle Pinwheel | Rainbow colors moving in a spinning pinwheel |
| 5 | Typing Heatmap | Frequently used keys glow more red |
| 6 | Solid Reactive | Keys light up when pressed, color adjustable |
Other lighting control shortcuts
- Change color – Press Fn + F3 to cycle forward through the color set (16 colors total), Fn + Shift + F3 to cycle backward
- Adjust brightness: Press Fn + F5 to decrease brightness, press Fn + Shift + F6 to increase brightness
Alternatively, pressing Fn + Shift + F5 will increase the brightness, while Fn + Shift + F6 will decrease it.
If you want to hear the sound of the keyboard while typing, you can watch the video below. The keyboard is in Cycle Pinwheel mode in the video.
rpi-keyboard-config utility
For more flexibility, you can also use the rpi-keyboard-config command-line utility. The first thing we had to do was to upgrade the firmware to prevent an “old firmware” error:
|
1 |
sudo rpi-keyboard-fw-update |
Let’s run the rpi-keyboard-config without parameters to see all options:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
aey@raspberrypi:~ $ rpi-keyboard-config usage: rpi-keyboard-config [-h] {info,unlock,lock,reset-keymap,reset-presets,get-version,help,leds,led,hue,brightness,effect,list-effects,preset,game,random-leds,list-keycodes,key} ... Raspberry Pi Keyboard Config CLI positional arguments: {info,unlock,lock,reset-keymap,reset-presets,get-version,help,leds,led,hue,brightness,effect,list-effects,preset,game,random-leds,list-keycodes,key} Available commands info Show keyboard information unlock Unlock the keyboard lock Lock the keyboard reset-keymap Reset the keymap reset-presets Reset the presets and direct LEDs get-version Get the version of the keyboard help Show help message (same as -h) leds Commands for all LEDs led Commands for individual LEDs hue Get or set the hue of the keyboard brightness Get or set the brightness of the keyboard effect Get current effect or set RGB effects list-effects List all supported RGB effects preset Commands for RGB presets game Run a game random-leds Randomly test LEDs list-keycodes List all available QMK keycodes key Commands for key keycodes options: -h, --help show this help message and exit |
The info command shows the following information about the keyboard:
|
1 2 3 4 5 6 7 8 9 |
aey@raspberrypi:~ $ rpi-keyboard-config info Keyboard Model: PI500PLUS Keyboard Variant: ISO Uptime: 56 seconds Raspberry Pi Keyboard Firmware Version: 1.2.0 Keyboard unlock keys: Row: 0, Col: 0 -> Keycode on layer 0: KC_ESCAPE Row: 2, Col: 14 -> Keycode on layer 0: KC_ENTER Keyboard is locked. |
The utility gives access to a much longer list of RGB lighting effects:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
aey@raspberrypi:~ $ rpi-keyboard-config list-effects Supported RGB Effects: ID 0: OFF ID 1: Direct ID 2: Solid Color ID 3: Alphas Mods ID 4: Gradient Up Down ID 5: Gradient Left Right ID 6: Breathing ID 7: Band Sat ID 8: Band Val ID 9: Band Pinwheel Sat ID 10: Band Pinwheel Val ID 11: Band Spiral Sat ID 12: Band Spiral Val ID 13: Cycle All ID 14: Cycle Left Right ID 15: Cycle Up Down ID 16: Rainbow Moving Chevron ID 17: Cycle Out In ID 18: Cycle Out In Dual ID 19: Cycle Pinwheel ID 20: Cycle Spiral ID 21: Dual Beacon ID 22: Rainbow Beacon ID 23: Rainbow Pinwheels ID 24: Raindrops ID 25: Jellybean Raindrops ID 26: Hue Breathing ID 27: Hue Pendulum ID 28: Hue Wave ID 29: Typing Heatmap ID 30: Digital Rain ID 31: Solid Reactive Simple ID 32: Solid Reactive ID 33: Solid Reactive Wide ID 34: Solid Reactive Multiwide ID 35: Solid Reactive Cross ID 36: Solid Reactive Multicross ID 37: Solid Reactive Nexus ID 38: Solid Reactive Multinexus ID 39: Splash ID 40: Multisplash ID 41: Solid Splash ID 42: Solid Multisplash ID 43: Pixel Rain ID 44: Pixel Fractal ID 65535: (no name) Total effects supported: 46 You can use either the ID number or any of the names listed above. |
We tried the last effect (44: Pixel Fractal) with the following command:
|
1 2 3 4 5 6 |
aey@raspberrypi:~ $ rpi-keyboard-config effect 44 Effect set successfully: Effect: Pixel Fractal (ID 44) Speed: 128 Sat: 255 Hue not fixed |
We can see some parameters with default values, but they can also be modified as needed, so the utility allows for maximum flexibility:
|
1 2 3 4 5 6 7 8 9 10 11 |
aey@raspberrypi:~ $ rpi-keyboard-config effect 44 --help usage: rpi-keyboard-config effect [-h] [-u HUE] [-s SAT] [-r SPEED] [effect] positional arguments: effect Effect ID (integer) or name (solid, pinwheel, heatmap, etc.). If not provided, shows current effect. options: -h, --help show this help message and exit -u, --hue HUE Hue (0-255). If not provided, hue is set by the keyboard. -s, --sat SAT Saturation (0-255). Default: 255 -r, --speed SPEED Effect speed (0-255). Default: 128 |
Let’s try other commands, for instance, to set the brightness to 80%:
|
1 2 |
aey@raspberrypi:~ $ rpi-keyboard-config brightness 80 Brightness set to 80 (0-255) |
Key Remapping is also possible. We can list all 575! key codes:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
rpi-keyboard-config list-keycodes All Available QMK Keycodes: KC_NO = 0x0000 ( 0) KC_TRANSPARENT = 0x0001 ( 1) KC_A = 0x0004 ( 4) KC_B = 0x0005 ( 5) KC_C = 0x0006 ( 6) KC_D = 0x0007 ( 7) KC_E = 0x0008 ( 8) KC_F = 0x0009 ( 9) ... QK_USER_27 = 0x7E5B (32347) QK_USER_28 = 0x7E5C (32348) QK_USER_29 = 0x7E5D (32349) QK_USER_30 = 0x7E5E (32350) QK_USER_31 = 0x7E5F (32351) Total: 575 keycodes |
and configure a specific key as follows:
|
1 |
rpi-keyboard-config key set <row> <col> <keycode> |
For example, we can reconfigure the Enter key (40) on row 4 and column 1:
|
1 2 3 4 5 |
rpi-keyboard-config key set 4 1 40 Key at row 4, col 1, layer 0 set successfully: Input: 40 Keycode: 40 (0x0028) QMK Name: KC_ENTER |
This will map the CapsLock key to the Enter key. If you don’t like that, you could type another command like the one above with the CapsLock key (57), or reset the keyboard to default:
|
1 2 |
aey@raspberrypi:~ $ sudo rpi-keyboard-config reset-keymap Keyboard keymap reset |
Check out the advanced software config section of the Raspberry Pi 500+ documentation for additional details.
Conclusion
The Raspberry Pi 500+ is an upgraded version of the Raspberry Pi 500 keyboard PC, featuring a mechanical keyboard with RGB lighting, a 256GB NVMe SSD, and 16GB RAM. Other features and benchmark results are nearly identical, but in practice, users will notice a performance boost, especially when multitasking, thanks to the faster SSD and additional memory.
The most noticeable difference for a casual user will be the mechanical keyboard with RGB lighting. This allows the user to change keycaps to update the layout of the keyboard, and RGB lighting is customizable through the function, or even more through the rpi-keyboard-config command line utility. We’re just a bit surprised there’s no graphical utility with the same set of features since it’s pretty common for mechanical keyboards.
The most controversial part of the Pi 500+ mechanical keyboard PC is its price. At $200, it’s the most expensive Raspberry Pi hardware so far, and we think the mechanical keyboard may be a large part of the relatively high price, as similar mechanical keyboard often sells in the $100 range. Suthinee reviewed a few on CNX Software Thailand, such as the Lofree Flow and THIRDREALITY Smart Mechanical Keyboard MK1 (sorry, Thai language only), and the price varies depending on the type of switch used. The Raspberry Pi 500+ also requires somewhat unusual accessories like a micro HDMI to HDMI cable and a 5V/5A power adapter, which add to the cost. That’s probably why the company also sells a full kit with power supply, a mouse, a micro HDMI to HDMI cable, and other accessories for $220.
CNXSoft: This article is a translation – with some additional insights – of the review on CNX Software Thailand by Suthinee Kerdkaew.

Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress. We also use affiliate links in articles to earn commissions if you make a purchase after clicking on those links.














Huge annoyance of the whole 400/500/500+ series is lack of a built in pointing device or a usable accessory clip-on one. That means you have to use something like a desktop mouse, and that means you need a desk or table. You can’t really use the pi as a laptop replacement. It’s better to get a regular pi board and an external keyboard/mouse combo.
I actually use a 400 that way (external keyboard) where at least I didn’t pay extra for the cruddy chiclet keyboard built into the 400. But the 500e mechanical keyboard is expensive, and the regular 500 doesn’t have the nvme slot. Pointy haired marketing has arrived at Rpi Ltd and I don’t like it.
I wonder if moving the RP2040 from the mainboard to the keyboard points to the mechanical keyboard being sold as a separate item potentially? The RP2040 could then handle USB duties – is there any indication of uninstalled components on the keyboard PCB?
Now they just need to release a laptop. Im sure that a lot of their users would love that as an official option instead from third party or having to build yourself
You can install Windows 11 on it and it runs really well from the NVMe. Wi-Fi still doesn’t work nor does multi-display, but using Word and writing documents is surprisingly usable.