Bluetooth broadcast errors in low and high temperature conditions

Hi,

     SDK:ncs2.6.1. The main program runs in the app core, and the net core is included as a child image. The Bluetooth broadcast is normal when tested at room temperature, but after being tested in the high and low temperature box, it is found that the Bluetooth broadcast suddenly disappears when tested below -30℃ and 60℃. At present, it is suspected that it is because of the external high-speed crystal problem.

What I want to ask is that

① when do most of these problems appear, may be the hardware configuration, software configuration problems?

② How can I solve this problem?

The app core is configured as follows:

# External clock
CONFIG_SOC_ENABLE_LFXO=y
# CONFIG_SOC_LFXO_CAP_EXTERNAL=y
# CONFIG_SOC_LFXO_CAP_INT_6PF=y
# CONFIG_SOC_LFXO_CAP_INT_7PF=y
# CONFIG_SOC_LFXO_CAP_INT_9PF=y
# CONFIG_SOC_HFXO_CAP_DEFAULT=y
# CONFIG_SOC_HFXO_CAP_EXTERNAL=y
CONFIG_SOC_HFXO_CAP_INTERNAL=y
CONFIG_SOC_HFXO_CAP_INT_VALUE_X2=24
app.overlay:
&clock {
    status = "okay";	
	lfxo: lfxo {
		// source = "LFXO";
		compatible = "nordic,nrf-lfxo";
		#clock-cells = <0>;
		clock-frequency = <32768>;
		// zephyr,pm-device-runtime-auto;
		status = "okay";
	};

	hfxo: hfxo {
		// source = "HFXO";   
		compatible = "nordic,nrf-hfxo";
		#clock-cells = <0>;
		clock-frequency = <DT_FREQ_M(32)>;
		// zephyr,pm-device-runtime-auto;
		status = "okay";
	};	
};
net_core.overlay:
&gpiote {
	status = "disabled";
};

&gpio0 {
	status = "disabled";
};

&gpio1 {
	status = "disabled";
};

&uart0 {
	status = "disabled";
};

arduino_serial: &uart0{
	status = "disabled";
};


&ieee802154 {
	status = "disabled";
};

&wdt {
	status = "okay";
};

&rng {
	status = "okay";
};

&radio {
	status = "okay";
};

&temp {
	status = "disabled";
};
Parents
  • Hello,
    Kazi asked me to have a look at this case on her behalf. I've read through, but I might have missed some information, I apologize if I have. From my point of view this sounds like a HW issue with the HFCLK. HFCLK supplies the clock to the radio and if it is wrong/off the TX/RX operations will be faulty. You could end up with part of the transmission being off intended frequency and hence the receiver doesn't see it or vice versa, the RX frequency is off, so it is listening to the wrong frequency.
    It sounds like you have a setup to recreate the issue, so I would like to ask you to check the HFCLK start up time and see if it changes across temperature. The procedure would be to do the following:
    GPIO toggle at HFCLK_START and HFCLK_READY
    • Check timing at room temperature
    • Compare to timing in 20 degree steps going down/up towards the temperature where the issue is visible.
    • Check with scope on the gpio.
    • Goal is to see how the startup time of the HFCLK is affected by temperature change.
    Code along the lines of this just to show the idea. You would have to add gpio that fits for you.
       // Start high frequency clock
      // Toggle GPIO again at HFCLSTART (HFCLKSTART event)
       gpio_pin_toggle(gpio_dev, GPIO_PIN);
     NRF_CLOCK->TASKS_HFCLKSTART = 1;
       
       // Wait for HFCLK to start
       while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) {
           // Wait for HFCLK to start
       }
     
       // Toggle GPIO again at HFCLKREADY (HFCLKSTARTED event)
       gpio_pin_toggle(gpio_dev, GPIO_PIN);
    Second thought was load capacitance on the 32MHz crystal. You're using external components, if they are wrong or/and if internal ones are configured at the same time, the crystal frequency will be pulled. It might still be ok at some temperatures, but at high and low temps it might pull the frequency far enough out of spec that the carrier becomes too far off for successfully run BLE. This would require a spectrum analyser to confirm the frequency of the carrier. I don't know if you have that available, but the procedure would be along the following lines:
    Load capacitor on the 32M crystal, external are there, are you also using internal? 
    • Check frequency accuracy of the carrier in room temperature. You can use radio_test example. Set unmodulated carrier at for example channel 27 using BLE_1Mbit. The carrier should then be at frequency 2427MHz. Radio_test: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/samples/peripheral/radio_test/README.html
    • Check at room temperature and compare with frequency seen at problem temperature. Make sure you restart the carrier before every test. (Run "cancel" and then "start_tx_carrier".    
    • Goal is to see the accuracy of the carrier at different temperatures.
    Best regards
    Asbjørn
  • Thank you for your response. Regarding the first idea, I will review it and look for an opportunity to verify it. As for the second idea, we utilized an internal load capacitor of 12 pF, and it is feasible to test it using a spectrum analyzer at both high and low temperatures.

Reply Children
No Data
Related