[Similar issue as post Witty Pi 5 can't turn on when powered with VIN port]
When powering my Witty Pi 5 (FW version 1.4) via Vin (fully charged 12V battery), the power button doesn't work as expected. And, most of the time, the board doesn't wake up at planned startup date.
On press, nothing happens, or, sometimes, the white LED turns on for 20 seconds.
If I then plug a USB cable, press the button, the white LED turns on for 20 seconds, then I can press the button again to finally turn on my Raspberry. That weird behavior seems repeatable. Any idea what could cause that?
→ Model: WittyPi 5
→ Firmware: v1.4
→ Power source: Vin 13.40V
→ Default on power: Turn ON after 250s
→ Power cut delay: 10s
→ RTC: 2026-06-04 15:17:32 UTC
→ System: 2026-06-04 15:17:32 UTC
I went through the wp5-fat-full-eraser.uf2 procedure several times. One of the time it seemed to work properly for 2 or 3 on/off cycles, but then it started to act weird again.
Has anyone else noticed the same behavior from this board?
This does not look like a FAT filesystem corruption issue. The FAT eraser only helps when the emulated FAT filesystem is corrupted, and repeated erasing should not be needed for normal power control.
The white LED staying on for about 20~30 seconds sounds like Witty Pi 5 has entered the startup/shutdown waiting window. In this state the firmware is trying to start the Raspberry Pi, but it may not actually succeed in powering it from VIN.
The “Default on power: Turn ON after 250s” setting is unusual and may make the test results confusing. This option means that after Witty Pi 5 itself gets powered, it waits for the configured delay and then tries to turn on the Raspberry Pi automatically. It is not the same as a scheduled startup. For troubleshooting, please disable it first by setting it back to 255.
Since the behavior changes after connecting USB, I would first suspect the VIN power path or the VIN startup condition rather than the RTC schedule itself. The fact that VIN sometimes works suggests that the DC/DC converter is not broken. However, the 13.40V VIN reading alone does not prove that the battery can actually supply enough current during Raspberry Pi startup. A weak battery, high internal resistance, protection circuit limitation, bad wiring, or a poor connector can all produce a normal-looking no-load voltage but collapse under startup load.
Please test VIN with a bench power supply instead of the battery, using about the same voltage and a sufficiently high current limit. If the button and scheduled startup work reliably with the bench supply, the battery or its wiring/protection circuit is very likely the cause.
Also please measure the 5V output/VOUT during startup, not only VIN. The important question is whether the 5V rail remains stable when Witty Pi 5 tries to power the Raspberry Pi.
The most useful debugging information would be the log file (WittyPi5.log) after a failed button press or missed scheduled startup. This log file can be copied from the "Witty Pi 5" USB driver, when you connect Witty Pi 5 to your PC via USB-C cable, or can be downloaded by via the software when the Pi is up and running (run "wp5" and choose "13. Administrate...", and then choose "[7] Download log file...").
@admin I used a bench power supply set at 13.0V/2.0A → same results as with the battery. I can't see anything happening on the 5V output when pushing startup button (stays at 0V).
Fun fact: the WittyPy USB doesn't mount when plugged on my PC. So I downloaded the log file from wp5 on the Raspberry. Here it is:
[06-05 08:11:45.017] Button Down
[06-05 08:11:45.177] Button Up
[06-05 08:11:45.179] Switch to STARTING state.
[06-05 08:11:45.179] Unkown power source priority: 37
[06-05 08:11:45.265] No schedule script is found.
[06-05 08:11:45.268] Set Alarm 05 08:28 for shutdown
[06-05 08:11:49.907] Button Down
[06-05 08:11:49.907] Button Up
[06-05 08:11:49.908] Switch to STARTING state.
[06-05 08:11:49.909] Unkown power source priority: 37
[06-05 08:11:49.911] No schedule script is found.
[06-05 08:11:49.914] Set Alarm 05 08:28 for shutdown
[06-05 08:11:57.525] Button Down
[06-05 08:11:57.683] Button Up
[06-05 08:11:57.685] Switch to STARTING state.
[06-05 08:11:57.685] Unkown power source priority: 37
[06-05 08:11:57.770] No schedule script is found.
[06-05 08:11:57.773] Set Alarm 05 08:28 for shutdown
[06-05 08:12:02.002] Switch to ON state.
[06-05 08:12:05.604] Button Down
[06-05 08:12:05.764] Button Up
[06-05 08:12:05.764] Current state is already ON state.
[06-05 08:12:07.056] Switch to ON state.
[06-05 08:12:15.185] Switch to ON state.
[06-05 08:12:19.914] Switch to ON state.
[06-05 08:12:27.685] Switch to ON state.
[06-05 08:12:30.112] conf file info updated.
[06-05 08:12:30.561] Set Alarm2 to 05 08:32
[06-05 08:12:30.848] conf file info updated.
[06-05 08:12:31.341] t=33250, t_low=36000, t_high=0, status=1
[06-05 08:12:31.341] Received alert without status.
=======
Or, later: from power off to, at then end, power on:
[06-05 08:21:04.382] Button Down
[06-05 08:21:04.447] Button Up
[06-05 08:21:04.448] Switch to STOPPING state.
[06-05 08:21:04.451] No schedule script is found.
[06-05 08:21:04.453] Set Alarm 06 08:12 for startup
[06-05 08:21:04.699] t=34937, t_low=36000, t_high=0, status=1
[06-05 08:21:04.700] Received alert without status.
[06-05 08:21:05.990] t=34875, t_low=36000, t_high=0, status=0
[06-05 08:21:05.991] Received alert without status.
[06-05 08:21:07.351] t=34875, t_low=36000, t_high=0, status=1
[06-05 08:21:07.352] Received alert without status.
[06-05 08:21:08.713] t=34812, t_low=36000, t_high=0, status=0
[06-05 08:21:08.714] Received alert without status.
[06-05 08:21:10.074] t=34750, t_low=36000, t_high=0, status=1
[06-05 08:21:10.075] Received alert without status.
[06-05 08:21:11.436] t=34687, t_low=36000, t_high=0, status=0
[06-05 08:21:11.437] Received alert without status.
[06-05 08:21:12.798] t=34687, t_low=36000, t_high=0, status=1
[06-05 08:21:12.799] Received alert without status.
[06-05 08:21:14.160] t=34625, t_low=36000, t_high=0, status=0
[06-05 08:21:14.160] Received alert without status.
[06-05 08:21:15.521] t=34625, t_low=36000, t_high=0, status=1
[06-05 08:21:15.522] Received alert without status.
[06-05 08:21:16.883] t=34562, t_low=36000, t_high=0, status=0
[06-05 08:21:16.884] Received alert without status.
[06-05 08:21:18.245] t=34562, t_low=36000, t_high=0, status=1
[06-05 08:21:18.246] Received alert without status.
[06-05 08:21:19.607] t=34500, t_low=36000, t_high=0, status=0
[06-05 08:21:19.608] Received alert without status.
[06-05 08:21:20.969] t=34437, t_low=36000, t_high=0, status=1
[06-05 08:21:20.970] Received alert without status.
[06-05 08:21:22.331] t=34437, t_low=36000, t_high=0, status=0
[06-05 08:21:22.332] Received alert without status.
[06-05 08:21:23.693] t=34437, t_low=36000, t_high=0, status=1
[06-05 08:21:23.694] Received alert without status.
[06-05 08:21:25.055] t=34375, t_low=36000, t_high=0, status=0
[06-05 08:21:25.056] Received alert without status.
[06-05 08:21:26.417] t=34312, t_low=36000, t_high=0, status=1
[06-05 08:21:26.418] Received alert without status.
[06-05 08:21:28.023] t=34250, t_low=36000, t_high=0, status=0
[06-05 08:21:28.024] Received alert without status.
[06-05 08:21:29.385] t=34250, t_low=36000, t_high=0, status=1
[06-05 08:21:29.386] Received alert without status.
[06-05 08:21:30.747] t=34250, t_low=36000, t_high=0, status=0
[06-05 08:21:30.748] Received alert without status.
[06-05 08:21:32.109] t=34187, t_low=36000, t_high=0, status=1
[06-05 08:21:32.110] Received alert without status.
[06-05 08:21:33.470] t=34250, t_low=36000, t_high=0, status=0
[06-05 08:21:33.471] Received alert without status.
[06-05 08:21:34.833] t=34312, t_low=36000, t_high=0, status=1
[06-05 08:21:34.834] Received alert without status.
[06-05 08:21:36.195] t=34375, t_low=36000, t_high=0, status=0
[06-05 08:21:36.196] Received alert without status.
[06-05 08:21:37.428] Cut Raspberry Pi's power.
[06-05 08:21:37.429] Switch to OFF state.
[06-05 08:21:37.591] t=34437, t_low=36000, t_high=0, status=1
[06-05 08:21:37.592] Received alert without status.
[06-05 08:21:38.920] t=34437, t_low=36000, t_high=0, status=0
[06-05 08:21:38.921] Received alert without status.
[06-05 08:21:40.282] t=34500, t_low=36000, t_high=0, status=1
[06-05 08:21:40.283] Received alert without status.
[06-05 08:21:40.782] Button Down
[06-05 08:21:40.940] Button Up
[06-05 08:21:40.941] Switch to STARTING state.
[06-05 08:21:40.942] Unkown power source priority: 37
[06-05 08:21:41.028] No schedule script is found.
[06-05 08:21:41.031] Set Alarm 05 08:32 for shutdown
[06-05 08:21:41.645] t=34500, t_low=36000, t_high=0, status=0
[06-05 08:21:41.645] Received alert without status.
[06-05 08:21:43.007] t=34500, t_low=36000, t_high=0, status=1
[06-05 08:21:43.008] Received alert without status.
[06-05 08:21:44.369] t=34500, t_low=36000, t_high=0, status=0
[06-05 08:21:44.370] Received alert without status.
[06-05 08:21:44.649] Button Down
[06-05 08:21:44.803] Button Up
[06-05 08:21:44.805] Switch to STARTING state.
[06-05 08:21:44.805] Unkown power source priority: 37
[06-05 08:21:44.887] No schedule script is found.
[06-05 08:21:44.890] Set Alarm 05 08:32 for shutdown
[06-05 08:21:45.731] t=34437, t_low=36000, t_high=0, status=1
[06-05 08:21:45.732] Received alert without status.
[06-05 08:21:47.093] t=34437, t_low=36000, t_high=0, status=0
[06-05 08:21:47.094] Received alert without status.
[06-05 08:21:48.456] t=34375, t_low=36000, t_high=0, status=1
[06-05 08:21:48.456] Received alert without status.
[06-05 08:21:49.817] t=34375, t_low=36000, t_high=0, status=0
[06-05 08:21:49.818] Received alert without status.
[06-05 08:21:51.179] t=34312, t_low=36000, t_high=0, status=1
[06-05 08:21:51.180] Received alert without status.
[06-05 08:21:52.541] t=34250, t_low=36000, t_high=0, status=0
[06-05 08:21:52.542] Received alert without status.
[06-05 08:21:53.903] t=34250, t_low=36000, t_high=0, status=1
[06-05 08:21:53.904] Received alert without status.
[06-05 08:21:55.265] t=34250, t_low=36000, t_high=0, status=0
[06-05 08:21:55.266] Received alert without status.
[06-05 08:21:56.627] t=34250, t_low=36000, t_high=0, status=1
[06-05 08:21:56.628] Received alert without status.
[06-05 08:21:58.198] t=34250, t_low=36000, t_high=0, status=0
[06-05 08:21:58.199] Received alert without status.
[06-05 08:21:59.560] t=34187, t_low=36000, t_high=0, status=1
[06-05 08:21:59.561] Received alert without status.
[06-05 08:22:00.922] t=34187, t_low=36000, t_high=0, status=0
[06-05 08:22:00.923] Received alert without status.
[06-05 08:22:02.284] t=34125, t_low=36000, t_high=0, status=1
[06-05 08:22:02.285] Received alert without status.
[06-05 08:22:03.646] t=34125, t_low=36000, t_high=0, status=0
[06-05 08:22:03.647] Received alert without status.
[06-05 08:22:05.008] t=34062, t_low=36000, t_high=0, status=1
[06-05 08:22:05.009] Received alert without status.
[06-05 08:22:06.370] t=34062, t_low=36000, t_high=0, status=0
[06-05 08:22:06.371] Received alert without status.
[06-05 08:22:07.605] Button Down
[06-05 08:22:07.749] Button Up
[06-05 08:22:07.751] Switch to STARTING state.
[06-05 08:22:07.751] Unkown power source priority: 37
[06-05 08:22:07.754] No schedule script is found.
[06-05 08:22:07.756] Set Alarm 05 08:32 for shutdown
[06-05 08:22:07.757] t=34000, t_low=36000, t_high=0, status=1
[06-05 08:22:07.758] Received alert without status.
[06-05 08:22:09.095] t=34000, t_low=36000, t_high=0, status=0
[06-05 08:22:09.096] Received alert without status.
[06-05 08:22:10.457] t=33937, t_low=36000, t_high=0, status=1
[06-05 08:22:10.458] Received alert without status.
[06-05 08:22:10.913] Switch to ON state.
[06-05 08:22:11.820] t=33937, t_low=36000, t_high=0, status=0
[06-05 08:22:11.821] Received alert without status.
[06-05 08:22:13.182] t=33937, t_low=36000, t_high=0, status=1
[06-05 08:22:13.183] Received alert without status.
[06-05 08:22:14.544] t=33937, t_low=36000, t_high=0, status=0
[06-05 08:22:14.545] Received alert without status.
[06-05 08:22:14.777] Switch to ON state.
[06-05 08:22:15.849] Button Down
[06-05 08:22:15.995] Button Up
[06-05 08:22:15.996] Current state is already ON state. <=== Finally!
Any idea what could be the issue? (tests ran while powered with USB)
The log actually gives a very strong clue. The key line is:
Unkown power source priority: 37
The power source priority should only be 0 or 1:
- 0 = VUSB first
- 1 = VIN first
So the firmware is reading an invalid PS_PRIORITY value. When this happens, it does not select either VIN or VUSB as the power source, and therefore it does not turn on the 5V output. That matches your measurement: the 5V output stays at 0V when pressing the button.
You may confirm this value via the i2cget command:
i2cget -y 1 0x51 0x18
You most probably will see 0x25, which is 37 and is an invalid value.
The later “Switch to ON state” messages are misleading here. The startup request currently still starts the system-up timeout even when the actual power-on action failed. So after the timeout, the internal state may become ON, although the Raspberry Pi was never really powered.
Please check the content of "conf/WittyPi5.conf" file and look for the PS_PRIORITY item. It should be either:
"PS_PRIORITY":0
or:
"PS_PRIORITY":1
Please set it back to 0 or 1. For your test, I would suggest using 1 if you want VIN to have priority, or 0 if you want VUSB to have priority.
You may also set this value with i2cset command:
i2cset -y 1 0x51 0x18 0x00
or
i2cset -y 1 0x51 0x18 0x01
Also, please disable “Default on power” during testing by setting DEFAULT_ON_DELAY back to 255. That avoids another delayed startup source interfering with the test.
The USB-C power did not really bypass the invalid PS_PRIORITY setting in the normal startup path. What most likely happened is that the first failed startup request still moved the internal state machine to ON after the timeout. Then the next button press hit the “Current state is already ON state” branch, which directly sets GPIO_PI_POWER_CTRL high without checking PS_PRIORITY again. With VUSB already present, this can finally power the Raspberry Pi. With VIN-only this may still fail, because the DC/DC converter may not be enabled when PS_PRIORITY is invalid.
@admin I don't know why, but now it works when powered via Vin. Using wp5 software, I can see that priority is now given to Vusb... and it also works if I change it to Vin first. So, I guess, the register value has been corrupted and it was the reason why the board wouldn't start.
Using wp5 software, I did this at a given point: Administrate > Format Witty Pi disk. Could it be the reason why register 0x18 has been magically fixed?
Anyways, thanks for the help. I'll take extra steps to ensure the register 0x18 is equal to 0 or 1 every time my script turns the board off or sets a new shutdown date. (but maybe it could be a good idea to fix this single failure point by starting the board even if this register is not 0 nor 1)
Yes, “Administrate > Format Witty Pi disk” most likely explains why the issue disappeared.
The invalid value was probably stored in the configuration file on the Witty Pi FAT disk. Formatting the Witty Pi disk removes the old conf/WittyPi5.conf file. After that, when the firmware initializes the configuration again, it falls back to the default configuration, where PS_PRIORITY is 0, which means VUSB first.
So register 0x18 was not really “magically” fixed. It was most likely reloaded from the restored/default configuration after the old configuration file was removed.
PS_PRIORITY=37 was the reason why the board did not start. With that invalid value, the firmware could not select either VIN or VUSB as the power source, so the 5V output stayed off.
Checking register 0x18 in your script is a reasonable workaround, but normally this should not be necessary. We will improve the firmware so that PS_PRIORITY is validated. If the value is neither 0 nor 1, the firmware should fall back to a safe default value instead of refusing to start. Also, the startup state machine should not switch to ON if the actual power-on operation failed.
@admin Ok great, it explains everything I went through since last night. Thanks!
