Argon ONE V3 Power Button & Shutdown System Power Down Doesn't Failure

Hi

I have a Pi 5 and an Argon ONE V3 M.2 NVME PCIE Case.

My Pi is up to date, with regard to OS updates, and I’m running Raspberry Pi OS. After following the Pi5 install manual, I’ve tried to installed the Argon scripts as follows.

The manual says the EEPROM script is to be run from here, which I have completed:

curl https://download.argon40.com/argon-eeprom.sh | bash

My EEPROM configs is as below:

root@NMSPi:~# rpi-eeprom-config
[all]
WAKE_ON_GPIO=0
PCIE_PROBE=1
PSU_MAX_CURRENT=5000
BOOT_UART=1
POWER_OFF_ON_HALT=1
BOOT_ORDER=0xf416

I’ve also ran the script (into bash) from this location, as per the instructions:

curl https://download.argon40.com/argon1.sh | bash

I can control the fan speed of my unit with argon-config.

If I shutdown my Pi I can see the last item on screen says

[ Ok ] Reached target poweroff.target - System Power Off

However the Pi does not power down, The red LED on the front of the Argon’s case also stays illuminated. If I double press the Argon’s power button a reboot occurs when Linux is running. I can’t trigger a shutdown with a short press of the power button, unlike my Argon One for Pi4. The Power button does work if I press and hold it, but this just cuts power off if Linux is running, not a graceful shutdown. I’ve checked the Pi to Argon case interfaces and it all looks ok. The HDMI outputs on the Argon case work fine and I can control the Argon’s fan speed ok from bash.

I also have an Argon One with a Pi4, which has a correctly working power button.

Any idea how I can get my Pi to power down on a shutdown and make the Argon’s power button also call for a graceful shutdown?

Thanks

Please have a look what is the current state of the GPIO pins and UART configuration in config.txt.

sudo pinctrl -p
sudo gpioinfo
cat /boot/firmware/config.txt

Explanation:
Since you have reported that the restart works, I assume that the GPIO4 pin is OK. But the second pin GPIO14 (UART TXD) must also be working/configured correctly.
After the shutdown is signaled/detected, the process works in reverse. The GPIO14 must have a defined state. The MCU (RP2040) searches/watches for the GPIO14 pin to go down. If this is not the case, it will not switch off the power (as you described). Maybe the UART initialization has changed with newer kernels.

For more details and a hardware test: Power switch problems - #7 by HarryH

Hi

Thanks for your help. The output of the commands are shown below:

pinctrl -p

root@NMSPi:~# pinctrl -p
1: 3v3
2: 5v
3: a3 pu | hi // GPIO2 = SDA1
4: 5v
5: a3 pu | hi // GPIO3 = SCL1
6: gnd
7: ip pu | lo // GPIO4 = input
8: a4 pn | hi // GPIO14 = TXD0
9: gnd
10: a4 pu | hi // GPIO15 = RXD0
11: no pd | – // GPIO17 = none
12: no pd | – // GPIO18 = none
13: no pd | – // GPIO27 = none
14: gnd
15: no pd | – // GPIO22 = none
16: no pd | – // GPIO23 = none
17: 3v3
18: no pd | – // GPIO24 = none
19: no pd | – // GPIO10 = none
20: gnd
21: no pd | – // GPIO9 = none
22: no pd | – // GPIO25 = none
23: no pd | – // GPIO11 = none
24: no pu | – // GPIO8 = none
25: gnd
26: no pu | – // GPIO7 = none
27: ip pu | hi // GPIO0 = input
28: ip pu | hi // GPIO1 = input
29: no pu | – // GPIO5 = none
30: gnd
31: no pu | – // GPIO6 = none
32: no pd | – // GPIO12 = none
33: no pd | – // GPIO13 = none
34: gnd
35: no pd | – // GPIO19 = none
36: no pd | – // GPIO16 = none
37: no pd | – // GPIO26 = none
38: no pd | – // GPIO20 = none
39: gnd
40: no pd | – // GPIO21 = none

gpioinfo

root@NMSPi:~# gpioinfo
gpiochip0 - 54 lines:
line 0: “ID_SDA” unused input active-high
line 1: “ID_SCL” unused input active-high
line 2: “GPIO2” unused input active-high
line 3: “GPIO3” unused input active-high
line 4: “GPIO4” “argon” input active-high [used]
line 5: “GPIO5” unused input active-high
line 6: “GPIO6” unused input active-high
line 7: “GPIO7” unused input active-high
line 8: “GPIO8” unused input active-high
line 9: “GPIO9” unused input active-high
line 10: “GPIO10” unused input active-high
line 11: “GPIO11” unused input active-high
line 12: “GPIO12” unused input active-high
line 13: “GPIO13” unused input active-high
line 14: “GPIO14” unused input active-high
line 15: “GPIO15” unused input active-high
line 16: “GPIO16” unused input active-high
line 17: “GPIO17” unused input active-high
line 18: “GPIO18” unused input active-high
line 19: “GPIO19” unused input active-high
line 20: “GPIO20” unused input active-high
line 21: “GPIO21” unused input active-high
line 22: “GPIO22” unused input active-high
line 23: “GPIO23” unused input active-high
line 24: “GPIO24” unused input active-high
line 25: “GPIO25” unused input active-high
line 26: “GPIO26” unused input active-high
line 27: “GPIO27” unused input active-high
line 28: “PCIE_RP1_WAKE” unused output active-high
line 29: “FAN_TACH” unused input active-high
line 30: “HOST_SDA” unused input active-high
line 31: “HOST_SCL” unused input active-high
line 32: “ETH_RST_N” “phy-reset” output active-low [used]
line 33: “-” unused input active-high
line 34: “CD0_IO0_MICCLK” “cam0_reg” output active-high [used]
line 35: “CD0_IO0_MICDAT0” unused input active-high
line 36: “RP1_PCIE_CLKREQ_N” unused input active-high
line 37: “-” unused input active-high
line 38: “CD0_SDA” unused input active-high
line 39: “CD0_SCL” unused input active-high
line 40: “CD1_SDA” unused input active-high
line 41: “CD1_SCL” unused input active-high
line 42: “USB_VBUS_EN” unused output active-high
line 43: “USB_OC_N” unused input active-high
line 44: “RP1_STAT_LED” “PWR” output active-low [used]
line 45: “FAN_PWM” unused input active-high
line 46: “CD1_IO0_MICCLK” “cam1_reg” output active-high [used]
line 47: “2712_WAKE” unused input active-high
line 48: “CD1_IO1_MICDAT1” unused input active-high
line 49: “EN_MAX_USB_CUR” unused output active-high
line 50: “-” unused input active-high
line 51: “-” unused input active-high
line 52: “-” unused input active-high
line 53: “-” unused input active-high
gpiochip10 - 32 lines:
line 0: “-” unused input active-high
line 1: “2712_BOOT_CS_N” “spi10 CS0” output active-low [used]
line 2: “2712_BOOT_MISO” unused input active-high
line 3: “2712_BOOT_MOSI” unused input active-high
line 4: “2712_BOOT_SCLK” unused input active-high
line 5: “-” unused input active-high
line 6: “-” unused input active-high
line 7: “-” unused input active-high
line 8: “-” unused input active-high
line 9: “-” unused input active-high
line 10: “-” unused input active-high
line 11: “-” unused input active-high
line 12: “-” unused input active-high
line 13: “-” unused input active-high
line 14: “PCIE_SDA” unused input active-high
line 15: “PCIE_SCL” unused input active-high
line 16: “-” unused input active-high
line 17: “-” unused input active-high
line 18: “-” unused input active-high
line 19: “-” unused input active-high
line 20: “PWR_GPIO” “pwr_button” input active-low [used]
line 21: “2712_G21_FS” unused input active-high
line 22: “-” unused input active-high
line 23: “-” unused input active-high
line 24: “BT_RTS” unused input active-high
line 25: “BT_CTS” unused input active-high
line 26: “BT_TXD” unused input active-high
line 27: “BT_RXD” unused input active-high
line 28: “WL_ON” “wl_on_reg” output active-high [used]
line 29: “BT_ON” unused input active-high
line 30: “WIFI_SDIO_CLK” unused input active-high
line 31: “WIFI_SDIO_CMD” unused input active-high
gpiochip11 - 4 lines:
line 0: “WIFI_SDIO_D0” unused input active-high
line 1: “WIFI_SDIO_D1” unused input active-high
line 2: “WIFI_SDIO_D2” unused input active-high
line 3: “WIFI_SDIO_D3” unused input active-high
gpiochip12 - 17 lines:
line 0: “RP1_SDA” unused input active-high
line 1: “RP1_SCL” unused input active-high
line 2: “RP1_RUN” “RP1 RUN pin” output active-high [used]
line 3: “SD_IOVDD_SEL” “vdd-sd-io” output active-high [used]
line 4: “SD_PWR_ON” “sd_vcc_reg” output active-high [used]
line 5: “SD_CDET_N” “cd” input active-low [used]
line 6: “SD_FLG_N” unused input active-high
line 7: “-” unused input active-high
line 8: “2712_WAKE” unused input active-high
line 9: “2712_STAT_LED” “ACT” output active-low [used]
line 10: “-” unused input active-high
line 11: “-” unused input active-high
line 12: “PMIC_INT” unused input active-high
line 13: “UART_TX_FS” unused input active-high
line 14: “UART_RX_FS” unused input active-high
line 15: “-” unused input active-high
line 16: “-” unused input active-high
gpiochip13 - 6 lines:
line 0: “HDMI0_SCL” unused input active-high
line 1: “HDMI0_SDA” unused input active-high
line 2: “HDMI1_SCL” unused input active-high
line 3: “HDMI1_SDA” unused input active-high
line 4: “PMIC_SCL” unused input active-high
line 5: “PMIC_SDA” unused input active-high
gpiochip0 - 54 lines:
line 0: “ID_SDA” unused input active-high
line 1: “ID_SCL” unused input active-high
line 2: “GPIO2” unused input active-high
line 3: “GPIO3” unused input active-high
line 4: “GPIO4” “argon” input active-high [used]
line 5: “GPIO5” unused input active-high
line 6: “GPIO6” unused input active-high
line 7: “GPIO7” unused input active-high
line 8: “GPIO8” unused input active-high
line 9: “GPIO9” unused input active-high
line 10: “GPIO10” unused input active-high
line 11: “GPIO11” unused input active-high
line 12: “GPIO12” unused input active-high
line 13: “GPIO13” unused input active-high
line 14: “GPIO14” unused input active-high
line 15: “GPIO15” unused input active-high
line 16: “GPIO16” unused input active-high
line 17: “GPIO17” unused input active-high
line 18: “GPIO18” unused input active-high
line 19: “GPIO19” unused input active-high
line 20: “GPIO20” unused input active-high
line 21: “GPIO21” unused input active-high
line 22: “GPIO22” unused input active-high
line 23: “GPIO23” unused input active-high
line 24: “GPIO24” unused input active-high
line 25: “GPIO25” unused input active-high
line 26: “GPIO26” unused input active-high
line 27: “GPIO27” unused input active-high
line 28: “PCIE_RP1_WAKE” unused output active-high
line 29: “FAN_TACH” unused input active-high
line 30: “HOST_SDA” unused input active-high
line 31: “HOST_SCL” unused input active-high
line 32: “ETH_RST_N” “phy-reset” output active-low [used]
line 33: “-” unused input active-high
line 34: “CD0_IO0_MICCLK” “cam0_reg” output active-high [used]
line 35: “CD0_IO0_MICDAT0” unused input active-high
line 36: “RP1_PCIE_CLKREQ_N” unused input active-high
line 37: “-” unused input active-high
line 38: “CD0_SDA” unused input active-high
line 39: “CD0_SCL” unused input active-high
line 40: “CD1_SDA” unused input active-high
line 41: “CD1_SCL” unused input active-high
line 42: “USB_VBUS_EN” unused output active-high
line 43: “USB_OC_N” unused input active-high
line 44: “RP1_STAT_LED” “PWR” output active-low [used]
line 45: “FAN_PWM” unused input active-high
line 46: “CD1_IO0_MICCLK” “cam1_reg” output active-high [used]
line 47: “2712_WAKE” unused input active-high
line 48: “CD1_IO1_MICDAT1” unused input active-high
line 49: “EN_MAX_USB_CUR” unused output active-high
line 50: “-” unused input active-high
line 51: “-” unused input active-high
line 52: “-” unused input active-high
line 53: “-” unused input active-high

cat /boot/firmware/config.txt

root@NMSPi:~# cat /boot/firmware/config.txt

For more options and information see

http://rptl.io/configtxt

Some settings may impact device functionality. See link above for details

Uncomment some or all of these to enable the optional hardware interfaces

dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

Enable audio (loads snd_bcm2835)

dtparam=audio=on

Additional overlays and parameters are documented

/boot/firmware/overlays/README

Automatically load overlays for detected cameras

camera_auto_detect=1

Automatically load overlays for detected DSI displays

display_auto_detect=1

Automatically load initramfs files, if found

auto_initramfs=1

Enable DRM VC4 V3D driver

dtoverlay=vc4-kms-v3d
max_framebuffers=2

Don’t have the firmware create an initial video= setting in cmdline.txt.

Use the kernel’s default instead.

disable_fw_kms_setup=1

Run in 64-bit mode

arm_64bit=1

Disable compensation for displays with overscan

disable_overscan=1

Disable Bluetooth

dtoverlay=disable-bt

Run as fast as firmware / board allows

arm_boost=1

[cm4]

Enable host mode on the 2711 built-in XHCI USB controller.

This line should be removed if the legacy DWC2 controller is required

(e.g. for USB device mode) or if USB support is not required.

otg_mode=1

[all]

enable_uart=1
dtparam=uart0=on
dtparam=nvme
dtparam=pciex1_gen=3
max_usb_current=1

I’m running this version of linux:

Linux NMSPi 6.6.51+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.51-1+rpt3 (2024-10-08) aarch64 GNU/Linux

On my Pi4, that works as expected in it argon case, the Linux kernel is slightly older:

Linux FileSyncMaster 6.6.47+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.47-1+rpt1 (2024-09-02) aarch64 GNU/Linux

If I change the status of GPIO14 nothing seems to happen with the pi, it continues to run:

root@NMSPi:~# pinctrl -p get GPIO14
8: a4 pn | hi // GPIO14 = TXD0
root@NMSPi:~# pinctrl -p set GPIO14 op dl
root@NMSPi:~# pinctrl -p get GPIO14
8: op dl pn | lo // GPIO14 = output

I’ve checked the voltage on GPIO14, compared to ground, and I can see it transitions from 3.3v to 0.4v when I issue the GPIO command above. I can also see that GPIO14 measures 3.3v at Pi boot and sets to 0.4v when I initiate a Pi shutdown via the cli too. Out of interest, once GPIO14 was at 0.4v, after a Pi shutdown, I took GPIO to 0v with a bit of wire to see if the Argon would cut power to the Pi, but it didn’t. The GPIO pins are secure in the Argon case. Do you think this means my Argon case is faulty?

Thanks

The Argon ONE cuts the power only if the hardware shutdown was initiated before and afterwards the GPIO14 is going to low.

hardware shutdown opportunities:

  • remote control power command
  • held power button > 3 seconds < 5 seconds
  • I2C command (please follow the link I provided above)

If that doesn’t work, maybe you should grab a multimeter and follow the GPIO14 line if there is a bad soldering point on the way to the MCU.

Just for comparison, you can test the same scenario at your RPi4. Only the shutdown command via I2C is different there and if you not fast enough the Argon ONE V2 just cuts the power after 10 seconds hard (firmware limitation/bug): GitHub - Argon40Tech/Argon-ONE-i2c-Codes: This is a list of i2c Codes utilized by Argon ONE Raspberry Pi Cases
sudo i2cset -y 1 0x1a 0xff

Hi

Thanks again for your help. I will follow up with more testing tomorrow, as you outlined above (it is getting late in my TZ).

I did perform a little more work after my last post. My Argon Pi5 is set to boot on power on, via the Argon’s boot pins. If I change the pins to use pins 1&2, i.e. don’t boot on power on, and I issue a shutdown -h now command the Pi shuts down and the Argon cuts power. This is different to if I issue the same command with boot on power on set with pins 2&3, which shuts the Pi down but doesn’t cut power.

If I perform the same shutdown command on my Pi4 Argon case the Pi always shuts down and cuts power, regardless if the Pi is set to boot on power on or not.

It feels like the Pi5 case always provides power, regardless of GPIO14 status, if the case is set to boot on power applied.

I’ll pickup with more testing tomorrow. as well as updating the Argon’s firmware Thanks again for your help!