This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SK-AM62: Bluetooth is not Working on SK-AM62 with WL1837MODG Chip – hci0 not Showing

Part Number: SK-AM62

Tool/software:

Hi TI-Team, 

I’m using the SK-AM62 evaluation board with the onboard Wi-Fi/Bluetooth chip (WL1837MODG). The system is running Linux, and Wi-Fi is working correctly.

However, I’m facing issues with the Bluetooth functionality. hci0 is not showing up, and when I run bluetoothctl, I get the following messages: 

Agent registered 
[bluetooth]# power on 
No default controller available 
[bluetooth]# scan on 
No default controller available

Here are some additional logs from my system: 

  • dmesg output related to Bluetooth:

[  164.438955] Bluetooth: Core ver 2.22 
[  164.442953] NET: Registered PF_BLUETOOTH protocol family 
[  164.448292] Bluetooth: HCI device and connection manager initialized 
[  164.454708] Bluetooth: HCI socket layer initialized 
[  164.459597] Bluetooth: L2CAP socket layer initialized 
[  164.464680] Bluetooth: SCO socket layer initialized

  • wl18xx driver error: 

[   10.444377] wl18xx_driver wl18xx.4.auto: Direct firmware load for ti-connectivity/wl18xx-conf.bin failed with error -2 
[   10.644345] wlcore: ERROR could not get configuration binary ti-connectivity/wl18xx-conf.bin: -2

  • lsmod output: 

wl18xx                114688  0 
wlcore                212992  1 wl18xx 
mac80211              548864  2 wl18xx,wlcore 
cfg80211              389120  3 wl18xx,wlcore,mac80211

In addition, here are the files present in /lib/firmware/ti-connectivity/: 

TIInit_6.2.31.bts      wl1251-nvs.bin       wl128x-fw-5-plt.bin 
TIInit_6.6.15.bts      wl1271-nvs.bin       wl128x-fw-5-sr.bin 
TIInit_7.2.31.bts      wl127x-fw-5-mr.bin   wl128x-nvs.bin 
cc33xx-conf.bin        wl127x-fw-5-plt.bin  wl12xx-nvs.bin 
cc33xx_2nd_loader.bin  wl127x-fw-5-sr.bin   wl18xx-fw-2.bin 
cc33xx_fw.bin          wl127x-nvs.bin       wl18xx-fw-3.bin

It seems like Bluetooth is initialized but not detected properly. Is there any specific firmware or configuration file required to enable Bluetooth on this chip?

I noticed that the configuration binary for wl18xx is failing to load.

Also, is there any change needed to the Device Tree Source (DTS) or enabling any buffers on the expansion header to ensure Bluetooth functionality?

Any help to resolve this issue would be greatly appreciated!

Best regards,

Kasun

  • Hi TI-Team,

    I’m working on a tight deadline and need to complete my project as soon as possible.

    Any Update on this, it would be greatly appreciated.

    Regards,

    Kasun

  • Hi Sabeeh,

    I have attached the modified k3-am625-sk.dts below.

    // SPDX-License-Identifier: GPL-2.0
    /*
     * AM625 SK: https://www.ti.com/lit/zip/sprr448
     *
     * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/
     */
    
    /dts-v1/;
    
    #include "k3-am62x-sk-common.dtsi"
    
    / {
    	compatible = "ti,am625-sk", "ti,am625";
    	model = "Texas Instruments AM625 SK";
    	
    	aliases {
    		serial4 = &main_uart1;
    	};	
    
    	opp-table {
    		/* Add 1.4GHz OPP for am625-sk board. Requires VDD_CORE to be at 0.85V */
    		opp-1400000000 {
    			opp-hz = /bits/ 64 <1400000000>;
    			opp-supported-hw = <0x01 0x0004>;
    			clock-latency-ns = <6000000>;
    		};
    		
    		
    	};
    
    
    
    	memory@80000000 {
    		device_type = "memory";
    		/* 2G RAM */
    		reg = <0x00000000 0x80000000 0x00000000 0x80000000>;
    
    	};
    
    	vmain_pd: regulator-0 {
    		/* TPS65988 PD CONTROLLER OUTPUT */
    		bootph-all;
    		compatible = "regulator-fixed";
    		regulator-name = "vmain_pd";
    		regulator-min-microvolt = <5000000>;
    		regulator-max-microvolt = <5000000>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vcc_5v0: regulator-1 {
    		/* Output of LM34936 */
    		bootph-all;
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_5v0";
    		regulator-min-microvolt = <5000000>;
    		regulator-max-microvolt = <5000000>;
    		vin-supply = <&vmain_pd>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vcc_3v3_sys: regulator-2 {
    		/* output of LM61460-Q1 */
    		bootph-all;
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_3v3_sys";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		vin-supply = <&vmain_pd>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vdd_mmc1: regulator-3 {
    		/* TPS22918DBVR */
    		bootph-all;
    		compatible = "regulator-fixed";
    		regulator-name = "vdd_mmc1";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		regulator-boot-on;
    		enable-active-high;
    		vin-supply = <&vcc_3v3_sys>;
    		gpio = <&exp1 3 GPIO_ACTIVE_HIGH>;
    	};
    
    	vdd_sd_dv: regulator-4 {
    		/* Output of TLV71033 */
    		bootph-all;
    		compatible = "regulator-gpio";
    		regulator-name = "tlv71033";
    		pinctrl-names = "default";
    		pinctrl-0 = <&vdd_sd_dv_pins_default>;
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <3300000>;
    		regulator-boot-on;
    		vin-supply = <&vcc_5v0>;
    		gpios = <&main_gpio0 31 GPIO_ACTIVE_HIGH>;
    		states = <1800000 0x0>,
    			 <3300000 0x1>;
    	};
    
    	vcc_1v8: regulator-5 {
    		/* output of TPS6282518DMQ */
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_1v8";
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <1800000>;
    		vin-supply = <&vcc_3v3_sys>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    };
    
    &main_uart1 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_uart1_pins_custom &mcu_bt_en_pins_default>;
    
    	bluetooth {
    		enable-gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;
    	};
    };
    
    
    &mcu_pmx0 {
    	mcu_bt_en_pins_default: bt-en-pins-default {
    		pinctrl-single,pins = <
    			AM62X_MCU_IOPAD(0x000, PIN_OUTPUT, 7) /* MCU_SPI0_CS0.MCU_GPIO0_0 */ 
    		>;
    	};
    };
    
    &main_pmx0 {
    	main_rgmii2_pins_default: main-rgmii2-default-pins {
    		bootph-all;
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x184, PIN_INPUT, 0) /* (AE23) RGMII2_RD0 */
    			AM62X_IOPAD(0x188, PIN_INPUT, 0) /* (AB20) RGMII2_RD1 */
    			AM62X_IOPAD(0x18c, PIN_INPUT, 0) /* (AC21) RGMII2_RD2 */
    			AM62X_IOPAD(0x190, PIN_INPUT, 0) /* (AE22) RGMII2_RD3 */
    			AM62X_IOPAD(0x180, PIN_INPUT, 0) /* (AD23) RGMII2_RXC */
    			AM62X_IOPAD(0x17c, PIN_INPUT, 0) /* (AD22) RGMII2_RX_CTL */
    			AM62X_IOPAD(0x16c, PIN_OUTPUT, 0) /* (Y18) RGMII2_TD0 */
    			AM62X_IOPAD(0x170, PIN_OUTPUT, 0) /* (AA18) RGMII2_TD1 */
    			AM62X_IOPAD(0x174, PIN_OUTPUT, 0) /* (AD21) RGMII2_TD2 */
    			AM62X_IOPAD(0x178, PIN_OUTPUT, 0) /* (AC20) RGMII2_TD3 */
    			AM62X_IOPAD(0x168, PIN_OUTPUT, 0) /* (AE21) RGMII2_TXC */
    			AM62X_IOPAD(0x164, PIN_OUTPUT, 0) /* (AA19) RGMII2_TX_CTL */
    		>;
    	};
    
    	main_uart1_pins_custom: main-uart1-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x1ac, PIN_INPUT, 2) /* (E19) MCASP0_AFSR.UART1_RXD */
    			AM62X_IOPAD(0x1b0, PIN_OUTPUT, 2) /* (A20) MCASP0_ACLKR.UART1_TXD */
    			AM62X_IOPAD(0x198, PIN_OUTPUT, 2) /* (A19) MCASP0_AXR2.UART1_RTSn */
    			AM62X_IOPAD(0x194, PIN_INPUT, 2) /* (B19) MCASP0_AXR3.UART1_CTSn */
    		>;
    	};
    
    	ospi0_pins_default: ospi0-default-pins {
    		bootph-all;
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x000, PIN_OUTPUT, 0) /* (H24) OSPI0_CLK */
    			AM62X_IOPAD(0x02c, PIN_OUTPUT, 0) /* (F23) OSPI0_CSn0 */
    			AM62X_IOPAD(0x00c, PIN_INPUT, 0) /* (E25) OSPI0_D0 */
    			AM62X_IOPAD(0x010, PIN_INPUT, 0) /* (G24) OSPI0_D1 */
    			AM62X_IOPAD(0x014, PIN_INPUT, 0) /* (F25) OSPI0_D2 */
    			AM62X_IOPAD(0x018, PIN_INPUT, 0) /* (F24) OSPI0_D3 */
    			AM62X_IOPAD(0x01c, PIN_INPUT, 0) /* (J23) OSPI0_D4 */
    			AM62X_IOPAD(0x020, PIN_INPUT, 0) /* (J25) OSPI0_D5 */
    			AM62X_IOPAD(0x024, PIN_INPUT, 0) /* (H25) OSPI0_D6 */
    			AM62X_IOPAD(0x028, PIN_INPUT, 0) /* (J22) OSPI0_D7 */
    			AM62X_IOPAD(0x008, PIN_INPUT, 0) /* (J24) OSPI0_DQS */
    		>;
    	};
    
    	vdd_sd_dv_pins_default: vdd-sd-dv-default-pins {
    		bootph-all;
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x07c, PIN_OUTPUT, 7) /* (P25) GPMC0_CLK.GPIO0_31 */
    		>;
    	};
    
    	main_gpio1_ioexp_intr_pins_default: main-gpio1-ioexp-intr-default-pins {
    		bootph-all;
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x01d4, PIN_INPUT, 7) /* (B15) UART0_RTSn.GPIO1_23 */
    		>;
    	};
    };
    
    
    &main_gpio0 {
    	bootph-all;
    };
    
    &main_gpio1 {
    	bootph-all;
    };
    
    &main_i2c1 {
    	bootph-all;
    	exp1: gpio@22 {
    		bootph-all;
    		compatible = "ti,tca6424";
    		reg = <0x22>;
    		gpio-controller;
    		#gpio-cells = <2>;
    		gpio-line-names = "GPIO_CPSW2_RST", "GPIO_CPSW1_RST",
    				   "PRU_DETECT", "MMC1_SD_EN",
    				   "VPP_LDO_EN", "EXP_PS_3V3_En",
    				   "EXP_PS_5V0_En", "EXP_HAT_DETECT",
    				   "GPIO_AUD_RSTn", "GPIO_eMMC_RSTn",
    				   "UART1_FET_BUF_EN", "WL_LT_EN",
    				   "GPIO_HDMI_RSTn", "CSI_GPIO1",
    				   "CSI_GPIO2", "PRU_3V3_EN",
    				   "HDMI_INTn", "PD_I2C_IRQ",
    				   "MCASP1_FET_EN", "MCASP1_BUF_BT_EN",
    				   "MCASP1_FET_SEL", "UART1_FET_SEL",
    				   "TSINT#", "IO_EXP_TEST_LED";
    
    		interrupt-parent = <&main_gpio1>;
    		interrupts = <23 IRQ_TYPE_EDGE_FALLING>;
    		interrupt-controller;
    		#interrupt-cells = <2>;
    
    		pinctrl-names = "default";
    		pinctrl-0 = <&main_gpio1_ioexp_intr_pins_default>;
    	    buf_en {
    			gpio-hog;
    			gpios = <10 GPIO_ACTIVE_LOW>;
    			output-high;
    			line-name = "UART1_BUF_EN";
    		};
    	};
    };
    
    &sdhci1 {
    	vmmc-supply = <&vdd_mmc1>;
    	vqmmc-supply = <&vdd_sd_dv>;
    };
    
    &cpsw3g {
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_rgmii1_pins_default
    		     &main_rgmii2_pins_default>;
    
    	cpts@3d000 {
    		/* MAP HW3_TS_PUSH to GENF1 */
    		ti,pps = <2 1>;
    	};
    };
    
    &cpsw_port2 {
    	phy-mode = "rgmii-rxid";
    	phy-handle = <&cpsw3g_phy1>;
    };
    
    &cpsw3g_mdio {
    	cpsw3g_phy1: ethernet-phy@1 {
    		reg = <1>;
    		ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
    		ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
    		ti,min-output-impedance;
    	};
    };
    
    &mailbox0_cluster0 {
    	mbox_m4_0: mbox-m4-0 {
    		ti,mbox-rx = <0 0 0>;
    		ti,mbox-tx = <1 0 0>;
    	};
    };
    
    &fss {
    	bootph-all;
    };
    
    &ospi0 {
    	bootph-all;
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&ospi0_pins_default>;
    
    	flash@0 {
    		bootph-all;
    		compatible = "jedec,spi-nor";
    		reg = <0x0>;
    		spi-tx-bus-width = <8>;
    		spi-rx-bus-width = <8>;
    		spi-max-frequency = <25000000>;
    		cdns,tshsl-ns = <60>;
    		cdns,tsd2d-ns = <60>;
    		cdns,tchsh-ns = <60>;
    		cdns,tslch-ns = <60>;
    		cdns,read-delay = <4>;
    
    		partitions {
    			bootph-all;
    			compatible = "fixed-partitions";
    			#address-cells = <1>;
    			#size-cells = <1>;
    
    			partition@0 {
    				label = "ospi.tiboot3";
    				reg = <0x0 0x80000>;
    			};
    
    			partition@80000 {
    				label = "ospi.tispl";
    				reg = <0x80000 0x200000>;
    			};
    
    			partition@280000 {
    				label = "ospi.u-boot";
    				reg = <0x280000 0x400000>;
    			};
    
    			partition@680000 {
    				label = "ospi.env";
    				reg = <0x680000 0x40000>;
    			};
    
    			partition@6c0000 {
    				label = "ospi.env.backup";
    				reg = <0x6c0000 0x40000>;
    			};
    
    			partition@800000 {
    				label = "ospi.rootfs";
    				reg = <0x800000 0x37c0000>;
    			};
    
    			partition@3fc0000 {
    				bootph-pre-ram;
    				label = "ospi.phypattern";
    				reg = <0x3fc0000 0x40000>;
    			};
    		};
    	};
    };
    
    &mcu_gpio0 {
    status = "okay";
    };
    &mcu_gpio_intr {
    status = "okay";
    };
    
    &tlv320aic3106 {
    	DVDD-supply = <&vcc_1v8>;
    };
    
    #define K3_TS_OFFSET(pa, val)	(0x4+(pa)*4) (0x10000 | val)
    
    &timesync_router {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&cpsw_cpts>;
    
    	/* Use Time Sync Router to map GENF1 input to HW3_TS_PUSH output */
    	cpsw_cpts: cpsw-cpts {
    		pinctrl-single,pins = <
    			/* pps [cpsw cpts genf1] in17 -> out12 [cpsw cpts hw3_push] */
    			K3_TS_OFFSET(12, 17)
    			>;
    	};
    };
    
    
    

    Also I tested BT_EN_SOC from a multimeter. It was active HIGH. But I'm getting following output.

    Agent registered 
    [bluetooth]# power on 
    No default controller available 
    [bluetooth]# scan on 
    No default controller available

    Also, no any hci0 device is shown when hciconfig is typed on the terminal.

    The timed out message is shown when " hciattach ttyS4 texas -s 115200 "

    Could you please help me in this.

    Thank you.

    Regards,

    Kasun

  • Hi Kasun,

    This line:

    enable-gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;

    Is not correct. Should be pin '0' instead of '1'. 

    After applying this change, please check that BT_EN pin is going HIGH on the wl18xxMOD when the hciattach command is executed. 

  • Hi Sabeeh,

    I think it should be "1". refer the below image which is from the user guide.

  • Hi Kasun.

    You can confirm the difference from the schematic. 

  • Hi Sabeeh,

    I got it.

    I am unable to enable BT yet. BT_EN is active HIGH. 

    I did the same as your answer. But still BT is not working.

    Anything else to do?

  • HI Kasun, 
    Which AM62x board are you using? 

  • Hi Kasun,

    Did you execute 'hciattach ttyS4 texas -s 115200"? Do you still see timeout?

  • Can you try ttyS1 as well?

  • both shows timeout

  • My only other suggestion would be to provide logic analyzer capture of BT_EN, main_uart1_rts, and main_uart1_cts. For some reason these pins are not getting set correctly on the wl18xx side.