Jump to content

Recommended Posts

Posted

I've got Orange Pi 2W board and installed Debian 12 Home Assistant image to it (image link). There is a huge problem with it. Very often there is no bluetooth module appeared in system. I need to reboot system for 10-15 timer to make it work. What can be a reason?

I attached 2 boot logs (with good BT appears and no BT appears), I hope it will help to find out the issue.

 

boot_log_bt_good_02.zip

boot_log_bt_bad_02.zip

Posted

Hi,

 

without owning this board, chatgpt is pointing out to an initialisation issue of the bluetooth system caused by the GPIO pin not being correctly handled at boot.

 [    6.024062] WCN: marlin chip en dummy pull up -- need manually set GPIO 

The correct solution would be to handle the init in the dtb file, but you can try the following systemd initialisation as a workaround to see if it works.

 

Create (as root) the following service file /etc/systemd/system/bt-gpio.service with the contents:

[Unit]
Description=Enable GPIO for Bluetooth chip
Before=bluetooth.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo 225 > /sys/class/gpio/export || true; echo out > /sys/class/gpio/gpio225/direction; echo 1 > /sys/class/gpio/gpio225/value'

[Install]
WantedBy=multi-user.target

Then enable it (as root):

systemctl daemon-reexec
systemctl daemon-reload
systemctl enable bt-gpio.service

Reboot and check if the bluetooth starts correctly. Post the boot log if it does not.

 

Posted

I did not see the bt-gpio service starting on boot.

Can you post the status ?

 

On 6/9/2025 at 8:28 AM, IBV said:
systemctl status bt-gpio.service

 

Posted
user@orangepizero2w:~$ systemctl status bt-gpio.service
× bt-gpio.service - Enable GPIO for Bluetooth chip
     Loaded: loaded (/etc/systemd/system/bt-gpio.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Tue 2025-06-10 23:18:23 +03; 11h ago
    Process: 489 ExecStart=/bin/sh -c echo 225 > /sys/class/gpio/export || true; echo out > /sys/class/gpio/gpio225/direction; echo 1 > /sys/class/gpio/gpio225/value (code=exited, status=2)
   Main PID: 489 (code=exited, status=2)
        CPU: 5ms

jun 10 23:18:23 orangepizero2w systemd[1]: Starting bt-gpio.service - Enable GPIO for Bluetooth chip...
jun 10 23:18:23 orangepizero2w sh[489]: /bin/sh: 1: echo: echo: I/O error
jun 10 23:18:23 orangepizero2w sh[489]: /bin/sh: 1: cannot create /sys/class/gpio/gpio225/direction: Directory nonexistent
jun 10 23:18:23 orangepizero2w sh[489]: /bin/sh: 1: cannot create /sys/class/gpio/gpio225/value: Directory nonexistent
jun 10 23:18:23 orangepizero2w systemd[1]: bt-gpio.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
jun 10 23:18:23 orangepizero2w systemd[1]: bt-gpio.service: Failed with result 'exit-code'.
jun 10 23:18:23 orangepizero2w systemd[1]: Failed to start bt-gpio.service - Enable GPIO for Bluetooth chip.

 

Also I attached boot log which is connected to that "systemctl status bt-gpio.service" command.

 

bt_fail_boot_log_3.txt

 

 

When the board was boot correctly (BT is working fine) the output looks the same:

user@orangepizero2w:~$ systemctl status bt-gpio.service
× bt-gpio.service - Enable GPIO for Bluetooth chip
     Loaded: loaded (/etc/systemd/system/bt-gpio.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Wed 2025-06-11 11:04:21 +03; 1min 30s ago
    Process: 492 ExecStart=/bin/sh -c echo 225 > /sys/class/gpio/export || true; echo out > /sys/class/gpio/gpio225/direction; echo 1 > /sys/class/gpio/gpio225/value (code=exited, status=2)
   Main PID: 492 (code=exited, status=2)
        CPU: 5ms

jun 11 11:04:21 orangepizero2w systemd[1]: Starting bt-gpio.service - Enable GPIO for Bluetooth chip...
jun 11 11:04:21 orangepizero2w sh[492]: /bin/sh: 1: echo: echo: I/O error
jun 11 11:04:21 orangepizero2w sh[492]: /bin/sh: 1: cannot create /sys/class/gpio/gpio225/direction: Directory nonexistent
jun 11 11:04:21 orangepizero2w sh[492]: /bin/sh: 1: cannot create /sys/class/gpio/gpio225/value: Directory nonexistent
jun 11 11:04:21 orangepizero2w systemd[1]: bt-gpio.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
jun 11 11:04:21 orangepizero2w systemd[1]: bt-gpio.service: Failed with result 'exit-code'.
jun 11 11:04:21 orangepizero2w systemd[1]: Failed to start bt-gpio.service - Enable GPIO for Bluetooth chip.

 

Posted
sudo armbian-config

Are you able to see the below overlays ? If yes, activate them.

System → Hardware/Kernel → Activate UART0, UART1, BT overlays

Posted

Ok,

 

if you want we can try one more thing. According to AI, the correct way to always enable the bluetooth is to do it via a custom overlay, which is not done.

 

First, remove the bt-gpio.service, it does not help:

sudo sytemctl disable bt-gpio.service
sudo rm /etc/systemd/system/bt-gpio.service
sudo systemctl daemon-reload 

 

Then, create the custom overlay file /boot/overlay-user/bt_enable_ph1.dts with the following content:

/dts-v1/;
/plugin/;

&pio {
    bt_en_pin: bt_en_pin {
        pins = "PH1";
        function = "gpio_out";
        bias-pull-up;
        output-high;
    };
};

&uart0 {
    pinctrl-names = "default";
    pinctrl-0 = <&uart0_pins>;
    status = "okay";
};

&wcn_bt {
    compatible = "wcn,bt";
    uart = <&uart0>;
    enable-gpios = <&pio 7 1 GPIO_ACTIVE_HIGH>;  // PH1 = GPIO 225
    status = "okay";
};

Then we can try to compile and install it:

sudo armbian-add-overlay /boot/overlay-user/bt_enable_ph1.dts

Then activate it in /boot/armbianEnv.txt, add the following line:

user_overlays=bt_enable_ph1

If all works well try to reboot and see what happens.

 

Posted
sudo armbian-add-overlay /boot/overlay-user/bt_enable_ph1.dts
Compiling the overlay
Error: /boot/overlay-user/bt_enable_ph1.dts:22.30-31 syntax error
FATAL ERROR: Unable to parse input tree
Error compiling the overlay

 

Unfortunately, I didn't understand what the error is.

Posted

Ok, replace the contents of the dts file with this:

/dts-v1/;
/plugin/;

/ {
    fragment@0 {
        target = <&pio>;
        __overlay__ {
            bt_enable_pin: bt_enable_pin {
                pins = "PH1";
                function = "gpio_out";
                bias-pull-up;
                output-high;
            };
        };
    };
};

And try again the steps

Posted

Ok,

 

create a new dts /boot/overlay-user/bt_enable_full.dts

 

/dts-v1/;
/plugin/;

&pio {
    bt_en_pin: bt_en_pin {
        pins = "PH1";
        function = "gpio_out";
        bias-pull-up;
        output-high;
    };

    bt_wake_pin: bt_wake_pin {
        pins = "PH0";
        function = "gpio_in";
        bias-pull-up;
    };
};

&{/soc} {
    wcn_bt: wcn_bt@0 {
        compatible = "wcn,bt";
        status = "okay";
        enable-gpios = <&pio 7 1 GPIO_ACTIVE_HIGH>; // PH1 = GPIO225
        wake-gpios = <&pio 7 0 GPIO_ACTIVE_HIGH>;   // PH0 = GPIO224 (if connected)
    };
};

And compile it:

sudo armbian-add-overlay /boot/overlay-user/bt_enable_full.dts

Then enable it in /boot/armbianEnv.txt

user_overlays=bt_enable_full

See if there's an improvement on boot.

Posted
sudo armbian-add-overlay /boot/overlay-user/bt_enable_full.dts
Compiling the overlay
Error: /boot/overlay-user/bt_enable_full.dts:23.34-35 syntax error
FATAL ERROR: Unable to parse input tree
Error compiling the overlay

 

 Ok, I guess the problem was in "GPIO_ACTIVE_HIGH" macros. So I changed them to "1". File has compiled and I begun to test the board.

Two times in row the board booted ok, but next time BT has failed.

Posted

Ok, try with this dts file /boot/overlay-user/bt_enable_clean.dts

/dts-v1/;
/plugin/;

&pio {
    bt_en_pin: bt_en_pin {
        pins = "PH1";                  // GPIO225
        function = "gpio_out";
        bias-pull-up;
        drive-strength = <20>;
        output-high;
    };
};

Compile it:

sudo armbian-add-overlay /boot/overlay-user/bt_enable_clean.dts

and enable it in /boot/armbianEnv.txt

user_overlays=bt_enable_clean

Then see if better on reboot.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines