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

  • 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);

  • You need to change C3 and C13 from 12pF to 8pF. You likely have issues with the 32MHz crystal not starting up properly. 

    There are also some issues in your RF path, the impedance match and harmonics filter consisting of C12 and L2 needs to be tuned, best practice is to copy the ref layout exactly. You transmission line is likely not 50ohm. You will also have issue with the antenna, the lack of ground plane will make it hard for the antenna to resonate at the carrier frequency reducing the range, you also need a shunt capacitor to properly tune a quarter-wave monopole antenna. 

    What is the footprint at the end of the antenna for? 

  • Hey, So, I took the advice from you all, many thanks.
    Just to share the experience so far and answer some queries:

    I re-span the boards and... Basically it still doesn't work:(
    The radio still doesn't broadcast, unless we are in "Debug interface mode" we have just discovered.
    Actually I saw this kind of behavior on the old boards with intermittant short radio bursts, only during flashing.

    Software: The stock ble beacon example software from Nordic. Again, this works OK on the DK, but still not on my boards.

    List of changes (Old board as seen at the beginning of this thread):
    1. Old board: NRF52832   New: NRF52805   (both are WLSCP)
    2. Old board LF Xtal: Not-Fitted   New: 32.765KHz Fitted.
    3. Old board: 32MHz load caps: 12pF  New: 4.7pF
    4. Old board: Matching network, LC.  New: 2LC, copied 1:1 from example layout for the NRF52805.
    5. Old board: Reset Pin P0.21 pulled high.  New: N/C as recommended in the documentation.
    6. Old board: Hand assembled.  New: Pick and place by our EMS.

    New board: new improved, simpler layout. 
    Old: 2 Layers   New: Same 2 layers.
    Extra care was taken regarding light damage in manufacturing, assembly and testing, UV and IR. Dark coverings, no hot air rework station etc. Checking of the solder and paste masks was done carefully.



    The SW engineer and I can program and debug the device repetitively (no more dead chips after the first flashing which we experiened on all 6 of the 10 old boards) using the NRF connect windows program.
    The board can do LED blinky, RGB led at the very top of the board. But the radio only works when in Debug Interface Mode.
    Ie. Beacon seen on our cell phone (NRF connect App). Data received looks ok.

    Other things.
    I observed all DEC capacitance requirements and guidelines in the datasheets and example NRF52805 ref design.
    Checked the ball assignments are correct. Solder joints are good. X-ray confirmed all are OK. 
    Board is powered from the DK: 3.3V 
    DEC2 and Dec4 tied as recommended.
    Now programming using west and debugging in Visual Studio.



    My guess, from the HW perspective: Maybe somehow there is a power problem on my board, and the device is partially sinking current through the SWD interface, which causes it to work only when the interface is active, lines toggling in debug mode. Other than this theory I am at a loss. More SW tests to come...
    ROD-PCB-SCH.pdfROD-PCB-DWG.pdf

             

Related