Pironman 5 Max, A fancy Raspberry Pi 5 Tower PC enclosure with dual M.2

4 months ago 2

SunFounder has sent me a review sample of the Pironman 5 Max Tower PC case for the Raspberry Pi 5 SBC. We had already reviewed the Pironman 5 last year, but the new Max model has various improvements, including a sleeker design made of black aluminum and semi-transparent black acrylic panels, a dual NVMe PiP expansion board for two M.2 NVMe SSDs (optionally in RAID 0/1 configuration), or one NVMe SSD and one AI accelerator module, a Tap-to-Wake feature for the OLED information display, and programmable RGB LEDs for the two fans.

So the Pironman 5 Max deserves another review of its own.  I’ll be doing an unboxing, going through the assembly instructions and software installation, before testing the new features, and finally, the cooling efficiency of the solution.

Pironman 5 Max Tower PC review

Pironman 5 Max unboxing

I received the Pironman 5 Max in its retail package along with a Raspberry Pi AI Kit because SunFounder wanted me to test the enclosure with an M.2 Hailo-8L accelerator beside M.2 NVMe SSDs.

PironMan 5 Max Package Raspberry Pi AI Kit

The side of the package has basic specs about the PC Tower, which we won’t reproduce here since we’ve already covered those in the announcement.

SunFounder Pironman 5 Max specifications

The kit comes with an assembly guide, acrylic plates, a power button, a tower cooler, a metal case with two parts, two fans, a 0.96 OLED, a USB HDMI adapter board, an IO expander port, a dual NVME PiP board, a microSD extender, and various wires, cables, screws, standoffs, thermal pads, and tools for the assembly.

Pironman 5 Max Kit content
The bags with screws and standoffs all comes with stickers with description that will make the assembly easier.  All boards are the same as for the original Pironman 5 kit, except for the Dual NVMe PIP board that now takes two M.2 modules and features an ASMedia ASM1182e PCIe Gen2 switch, which sadly means PCIe Gen3 x1 speed won’t be supported. It might not be too bad since random I/Os are usually the most important here.

Pironman 5 Dual NVMe PiP
The assembly guide lists all parts and  27 steps showing how to assemble the Pironman 5 Max tower PC enclosure with a Raspberry Pi 5 and accessories.

SunFounder Pironman 5 Max Assembly Guide
You’ll also find more detailed documentation online with not only an assembly guide, but also instructions to install and use the software.

Pironman 5 Max assembly with Raspberry Pi 5, NVMe SSD, Hailo-8L AI accelerator, and camera.

I had to prepare some accessories not included in the kit before the assembly: a Raspberry Pi 5 8GB, 256GB MAKERDISK and Raspberry Pi NVMe SSDs, an M.2 Hailo-8L AI accelerator, and a Raspberry Pi AI camera. Only the Raspberry Pi 5 is required, and other accessories are optional, but recommended if you want to make full use of the enclosure capabilities.

Raspberry Pi 5 8GB SSD Hailo 8L Camera
For the first step of the assembly, I had to loosen the two screws holding the two pieces of the metal enclosure together, and install a few standoffs of different heights.

Raspberry Pi 5 Metal Case Assembly Standoffs
I also removed the active cooler from my Raspberry Pi 5, connected the microSD extender and Pi 5 USB HDMI adapter boards, inserted the provided RTC battery and 4-pin header, and connected the 2-pin RTC wire to the Raspberry Pi 5, as well as one of the FPC PCIe cables. Note: Make sure the orientation of the FPC cable is correct.

Raspberry Pi 5 microSD adapter USB HDMI adapter RTC battery
I moved all that on the standoffs I previously installed and secured it with more standoffs and screws.

Pironman 5 Max Raspberry Pi 5 installation
Most people will likely skip that part, but I inserted a flat cable into the CAM/DISP 1 connector of the Raspberry Pi 5 to connect the AI camera to it later on. At this stage, the three thermal pads should be installed on top of the Broadcom BCM2712 SoC, the wireless module, and the power circuitry. That’s straightforward, but just remember to peel off the plastic film from the pads.

Raspberry Pi 5 Thermal Pads
I could not install the tower cooler by clipping it into the Raspberry Pi 5. I also connected the 4-wire fan cable and stuck the transparent insulation piece on the side of the cooler.

Pironman 5 max tower cooler installation
Next up was the installation of the Pi 5 Power Switch Converter board. It’s important to ensure it’s properly inserted into the 4-pin header. The FPC camera cable had to be twisted a bit here, as it got in the way. I also connected the FPC PCIe cable to the Dual NVMe PIP adapter.

Pi 5 PowerSwitch Convertor Dual NVMe PiP installation
The following step was to secure the Pironman 5 Dual NVMe PIP with three screws and install two M.2 module with the help of two small standoffs and screws.  I went with the 256GB Raspberry Pi SSD and the Hailo-8L module for now.

Pironman 5 max Raspberry Pi SSD Hailo 8 AI accelerator
We can now go back to the second part of the metal enclosure to install the RGB LED fans…

Pironman 5 Max Fan assembly
It turns out I did that wrong… The ICECUBE text must face inside the enclosure, or the fans will be noisy or not turn properly. So I switched sides later to solve the issue.

ICECUBE Fans installation

If you plan to install the camera, now is the time to pass the camera cable through the opening in the metal case. That’s also a new feature in the Pironman 5 Max that was not present in the original model.

Pironman 5 Max Camera flat cable
The IO Expander board can now be inserted into the 40-pin GPIO header of the Raspberry Pi 5, and we can connect the OLED display to it and stick it on the metal enclosure after removing the 3M protective film.
IO Expander insertion OLED display installation
I could now reassemble the two metal parts of the enclosure and secure them with six screws.

Pironman 5 Max Metal case assembly
Time to work on the acrylic plates. I removed the protective film on both sides of the smaller one and installed the power button on it.

Pironman 5 Black Acrylic plate power button
I then secured it with four screws and inserted the power button cable in the connector on the Power Switch Converter board as shown below in the red circle.

Power Button connection
That’s when I realized I forgot to connect the fans to the IO Extender board earlier, but it was still fine to do it at this stage.

Pironman 5 Max connect PWM fans

I removed the protective films from the larger acrylic plate, but the GPIO pinout markings were not perfectly clean. So I did like last year with the Pironman 5, and used a wet sponge to clean it up.

Acrylic plate GPIO pinout

The final steps are to install the acrylic plate and secure it with four screws, and stick the four rubber at the bottom of the enclosure.

Pironman 5 Max Assembly metal case rubber feet

The first time I made another mistake here, as I placed the rubber feet on the other side of the metal part, close to the GPIO header. It would also have worked since we can rotate the OLED, but then it would be on the bottom right side…

So the assembly is now complete, and it was mostly straightforward. Adding a camera is a bit awkward since there’s no mounting mechanism here, and you need to use or make your own. This is what the rear panel looks like.

Pironman 5 Max Assembled rear panel with camera

The front view.

I also took a photo on the grass (without flash) to show that the black acrylic plates are quite reflective.

Pironman 5 Max Reflective Acrylic panels

OS support and Raspberry Pi OS configuration

As noted in the software documentation, the Pironman 5 Max enclosure is fully supported by Raspberry Pi OS Desktop/Lite, Ubuntu 24.04 Desktop/Server, Home Assistant OS 12.3, Homebridge, and Batocera Linux, but the GPIO fan is not working on Kali Linux. Support for other Linux distributions may vary.

Pironman 5 Max OS compatibility

I did not have to install Raspberry Pi OS, since I installed an official Raspberry Pi NVMe SSD preloaded with the OS.  So I just connected the system to an HDMI monitor, a wireless mouse and keyboard, and a 5V/5A power adapter, and Raspberry Pi OS would boot normally. However, features like the RGB LED on the IO Extender board and PWM fans, and the OLED information display would not work. That’s normal, since we need to configure it and install a script for everything to work normally.

Pironman 5 Max Raspberry Pi OS

I first updated Raspberry Pi OS to the latest version with the usual commands:

sudo apt update

sudo apt dist-upgrade


To prevent the OLED screen and RGB fans from remaining active post-shutdown, we need to make sure that POWER_OFF_ON-HALT is set to 1. Let’s check our current configuration.

pi@raspberrypi:~ $ rpi-eeprom-config

[all]

BOOT_UART=1

POWER_OFF_ON_HALT=0

BOOT_ORDER=0xf461


We can change it with:

sudo rpi-eeprom-config -e


and modified the relevant line to:

[all]

BOOT_UART=1

POWER_OFF_ON_HALT=1

BOOT_ORDER=0xf461


Exit, save, and reboot. For some unknown reason, I had to do that twice, since it was not saved properly the first time.

I could then install the pironman5 module and dependencies as instructed in the documentation:

sudo apt install python3 python3-pip python3-setuptools

cd ~

git clone https://github.com/sunfounder/pironman5.git -b 1.2.7

cd ~/pironman5

sudo python3 install.py


Pironman5 script installation restart

After restarting the system, I could see the RGB LEDs were turned on, but the RGB LED fans were turning at all times despite the CPU temperature being at about 42-43°C, and the OLED would not display anything even after tapping the mini tower PC since the Pironman 5 Max implements a Tap-to-Wake feature.

It took me a while to find solutions to both issues. I eventually went to the dashboard at http:<IP_address>:34001, clicked on the icon in the top right corner, and noted the GPIO Fan Mode was set to Always On.

Pironmam 5 max Settings GPIO Fan Mode Always On

So I set the GPIO Fan Mode to Performance, and both RGB LED fans stopped since the CPU temperature was low enough.

GPIO Fan Mode Performance

The OLED issue was solved after I went to the GitHub repo and noticed a new version 1.2.15 had been released. So I reinstalled the Pironman5 module using the same instructions, just changing the branch used:

git clone https://github.com/sunfounder/pironman5.git -b 1.2.15


Users should just check the releases on GitHub and select the latest version.

Pironman 5 Max OLED working Pironman 5 Max RGB LED Fan active

As noted in the assembly section, the RGB LED fans were quite noisy, but that was because I had installed them incorrectly. After changing the orientation to have the ICECUBE text face inwards, everything was good.

Web interface and CLI

The Pironman5 can be configured through a web interface accessible on port 34001 or the pironman5 CLI.  Let’s have a closer look at both.

The web dashboard shows the CPU and GPU temperature, the CPU fan speed, and GPIO fan state, as well as information about storage devices, the memory, network interfaces, and the CPU usage.
PIronman 5 Max Dashboard

Clicking on the top left icon brings up a menu with Dashboard as shown above, History, and Log. The History section shows charts of user-selected variables such as temperature, CPU usage, CPU frequency, memory/storage usage, and more.

PIronman 5 Max History

The Log shows the system’s log that can be filtered from Debug to Critical, depending on how verbose you want the log to be.Pironman 5 Max Log
The icon on the top right brings up the Settings, where the user can configure various parameters. This includes setting Dark mode, showing unmounted disks and all CPU cores, switching between Celsius and Fahrenheit, enabling the OLED, and setting related parameters like disk, network interface, rotation (0/180°), and sleep timeout in seconds from 1 to 600 seconds.

Settings Dark Mode OLED

That means it’s not possible to have the OLED always on if that’s something you’d like to do. The RGB LEDs on the IO Extender board can be enabled, set to a specific color, the brightness adjusted from 0 to 100%, and the users can also set the style and speed of the effects.

Settings OLED RGB configuration

Eight styles are available: None, Solid, Breathing (default), Flow, Flow Reverse, Rainbow, Rainbow Reverse, and Hue Cycle. The RGB LEDs on the fans can be configured to be turned off, always on, or only turned on when the fans are activated. The behaviour of the fans themselves can be triggered at various temperatures with the GPIO fan mode: Quiet (70°C), Balanced (67.5°C), Cool ( 60°C), Performance (50°C), or Always On.

RGB Style FAN LED GPIO fan

Finally, it’s also possible to clear all history data from the settings.

Another way to control the enclosure is through the pironman5 command line utility:

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

pi@raspberrypi:~ $ pironman5

usage: pironman5-service [-h] [-v] [-c]

                         [-dl {debug,info,warning,error,critical}]

                         [--background [BACKGROUND]] [-rd] [-cp [CONFIG_PATH]]

                         [-rc [RGB_COLOR]] [-rb [RGB_BRIGHTNESS]]

                         [-rs [{solid,breathing,flow,flow_reverse,rainbow,rainbow_reverse,hue_cycle}]]

                         [-rp [RGB_SPEED]] [-re [RGB_ENABLE]]

                         [-rl [RGB_LED_COUNT]] [-u [{C,F}]]

                         [-gm [GPIO_FAN_MODE]] [-gp [GPIO_FAN_PIN]]

                         [-fl [GPIO_FAN_LED]] [-fp [GPIO_FAN_LED_PIN]]

                         [-oe [OLED_ENABLE]] [-od [OLED_DISK]]

                         [-oi [OLED_NETWORK_INTERFACE]] [-or [{0,180}]]

                         [-vp [VIBRATION_SWITCH_PIN]]

                         [-vu [VIBRATION_SWITCH_PULL_UP]]

                         [-os [OLED_SLEEP_TIMEOUT]]

                         [{start,restart,stop}]

Pironman 5 Max command line interface

positional arguments:

  {start,restart,stop}  Command

options:

  -h, --help            show this help message and exit

  -v, --version         Show version

  -c, --config          Show config

  -dl {debug,info,warning,error,critical}, --debug-level {debug,info,warning,error,critical}

                        Debug level

  --background [BACKGROUND]

                        Run in background

  -rd, --remove-dashboard

                        Remove dashboard

  -cp [CONFIG_PATH], --config-path [CONFIG_PATH]

                        Config path

  -rc [RGB_COLOR], --rgb-color [RGB_COLOR]

                        RGB color in hex format without # (e.g. 00aabb)

  -rb [RGB_BRIGHTNESS], --rgb-brightness [RGB_BRIGHTNESS]

                        RGB brightness 0-100

  -rs [{solid,breathing,flow,flow_reverse,rainbow,rainbow_reverse,hue_cycle}], --rgb-style [{solid,breathing,flow,flow_reverse,rainbow,rainbow_reverse,hue_cycle}]

                        RGB style

  -rp [RGB_SPEED], --rgb-speed [RGB_SPEED]

                        RGB speed 0-100

  -re [RGB_ENABLE], --rgb-enable [RGB_ENABLE]

                        RGB enable True/False

  -rl [RGB_LED_COUNT], --rgb-led-count [RGB_LED_COUNT]

                        RGB LED count int

  -u [{C,F}], --temperature-unit [{C,F}]

                        Temperature unit

  -gm [GPIO_FAN_MODE], --gpio-fan-mode [GPIO_FAN_MODE]

                        GPIO fan mode, 0: Always On, 1: Performance, 2: Cool,

                        3: Balanced, 4: Quiet

  -gp [GPIO_FAN_PIN], --gpio-fan-pin [GPIO_FAN_PIN]

                        GPIO fan pin

  -fl [GPIO_FAN_LED], --gpio-fan-led [GPIO_FAN_LED]

                        GPIO fan LED state on/off/follow

  -fp [GPIO_FAN_LED_PIN], --gpio-fan-led-pin [GPIO_FAN_LED_PIN]

                        GPIO fan LED pin

  -oe [OLED_ENABLE], --oled-enable [OLED_ENABLE]

                        OLED enable True/true/on/On/1 or False/false/off/Off/0

  -od [OLED_DISK], --oled-disk [OLED_DISK]

                        Set to display which disk on OLED. 'total' or the name

                        of the disk, like mmbclk or nvme

  -oi [OLED_NETWORK_INTERFACE], --oled-network-interface [OLED_NETWORK_INTERFACE]

                        Set to display which ip of network interface on OLED,

                        'all' or the interface name, like eth0 or wlan0

  -or [{0,180}], --oled-rotation [{0,180}]

                        Set to rotate OLED display, 0, 180

  -vp [VIBRATION_SWITCH_PIN], --vibration-switch-pin [VIBRATION_SWITCH_PIN]

                        Vibration switch pin

  -vu [VIBRATION_SWITCH_PULL_UP], --vibration-switch-pull-up [VIBRATION_SWITCH_PULL_UP]

                        Vibration switch pull up True/False

  -os [OLED_SLEEP_TIMEOUT], --oled-sleep-timeout [OLED_SLEEP_TIMEOUT]

                        OLED sleep timeout in seconds


It can control all the parameters from the web dashboard, and even a bit more since the user could also disable the dashboard, and adjust some vibration switch parameters.

There are two main reasons I see for disabling the dashboard. First, it’s not password-protected, so anybody with access to your LAN could change the settings easily. Second, it will uninstall InfluxDB, which continuously runs in the background and uses the CPU (2 to 13% when I checked). Removing it may slightly improve the performance. The pironman5 script also takes CPU cycles in the background, but you’ll probably want to keep it…

Pironman5 background CPU usage

We can read the current configuration as follows:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

pi@raspberrypi:~ $ pironman5 -c

{

    "system": {

        "data_interval": 1,

        "rgb_color": "#0a1aff",

        "rgb_brightness": 100,

        "rgb_style": "rainbow",

        "rgb_speed": 100,

        "rgb_enable": true,

        "rgb_led_count": 4,

        "temperature_unit": "C",

        "oled_enable": true,

        "oled_rotation": 0,

        "oled_disk": "total",

        "oled_network_interface": "all",

        "gpio_fan_pin": 6,

        "gpio_fan_mode": 1,

        "gpio_fan_led": "follow",

        "gpio_fan_led_pin": 5,

        "oled_sleep_timeout": 600,

        "vibration_switch_pin": 26,

        "vibration_switch_pull_up": false

    }

}


I tried to turn on the OLED forever by setting the sleep timeout to 0 and restarting pironman5:

pi@raspberrypi:~ $ sudo pironman5 -os 0

Set OLED sleep timeout: 0

pi@raspberrypi:~ $ sudo pironman5 restart --background


It looks to have done the trick.

Pironman 5 Max features testing

Let’s carry on the review with tests of the key features enabled by the Pironman 5 Max tower PC enclosure.

OLED

By default, the OLED will turn on at boot and automatically turn off after a sleep timeout set to 10 seconds by default. After that, the user needs to tap on the case to wake up the display.  The OLED will display CPU, RAM, and Disk Usage, the CPU Temperature, and the Raspberry Pi’s IP Address. No changes from the previous model here.

Pironman 5 Max OLED info display

The user can enable or disable the OLED and set the sleep timeout between 1 and 600 seconds in the web dashboard. The pironman5 command seems to be more versatile, as I also managed to set the OLED always on as noted above. Other options include network interface and disk selection, and the orientation of the display between 0 and 180°.

RGB LEDs on the IO Expandander board

The four WS2812 RGB LEDs will light up in blue in breathing mode. I took a video in this mode after setting the brightness to 100%

Users can adjust the style and speed through the web interface or CLI.

LED RGB fans

By default, the RGB fan will rotate at all times. But as we’ve just seen above, they can be configured to be triggered when the CPU reaches a specific temperature threshold: Quiet (70°C), Balanced (67.5°C), Cool ( 60°C), Performance (50°C). The Quiet mode is probably the best choice for most users.

The RGB LEDs are on by default, but they can be turned off (as in the video above), turned off at all times, or only turned on when the fans are rotating. Contrary to the RGB LED on the IO Expander board, there’s no special effect. The video below shows the Pironman 5 Max with all LEDs enabled.

IR receiver

The IR receiver can be tested with LIRC:

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

pi@raspberrypi:~ $ sudo apt install lirc

pi@raspberrypi:~ $ sudo mode2 --driver default -d /dev/lirc0

Using driver default on device /dev/lirc0

Trying device: /dev/lirc0

Using device: /dev/lirc0

Running as regular user pi

pulse 186

space 15374

pulse 210

timeout 129788

pulse 86

space 93606

pulse 701

space 2319

pulse 281

space 1914

pulse 89

space 11880

pulse 128

timeout 131312

pulse 82

space 117866

pulse 839

space 1695

pulse 165

space 334

pulse 220

space 10875

pulse 90

timeout 131318

Power button

The power button can be used to turn on the mini PC or turn it off safely. If you press it once when Raspberry Pi OS is running, it will bring up the Shutdown Options pop-up with Shutdown, Reboot, Lock Screen, and Logout, but you don’t need to use the mouse to turn the system off; simply press the button again.

RTC clock and battery

We can read the RTC time with the following command:

pi@raspberrypi:~ $ sudo hwclock -r

2025-06-29 13:43:16.519633+07:00


Now let’s disconnect the Ethernet cable, if any, and disable Wireless LAN before rebooting the system. if the RTC is working, we should get the right time and date even without any network connectivity.

Pironman Max 5 offline RTC test

June 29, 2025, that’s today, and the time is also right.

M.2 sockets with NVMe SSDs and Hailo-8L AI accelerator

Let’s now test the new Dual NVMe PIP with one NVMe SSD and Hailo-8L AI accelerator, then with two SSDs.

I’ll run iozone3 on the Raspberry Pi SSD first:

pi@raspberrypi:~ $ iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2

Iozone: Performance Test of File I/O

        Version $Revision: 3.489 $

Compiled for 64 bit mode.

Build: linux

                                                              random    random     bkwd    record    stride                                    

              kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread

          102400       4   124888   146841   163611   164306    57355   141186                                                                

          102400      16   249136   267441   302985   304097   157448   284724                                                                

          102400     512   413343   412693   424725   425967   398901   404067                                                                

          102400    1024   415127   416200   429995   427345   416615   415719                                                                

          102400   16384   420343   418412   439137   440130   438884   420377                                                                

iozone test complete.


Those results are similar to when I tested the same SSD with the Raspberry Pi M.2 HAT+ in PCIe Gen2 x1 mode. The write/rewrite speeds are actually a bit better (420 MB/s vs 390 MB/s), maybe because of some optimization since then. The PCIe interface on my Raspberry Pi 5 was already set to use PCIe Gen3 x1 mode, but it does not help since the PCIe signals are going through a PCIe Gen2 switch. So that’s one downside compared to the original Pironman 5 case.

Let’s now test the Hailo-8L module using the same instructions as for the Raspberry Pi AI HAT+. Let’s install the dependencies and check whether the module is detected:

sudo apt install hailo-all

sudo reboot

hailortcli fw-control identify


Here’s the output:

pi@raspberrypi:~ $ hailortcli fw-control identify

Executing on device: 0001:04:00.0

Identifying board

Control Protocol Version: 2

Firmware Version: 4.20.0 (release,app,extended context switch buffer)

Logger Version: 0

Board Name: Hailo-8

Device Architecture: HAILO8L

Serial Number: HLDDLBB243902465

Part Number: HM21LB1C2LAE

Product Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP


A Hailo-8L accelerator is detected. All good!

Let’s run one of the rpicam-apps samples using the Raspberry Pi camera attached to the Pi 5:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

git clone --depth 1 https://github.com/raspberrypi/rpicam-apps.git ~/rpicam-apps

cd rpicam-apps/

DISPLAY=:0 rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov8_inference.json --lores-width 640 --lores-height 640 --rotation 180

[0:07:03.268178398] [11419]  INFO Camera camera_manager.cpp:326 libcamera v0.5.0+59-d83ff0a4

[0:07:03.275422568] [11422]  INFO RPI pisp.cpp:720 libpisp version v1.2.1 981977ff21f3 29-04-2025 (14:13:50)

[0:07:03.292492543] [11422]  INFO RPI pisp.cpp:1179 Registered camera /base/axi/pcie@1000120000/rp1/i2c@80000/imx708@1a to CFE device /dev/media2 and ISP device /dev/media0 using PiSP variant BCM2712_C0

Made X/EGL preview window

Postprocessing requested lores: 640x640 BGR888

Reading post processing stage "hailo_yolo_inference"

Reading post processing stage "object_detect_draw_cv"

Mode selection for 2304:1296:12:P

    SRGGB10_CSI2P,1536x864/0 - Score: 3400

    SRGGB10_CSI2P,2304x1296/0 - Score: 1000

    SRGGB10_CSI2P,4608x2592/0 - Score: 1900

Stream configuration adjusted

[0:07:03.614197453] [11419]  INFO Camera camera.cpp:1205 configuring streams: (0) 2304x1296-YUV420 (1) 640x640-BGR888 (2) 2304x1296-RGGB_PISP_COMP1

[0:07:03.614322254] [11422]  INFO RPI pisp.cpp:1483 Sensor: /base/axi/pcie@1000120000/rp1/i2c@80000/imx708@1a - Selected sensor format: 2304x1296-SRGGB10_1X10 - Selected CFE format: 2304x1296-PC1R


Pironman 5 Max Hailo 8L demo

Good. Let’s now keep the AI demo program running and test the NVMe SSD performance again when PCIe bandwidth is shared between the SSD and AI accelerator:

pi@raspberrypi:~ $ iozone -e -I -a -s 100M -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

          102400       4    86976    90728   106096   109130    45648    92314                                                                

          102400      16   172121   189690   198148   195551   117638   185899                                                                

          102400     512   293834   286977   318676   320840   309418   290653                                                                

          102400    1024   292028   297656   324662   329635   322158   296072                                                                

          102400   16384   300008   301422   337596   338850   338400   300401


As expected, both sequential and random I/Os are impacted. The sequential read speed drops to about 337 MB/s (was 439 MB/s) and the write speed to 300 MB/s (was 420 MB/s). That’s still acceptable, and that means both the SSD and Hailo-8L can run simultaneously.

Time to shut down the Raspberry Pi 5 to replace the Hailo-8 with a 256GB MAKERDISK SSD. It’s relatively easy, as the user would only have to remove the acrylic cover and replace one module with the other. The trickiest part was removing the small standoff and installing it close to the fan for the M.2 2280 SSD. It’s probably easier with small fingers…

Dual NVMe SSD installation

After booting the system, we can see our two SSDs: nvme0n1 and nvme1n1.

pi@raspberrypi:~ $ lsblk

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS

nvme0n1     259:0    0 238.5G  0 disk

├─nvme0n1p1 259:1    0   512M  0 part /boot/firmware

└─nvme0n1p2 259:2    0   238G  0 part /

nvme1n1     259:3    0 238.5G  0 disk

├─nvme1n1p1 259:4    0   256K  0 part

├─nvme1n1p2 259:5    0    64K  0 part

├─nvme1n1p3 259:6    0     1M  0 part

├─nvme1n1p4 259:7    0     2M  0 part

├─nvme1n1p5 259:8    0   256M  0 part

└─nvme1n1p6 259:9    0 238.2G  0 part


After mounting the /dev/nvme1n1p6, we can check the performance of the MAKERDISK SSD:

pi@raspberrypi:/media/nvme1n1p6 $ sudo iozone -e -I -a -s 100M -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

          102400       4   149379   164679    20232    20180    51778   150577                                                                

          102400      16   275923   285764    80526    80899   188838   286462                                                                

          102400     512   408955   407301   414969   417480   416987   396826                                                                

          102400    1024   406373   419117   425834   427259   426654   412768                                                                

          102400   16384   419206   420079   432124   433040   433695   406370                                                                


It’s similar to the Raspberry Pi SSD, which should not be surprising since the bottleneck is the PCIe Gen2 interface (5 GT/s).

Let’s try to run iozone3 on both disks simultaneously. But it did not work the way I expected. I thought both runs would roughly run in the same amount of time. But the iozone3 test on the Raspberry Pi SSD would complete first, then the one on the MAKERDISK SSD would complete later, as if it was throttled. The video below shows the test on the Raspberry Pi (left) and MAKERDISK (right) SSDs.

I’m not sure what happens here, but it’s as if the PCIe switch prioritizes the first PCIe interface. In any case, the Pironman 5 Max can support two NVMe SSDs just fine, but bear in mind one may be prioritized over the other if data requests are sent at the same time.

Performance and thermal cooling

To test the cooling ability of the Pironman 5 Max, I ran sbc-bench.sh in Quiet mode after disabling the CPU usage validation in the script:

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

164

165

166

167

168

169

170

171

172

173

174

175

176

pi@raspberrypi:~ $ sudo ./sbc-bench.sh -r

Starting to examine hardware/software for review purposes...

sbc-bench v0.9.68

Installing needed tools: distro packages already installed, cpuminer. 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

  * Too much background activity (%system): 1% avg, 2% max -> https://tinyurl.com/mr2wy5uv

  * Too much other background activity: 2% avg, 4% max -> https://tinyurl.com/mr2wy5uv

  * No throttling

  * 8 different clusters but capacity-dmips-mhz property not set

Full results uploaded to https://0x0.st/8UAr.txt

# Raspberry Pi 5 Model B Rev 1.0

Tested with sbc-bench v0.9.68 on Sun, 29 Jun 2025 15:59:10 +0700. Full info: [https://0x0.st/8UAr.txt](http://0x0.st/8UAr.txt)

### 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

8059 KB available RAM

### Governors/policies (performance vs. idle consumption):

Original governor settings:

    cpufreq-policy0: performance / 2400 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 48.5°C:

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2397

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2400

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399

    cpu0-cpu3 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

After at 70.5°C:

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2400

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2400

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu3 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

### Performance baseline

  * cpu0 (Cortex-A76): memcpy: 5802.8 MB/s, memchr: 14369.8 MB/s, memset: 8773.6 MB/s

  * cpu0 (Cortex-A76): memcpy: 5904.9 MB/s, memchr: 14432.3 MB/s, memset: 8786.4 MB/s

  * cpu0 (Cortex-A76): memcpy: 5880.6 MB/s, memchr: 14346.7 MB/s, memset: 8712.7 MB/s

  * cpu0 (Cortex-A76): memcpy: 5822.9 MB/s, memchr: 13933.4 MB/s, memset: 8701.6 MB/s

  * cpu0 (Cortex-A76): memcpy: 5579.9 MB/s, memchr: 13693.7 MB/s, memset: 8274.2 MB/s

  * cpu0 (Cortex-A76): memcpy: 5569.4 MB/s, memchr: 13659.3 MB/s, memset: 8441.4 MB/s

  * cpu0 (Cortex-A76): memcpy: 5613.1 MB/s, memchr: 13626.8 MB/s, memset: 8520.4 MB/s

  * cpu0 (Cortex-A76): memcpy: 5709.6 MB/s, memchr: 13803.5 MB/s, memset: 8516.8 MB/s

  * cpu0 (Cortex-A76) 16M latency: 109.8 106.7 109.2 104.1 106.2 112.3 145.9 191.4

  * cpu0 (Cortex-A76) 16M latency: 107.8 108.8 105.1 109.4 104.8 114.0 144.1 187.3

  * cpu0 (Cortex-A76) 16M latency: 106.5 107.8 106.9 105.1 110.8 111.4 146.5 194.7

  * cpu0 (Cortex-A76) 16M latency: 108.6 107.5 103.7 108.5 107.4 114.4 141.5 183.4

  * cpu0 (Cortex-A76) 16M latency: 103.6 103.7 109.1 109.8 104.0 111.7 142.3 185.4

  * cpu0 (Cortex-A76) 16M latency: 102.2 107.9 112.2 105.7 103.0 110.5 146.5 184.7

  * cpu0 (Cortex-A76) 16M latency: 108.8 105.7 103.1 103.4 111.0 112.6 142.0 192.9

  * cpu0 (Cortex-A76) 16M latency: 103.2 108.3 106.2 111.5 106.7 111.6 143.2 178.7

  * cpu0 (Cortex-A76) 128M latency: 118.8 117.8 119.7 118.5 118.3 119.2 119.3 124.0

  * cpu0 (Cortex-A76) 128M latency: 118.6 117.9 119.6 117.1 119.5 117.5 120.4 124.2

  * cpu0 (Cortex-A76) 128M latency: 119.7 117.8 119.9 117.9 118.8 118.4 119.5 123.8

  * cpu0 (Cortex-A76) 128M latency: 119.2 118.4 119.5 117.5 119.6 117.6 119.8 124.5

  * cpu0 (Cortex-A76) 128M latency: 119.7 124.7 118.3 118.5 119.4 117.5 119.0 124.0

  * cpu0 (Cortex-A76) 128M latency: 119.9 117.1 118.3 120.0 118.3 117.1 119.2 124.6

  * cpu0 (Cortex-A76) 128M latency: 118.5 117.1 121.6 117.1 118.3 117.2 121.1 124.2

  * cpu0 (Cortex-A76) 128M latency: 119.7 118.3 119.8 117.1 120.4 117.3 119.2 124.7

  * 7-zip MIPS (3 consecutive runs): 11156, 11153, 11171 (11160 avg), single-threaded: 3264

  * `aes-256-cbc     537338.90k  1002041.30k  1253641.73k  1330746.37k  1363561.13k  1365912.23k (Cortex-A76)`

  * `aes-256-cbc     539711.76k  1002669.74k  1254003.37k  1330769.58k  1363036.84k  1365595.48k (Cortex-A76)`

  * `aes-256-cbc     539677.10k  1002709.72k  1254107.99k  1330062.68k  1363435.52k  1365988.69k (Cortex-A76)`

  * `aes-256-cbc     539400.02k  1002469.80k  1254300.76k  1330708.82k  1363268.95k  1366283.61k (Cortex-A76)`

  * `aes-256-cbc     539675.38k  1002485.23k  1254375.08k  1330787.33k  1363132.42k  1365650.09k (Cortex-A76)`

  * `aes-256-cbc     539275.28k  1002480.64k  1254301.35k  1330483.54k  1363271.68k  1366398.29k (Cortex-A76)`

  * `aes-256-cbc     539657.11k  1002297.39k  1254385.24k  1330881.19k  1363268.95k  1366452.91k (Cortex-A76)`

  * `aes-256-cbc     539494.14k  1001723.39k  1254484.05k  1330861.74k  1362755.58k  1366179.84k (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: 49°C, ASPM Disabled

  * 238.5GB "PCIe SSD" SSD as /dev/nvme1: Speed 5GT/s (downgraded), Width x1 (downgraded), 0% worn out, drive temp: 48°C, ASPM Disabled

### Swap configuration:

  * /var/swap on /dev/nvme0n1p2: 200.0M (0K used)

### Software versions:

  * Debian GNU/Linux 12 (bookworm)

  * Build scripts: http://archive.raspberrypi.com/debian/ bookworm main

  * Compiler: /usr/bin/gcc (Debian 12.2.0-14+deb12u1) 12.2.0 / aarch64-linux-gnu

  * OpenSSL 3.0.16, built on 11 Feb 2025 (Library: OpenSSL 3.0.16 11 Feb 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  numa=fake=8 system_heap.max_order=0 smsc95xx.macaddr=2C:CF:67:28:FD:27 vc_mem.mem_base=0x3fc00000 vc_mem.mem_size=0x40000000  console=ttyAMA10,115200 console=tty1 root=PARTUUID=c15065e6-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=TH`

  * 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.25+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)

15:59:11: 2400/2400MHz  3.55  27%   1%  25%   0%   0%   0%  62.8°C  0.8905V   3.4W   5.10V

...

Cleaning up. Done.

Checking cpufreq OPP again. Done.

Clockspeeds now at 63.4°C:

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2399

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu-1 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398

    cpu0-cpu3 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398


The CPU temperature started at about 45°C at idle, and topped at 75°C under load (stress-ng). Most of the test was done fanless

Pironman 5 Max CPU Temperature Quiet Mode

Performance-wise, the system achieved 11,160 MIPS in 7-zip on average, which compares to 10,930 MIPS on the Raspberry Pi 5 with an active cooler or 10,520 MIPS with the Pironman 5 case, so no problem here.

I then switched the GPIO Fan Mode to “Always On” and the CPU temperature dropped back to about 45°C within about 10 minutes and stabilized at that temperature. I run stress-ng directly to check the max CPU temperature with the fans:

stress-ng --cpu 4 --iomix 4 --vm 4 --vm-bytes 128M


The CPU temperature will quickly jump by a few degrees once we start the stress test, but quickly stabilize at just under 60°C for the rest of the test.

Stress-ng CPU Temperature Pironman 5 Max Fan cooling

All tests were done at an ambient temperature of about 28°C.

Power Consumption

One would think people buying this type of enclosure with fancy RGB LEDs don’t care too much about the power consumption, but I still measured it with a wall power meter under various conditions

  • Power off – 0.0 – 0.1 Watts
  • Idle
    • OLED off, all RGB LEDs off, PWM fan set to Quiet – 5.4 – 5.9 Watts
    • OLED on, all RGB LEDs off, PWM fan set to Quiet – 5.5 – 6.0 Watts
    • OLED on, RGB LEDs breathing with 100% speed, PWM fan set to Quiet – 6.0 – 6.5 Watts
    • OLED on, RGB LEDs breathing with 100% speed, RGB LEDs of the fan on, PWM fan set to Quiet – 6.4 – 6.9 Watts
    • OLED on, RGB LEDs breathing with 100% speed, RGB LEDs of the fan on, PWM fan set to Always On – 7.0 – 7.6 Watts

Measurements were done with a USB RF dongle for a keyboard and mouse combo, a WiFi connection, an HDMI display, and two NVMe SSDs installed.

Conclusion

Like its predecessor, SunFounder’s Pironman 5 Max is a great little PC Tower case for the Raspberry Pi 5 that further improves on last year’s Pironman 5. It gains a slicker design, a dual NVMe PIP board to support up to two M.2 NVMe SSDs or one SSD and one M.2 AI accelerator, and small features like Tap-to-Wake for the OLED, a camera cable opening, and RGB LED fans.

It’s quite fancy with the OLED and RGB LEDs all configurable through an easy-to-use interface or a CLI for more advanced users. It keeps all the features of the Raspberry Pi 5 with Gigabit Ethernet, four USB ports, two (full-size) HDMI ports, a USB-C port for power, and external access to the 40-pin GPIO header.

It’s over-engineered, but I suppose that’s part of the charm of the enclosure, and cooling works great with the large heatsink and two RGB fans. The latter two can actually be turned off most of the time since the heatsink already does a proper job.  One downside compared to the Pironman 5 is that the new Max model does not support PCIe Gen3 x1 since it relies on a PCI Gen2 switch to support two M.2 PCIe sockets. The Pironman5 script and InfluxDB (for logging) also use more CPU (around 2 to 15%) than one would have expected.

I’d like to thank SunFounder for sending the Pironman 5 Max for review, along with a Raspberry Pi AI Kit. The Raspberry Pi 5 Tower PC enclosure can be purchased for $94.99 and up, with the price depending on the options selected by the user, like a power supply, a Raspberry Pi 5 SBC, one or two SSDs, an AI Kit, etc… The company also runs AliExpress and Amazon stores, but in my experience, it may take several months before new products are listed there.

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.

Read Entire Article