This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Works OK on the DK, but not on my custom board (no radio) - NRF52832 wlcsp

Hi fellow devs:)
I'd really appreciate some advice on this please. I've come to a bit of a dead-end.
Hopefully you can spot a mistake I've made.

I am trying to produce a low cost mass producible device which basically measures temperature and broadcasts the beacon data at 1 sec intervals. Pretty simple...
Energy harvesting from a nearby induction field will charge 2 supercapacitors, which power-up the bluetooth chip.
The charging side of it works ok, but for my tests I am just using a bench power supply. I have designed a custom board, long and thin, only 5mm width. That's why I chose the small 3mm WL-CSP.

My application code works just fine on the DK, radio working, advertising works.
But it does not work on my custom board. I actually made 10 boards, and all of them have the same problem.

DK: NRF52832 QFN package. Both a 32MHz and 32.768KHz crystal.
My PCB: NRF52832 WL-CSP. Only 32MHz crystal mounted.

My custom board setup:
VDD-NRF: 3.0V
SWD: Programs OK via DK NRF-Programmer.
Application: Beacon, reporting temperature data.
Problem: No radio (Advertising not found in nrf connect phone app). 

Strange symptom with my custom boards:
Advertising is briefly noticed in the nrf connect app (with scanning mode running) only during programming. After programming, nothing is seen from the radio again.
I repeated this test and monitored brief bursts of activity on the 32MHz clock





  

      


Link to the Schematic PDF


And here is my Prj.conf

CONFIG_ADC=y
CONFIG_ADC_ASYNC=y
CONFIG_ADC_LOG_LEVEL_INF=y
CONFIG_ADC_NRFX_ADC_CHANNEL_COUNT=3

CONFIG_GPIO=y

# BLUETOOTH CONFIG
CONFIG_BT=y
CONFIG_BT_DEBUG_LOG=y
CONFIG_BT_DEVICE_NAME="Heatle-Rod"

# c library
CONFIG_NEWLIB_LIBC=y

# power management
#CONFIG_SYS_POWER_MANAGEMENT=y
#CONFIG_DEVICE_POWER_MANAGEMENT=y
#CONFIG_DEVICE_IDLE_PM=y

#CONFIG_SYS_POWER_MANAGEMENT=y
#CONFIG_SYS_POWER_SLEEP_STATES=y
#CONFIG_SYS_POWER_DEEP_SLEEP_STATES=y
#CONFIG_DEVICE_POWER_MANAGEMENT=y

CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
#CONFIG_CLOCK_CONTROL_NRF_K32SRC_250PPM=y
#CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y
#CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y
CONFIG_CLOCK_CONTROL_NRF_K32SRC_20PPM=y
CONFIG_SOC_SERIES_NRF52X=y
CONFIG_SOC_NRF52832_QFAA=y


The project C files are atatched here also.
sw-pcb-rod-ble-develop (1).zip



Kind regsrds,
David
Heatle.de

Parents
  • Three issues stand out:

    • No 32kHz oscillator has to be handled, not clear from your settings that this is done correctly; have a look at unable-to-run for a guide on requirements in both code and settings
    • The reset is active-low, so unless NRST is held high (not shown, but may be held high by J-TAG) the nRF52 stays in reset. Can instead undefine CONFIG_GPIO_AS_PINRESET in the project settings but note must then do an Erase All before programming for that to take effect
    • Note the WL-CSP is light sensitive; any bright lights affect operation and the package requires shielding from light ingress

    Hope this helps

    • CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y  Take a look at Nordic Post If you have a board without LF crystal... This sets the LF clock to internal RC.

    • NRST pulled high, but still no BLE advertising.

    • I use black ink and tape over the device. I doubt it's a light related issue, because the problem occurred immediately after pcb assembly, not over a period of time being bombarded with photons.
      Assembly was light controlled also.
  • Regarding the clock, the settings you posted were these:

    CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
    #CONFIG_CLOCK_CONTROL_NRF_K32SRC_250PPM=y
    #CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y
    #CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_20PPM=y

    That is incorrect, though it may not be the cause. Try

    CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y

    Regarding the startup, I had to add this code before starting BLE; I don't say it fixes the issue, but without this code the board I was testing (no 32kHz crystal) didn't advertise.

       APP_ERROR_CHECK(nrf_drv_clock_init());
       nrf_drv_clock_lfclk_request(NULL);

Reply
  • Regarding the clock, the settings you posted were these:

    CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
    #CONFIG_CLOCK_CONTROL_NRF_K32SRC_250PPM=y
    #CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y
    #CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_20PPM=y

    That is incorrect, though it may not be the cause. Try

    CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y

    Regarding the startup, I had to add this code before starting BLE; I don't say it fixes the issue, but without this code the board I was testing (no 32kHz crystal) didn't advertise.

       APP_ERROR_CHECK(nrf_drv_clock_init());
       nrf_drv_clock_lfclk_request(NULL);

Children
No Data
Related