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.  

  • It seems the bootloader read the nrf5340dk_nrf5340_cuppapp.overlay file with no problem, so the bootloader can print *** Booting Zephyr OS build v3.1.99-ncs1 *** message.  However,  zephyr may have problem using the nrf5340dk_nrf5340_cuppapp.overlay, so it is still using pin configured for nrf5340dk.  The zephyr application is running with the debugger.  Just with no output to uart console.  Still debugging this problem.  Any clue and suggestion will be appreciated.

  • There are some UART0 registers is the data sheet.   Going thru functions call stack to find out which function call is making some changes ??

    19 0x41013000 UARTE UARTE0 NS NA Universal asynchronous receiver/transmitter

    0x50008000 0x40008000 UARTE UARTE0 : S UARTE0 : NS US SA Universal asynchronous receiver/tra

  • Hi JC,

    I am not sure we are on the same page at the moment. Here is my current understanding about your current situation:

    • You currently have UART0 with the following pins:
      • TX at P1.01
      • RX at P0.29
      • You are using .overlay file to achieve this
      • You do see the log *** Booting Zephyr OS build v3.1.99-ncs1 ***
      • You do not see the application's UART console/printk
    • You are still testing on the nRF5340 DK
    • You are not using UART flow control (no mention of RTS/CTS)

    If there is anything wrong above, please correct me.

    Assuming my understanding above is correct, below I will give some facts that might help

    • When the PC connects to the nRF5340 DK, it does not directly connect to the nRF53 chip under test.
      It connects to the Virtual COM (VCOM) ports on the Interface MCU.
      On nRF5340 DK revision 1, there are three VCOM ports.
      On nRF5340 DK revision 2, there are two VCOM ports. (*1)
      For more information, refer to the links above and also the schematic files.

    • The application examples that use UART to log, out of the box, are almost always configured to connect to one same VCOM port. In the schematic, this is named VCOM2.

      To talk to VCOM2, your UART pins must be configured as follow:
      • TX at P0.20
      • RX at P0.22
      • If using flow control, RTS at P0.19
      • If using flow control, CTS at P0.21

    • Unfortunately there are no VCOM ports connect to the pins you are using (P0.01 and P0.29).
      If you wish to see UART console with those pins, you will have to rely on an UART-to-USB board. (*2)

    • The bootloader was not affected by the application .overlay file. That is why the bootloader can use the default pin and send data to the Virtual COM port, and you can see *** Booting Zephyr OS build v3.1.99-ncs1 ***

    • Your application was affected by the application .overlay file. That is why the application is sending data to P1.1 and P0.29, not to the Virtual COM port. Therefore you don't see any log from the application printk.

    I hope the above information is sufficient for you to understand what is going on. If you are interested, be low I will also expand on some extra things you can do.

    Notes (more advanced "ways to discover" the problem):

    • (*1): All nRF5340 DKs also support one/two more Virtual COM port. While they cannot be used to test your exact configuration, they can be used to test if your direction is correct.

      By design, the port named VCOM0 on the schematic is connected to the default pins of UART1. This can be used to prove that the way you are configuring new UART pins works, without the need of an extra UART-to-USB board.

      Unfortunately, by default, UART1 along with its default pins are given to the Network Core. This configuration is in nrf5340_cpuapp_common.dts.
      	gpio_fwd: nrf-gpio-forwarder {
      		compatible = "nordic,nrf-gpio-forwarder";
      		status = "okay";
      		uart {
      			gpios = <&gpio1 1 0>, <&gpio1 0 0>, <&gpio0 11 0>, <&gpio0 10 0>;
      		};
      	};

      Therefore you would have to perform a few extra steps.

      • Disable the nrf-gpio-forwarder in your overlay/dts file

      • Disable serial functionalities in the network core
        • For example, by creating Kconfig file <Project Root>/child_image/hci_rpmsg.conf, in which you write CONFIG_SERIAL=n
        • If you create the file as above, remember to make a pristine build so that the toolchain can detect the new file

      • Configure your UART peripheral to this 2nd VCOM port
        • TX at P1.01
        • RX at P1.00
        • RTS at P0.11
        • CTS at P0.10

    • (*2): You can rewire the DK to your desire pins by disconnecting/connecting a few solder bridges and wires.
      • This will change your board completely, and you do risk breaking it. 
      • If you chose this method, please do so fully aware of and owning the risk.
      • If you modified the board successfully, always keep that in mind to prevent confusions in future development and support cases.

    Best regards,

    Hieu

  • Hello Hieu,

    I am a bit confused too, so I step back to check on my build tool and test setup first.

    There are three virtual com from nRF5340DK

    When I run peripheral_lbs  onnRF5340DK.  One com port shows the the output from the AppCore

    *** Booting Zephyr OS build v3.1.99-ncs1 ***
    Starting Bluetooth Peripheral LBS example
    I: 2 Sectors of 4096 bytes
    I: alloc wra: 0, fc8
    I: data wra: 0, 2c
    I: No ID address. App must call settings_load()
    Bluetooth initialized
    Advertising successfully started

    and another com port shows

    *** Booting Zephyr OS build v3.1.99-ncs1  ***

    and I think this may be from the NetCore

    I am back to square 0 to restart the whole debugging process slowly now.

  • You read my mind and I was exactly in that situation.  Thanks for your info which helps directing my thought on the debugging process.  Let me regroup with your suggestions first before moving forward

Related