No output to UART console when CONFIG_BT=y

There is no output to UART console when I set CONFIG_BT=y in prj.conf

peripheral_lbs sample project in ncs V2.0.2 can't printk anything.  

Parents
  • Hi,

    Unfortunately I cannot reproduce your issue.
    I just now tried a brand new application based on the NCS v2.0.2 peripheral_lbs example on both the nRF52DK and the nRF5340DK, and for both printk() worked and I got data on a Serial Port.
    I really don't think CONFIG_BT=y would break UART console, that would really not make sense.

    Are you developing on a Development Kit or on your custom board?

    By the way, as you requested, the prj.conf used to test:

    #
    # Copyright (c) 2018 Nordic Semiconductor
    #
    # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
    #
    CONFIG_NCS_SAMPLES_DEFAULTS=y
    
    CONFIG_BT=y
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_DEVICE_NAME="Nordic_LBS"
    
    # Enable the LBS service
    CONFIG_BT_LBS=y
    CONFIG_BT_LBS_POLL_BUTTON=y
    CONFIG_DK_LIBRARY=y
    
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
    

    Best regards,
    Hieu

Reply
  • Hi,

    Unfortunately I cannot reproduce your issue.
    I just now tried a brand new application based on the NCS v2.0.2 peripheral_lbs example on both the nRF52DK and the nRF5340DK, and for both printk() worked and I got data on a Serial Port.
    I really don't think CONFIG_BT=y would break UART console, that would really not make sense.

    Are you developing on a Development Kit or on your custom board?

    By the way, as you requested, the prj.conf used to test:

    #
    # Copyright (c) 2018 Nordic Semiconductor
    #
    # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
    #
    CONFIG_NCS_SAMPLES_DEFAULTS=y
    
    CONFIG_BT=y
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_DEVICE_NAME="Nordic_LBS"
    
    # Enable the LBS service
    CONFIG_BT_LBS=y
    CONFIG_BT_LBS_POLL_BUTTON=y
    CONFIG_DK_LIBRARY=y
    
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
    

    Best regards,
    Hieu

Children
  • P.s: Are you by any chance building with the example's prj_minimal.conf?

  • Hello Hieu, 

    Thanks for your quick response.  I have one more request.  Would you use the nrf5340dk_nrf5340_cpuapp.overlay    file to disable to UART console and see if you can still receive output.?  My problem seems to be complicated.  The UART on nRF5340DK always work even if I intentionally disable the UART or assign different TX and RX pins.   I am trying to make sure the overlay file can change the behavior first, then I will make correct adjustment on my own custom board. 

    I have more problem on my custom board, but one thing at a time.  I want to get the UART working in different configuration/overlay first.

    Thanks again.

    My own. nrf5340dk_nrf5340_cpuapp.overlay. for a different custom board, but nRF5340DK is unexpectly working fine with it, so something is wrong

    I may have mistakes in the overlay file


    &uart0 {
        //status = "okay";
        status = "disabled";
    	label = "UART_0";
    	current-speed = <115200>;		// 115200
        pinctrl-0 = <&uart0_default_alt>;
        pinctrl-1 = <&uart0_sleep_alt>;
        pinctrl-names = "default", "sleep";
    };
    
    
    &pinctrl {
        uart0_default_alt: uart0_default_alt {
            group1 {
                psels = <NRF_PSEL(UART_TX, 1, 1)>;		// P1.1 is TX
            };
            group2 {
                psels = <NRF_PSEL(UART_RX, 0, 29)>;		// P0.29 is RX
                bias-pull-up;
            };
        };
        uart0_sleep_alt: uart0_sleep_alt {
            group1 {
                psels = <NRF_PSEL(UART_TX, 1, 1)>,		// P1.1 is TX
                        <NRF_PSEL(UART_RX, 0, 29)>;		// P0.29 is RX
                low-power-enable;
            };
        };
    };
    

  • Hi,

    Sorry for being unable to keep on with the quick response. I broke my build environment somehow, and also had to learn a bit more on this topic.

    Anyway, things works now. What I observe is that if I simply disable UART0 using just .overlay file, the build won't even succeed, because the Kconfig CONFIG_CONSOLE_UART depends on it. If I turn that Kconfig off, UART console stopped completely as you would expect.

    If you are having a custom board, I believe the proper way would be to create your own .dts file for it rather than making .overlay to morph the nRF5340DK into your board.

    Best regards,
    Hieu 

  • Hello Hieu, 

    Thanks again for your quick response.  Just a follow up question.  Would Nordic fix this hard-coded bug which broke the overlay function or it would require Zephyr Project to fix it ? 

    Thanks, 

    JC

  • Hi JC,

    I think there is just a misunderstanding here that makes you see it as a bug. It is not really one.

    Device Tree specification, which the .dts and .overlay files are about, describes the hardware to the toolchain.
    Kconfig is to configure the software libraries and features used by your project.

    With that in mind, let's look at it again. We disabled UART in the hardware description through the overlay file.
    However, UART Console remains enabled in the Kconfig through default settings in nrf5340dk_nrf5340_cpuapp_defconfig.

    When the software library is built, the feature found that its necessary backend reference is not available. Of course the build process would complain, right?

    As an experiment, I keep UART0 disabled, and turned UART1 on instead and provided it to the UART Console feature. It works!

    / {
    
    	chosen {
    		zephyr,console = &uart1;
    		zephyr,shell-uart = &uart1;
    		zephyr,uart-mcumgr = &uart1;
    		zephyr,bt-mon-uart = &uart1;
    		zephyr,bt-c2h-uart = &uart1;
    	};
    };
    
    &uart0 {
    	// status = "okay";
        status = "disabled";
    	current-speed = <115200>;
    	pinctrl-0 = <&uart0_default>;
    	pinctrl-1 = <&uart0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &uart1 {
    	status = "okay";
    	compatible = "nordic,nrf-uarte";
    	current-speed = <115200>;
    	
    	// Map UART1 to UART0 default pins
    	pinctrl-0 = <&uart0_default>;
    	pinctrl-1 = <&uart0_sleep>;
    	pinctrl-names = "default", "sleep";
    };

    CONFIG_UART_CONSOLE=y

    I hope this clears thing up for you. I do agree that a lot of these setups are not very intuitive and obvious though. For example, I wouldn't notice CONFIG_UART_CONSOLE is enabled by nrf5340dk_nrf5340_cpuapp_defconfig if I wasn't using the VS Code Extension and see the GUI tooltips that pointed it out.

    If you are interested in getting a better grasp at these things, I recommend you to take a look at this course we created to help people getting started with the nRF Connect SDK: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/

    Best regards,
    Hieu

Related