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

USBD Errata 187 in QIAAC0 Silicon

Using SDK 15.0.0, I have ported the peripheral/usbd example to custom hardware based on the nRF52840-QIAAC0. 

In the nrf_drv_usbd_enable() function, execution hangs at 

    while (0 == (NRF_USBD_EVENTCAUSE_READY_MASK & nrf_usbd_eventcause_get()))

All is fine after I force the nrf_drv_usbd_errata_187() function to return true.  (By default, nrf_drv_usbd_errata_187() returns false because nrf_drv_usbd_errata_type_52840_fp1() returns false.)

Why is this happening?  Am I missing something? Is there a more graceful work-around? 

Parents
  • Hi,

    Unfortunately, we have a bug in our SDK 15.0, in file nrf_drv_usbd_errata.h::nrf_drv_usbd_errata_type_52840_fp1().

    This has been reported internally, and will be addressed in future versions of the SDK.

    static inline bool nrf_drv_usbd_errata_type_52840_fp1(void)
    {
    return ( nrf_drv_usbd_errata_type_52840() &&
    ( ((*(uint32_t *)0xF0000FE8) & 0xF0) == 0x10 ) &&
    ( ((*(uint32_t *)0xF0000FEC) & 0xF0) == 0x00 ) );
    }
     
    The bold highlight should be 0x20 (not 0x10) for engineering C and revision 1 devices. So please change the "== 0x10" to "== 0x20", it should apply the workaround for engineering C and the final product.
  • It helped me!

    But now on the other (older revisions controllers) does not work, where should be the value 0x10.

    How to rewrite nrf_drv_usbd_errata_type_52840_fp1 () function so that, depending on the revision of the controller substitutes the required value (0x10 or 0x20)

Reply Children
Related