This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

nRF9160 errata for revision 2 (SICA-B1A)

1. Erratum #7 counsels to add a DSB if reading sequentially from UICR and program flash, as below. But what constitues sequential? If my program reads from UICR on a thread and then performs another operation, say return from a function, do I always need to execute a Data Synchronization Barrier operation since I don't know what may happen on another thread? 

2. Erratum #9 warns of reduced SFDR in SAADC in "DC/DC refresh mode". What is this mode? Could you please provide a reference in the nRF9160 documentation?

3. Erratum #26 counsels to avoid entering System On mode between writing TASKS_LFCLKSTART and receiving EVENTS_LFCLKSTARTED. If my program does not write to TASKS_LFCLKSTART explicitly, but does start the LTE modem, does NRFXLIB handle this issue?

uint32_t a = UICR_S->SOMEREGISTER;
__DSB();
uint32_t b = *((uint32_t *)SOMEFLASHADDR)



  • Hi,

     

    1. Erratum #7 counsels to add a DSB if reading sequentially from UICR and program flash, as below. But what constitues sequential? If my program reads from UICR on a thread and then performs another operation, say return from a function, do I always need to execute a Data Synchronization Barrier operation since I don't know what may happen on another thread? 

    Sequential in this scope is that the first instruction is reading the UICR block, and the next instruction is reading the program flash area. If you are returning from a function, that means stacking and many other RAM based instructions before reading the program flash. If you are uncertain of the places you call the read function from, add a __DSB() barrier for safety.

    2. Erratum #9 warns of reduced SFDR in SAADC in "DC/DC refresh mode". What is this mode? Could you please provide a reference in the nRF9160 documentation?

    My apologies, this does not seem to be mentioned in the nRF9160 PS, but the functionality is inherited from the nRF52 series devices, where the regulators are put in a duty cycled mode using the external capacitors and only recharge these capacitors when a low-threshold voltage is reached. If you look at the current consumption in time, you will then see a smaller spike in current to recharge the caps.

     

    It is briefly mentioned here in the nRF52840 PS: https://infocenter.nordicsemi.com/topic/ps_nrf52840/power.html?cp=4_0_0_4_2

    I'll report this internally as a missing section from the nRF9160 PS.

     

    3. Erratum #26 counsels to avoid entering System On mode between writing TASKS_LFCLKSTART and receiving EVENTS_LFCLKSTARTED. If my program does not write to TASKS_LFCLKSTART explicitly, but does start the LTE modem, does NRFXLIB handle this issue?

    the zephyr kernel handles this: https://github.com/nrfconnect/sdk-zephyr/blob/v2.7.0-ncs1/drivers/timer/nrf_rtc_timer.c#L565

    If you do not use the zephyr kernel, you have to manually ensure that you busy-wait when starting the LFCLK.

     

    Kind regards,

    Håkon

  • Thanks for the clarifications, Håkon, may I suggest "sequential instructions" for #7? That link to ncs1 under sdk-zephyr is very helpful, thanks again..

Related