diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f6efae351..5c2fdc29e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Changelog All notable changes to this project are documented in this file. +## [1.8.5] - 2020-07-09 +### Added +- Implemented workaround for anomaly 211 in the USBD driver. + +### Changed +- Updated MDK to version 8.32.3. + ## [1.8.4] - 2020-04-27 - Fixed an issue in the NFCT driver where the FIELDDETECTED event would be ignored and the FIELDLOST event would be processed twice. The driver now properly handles FIELDDETECTED and FIELDLOST events. diff --git a/drivers/src/nrfx_usbd.c b/drivers/src/nrfx_usbd.c index 2d8ae9d589..86760d8eb1 100644 --- a/drivers/src/nrfx_usbd.c +++ b/drivers/src/nrfx_usbd.c @@ -83,6 +83,11 @@ #define NRFX_USBD_DMAREQ_PROCESS_DEBUG 1 #endif +#ifndef NRFX_USBD_USE_WORKAROUND_FOR_ANOMALY_211 +/* Anomaly 211 - Device remains in SUSPEND too long when host resumes + bus activity (sending SOF packets) without a RESUME condition. */ +#define NRFX_USBD_USE_WORKAROUND_FOR_ANOMALY_211 0 +#endif /** * @defgroup nrfx_usbd_int USB Device driver internal part @@ -1578,7 +1583,11 @@ void nrfx_usbd_enable(void) /* Prepare for READY event receiving */ nrf_usbd_eventcause_clear(NRF_USBD_EVENTCAUSE_READY_MASK); +#if NRFX_USBD_USE_WORKAROUND_FOR_ANOMALY_211 + if (nrfx_usbd_errata_187() || nrfx_usbd_errata_211()) +#else if (nrfx_usbd_errata_187()) +#endif { NRFX_CRITICAL_SECTION_ENTER(); if (*((volatile uint32_t *)(0x4006EC00)) == 0x00000000) @@ -1662,7 +1671,11 @@ void nrfx_usbd_enable(void) m_drv_state = NRFX_DRV_STATE_POWERED_ON; +#if NRFX_USBD_USE_WORKAROUND_FOR_ANOMALY_211 + if (nrfx_usbd_errata_187() && !nrfx_usbd_errata_211()) +#else if (nrfx_usbd_errata_187()) +#endif { NRFX_CRITICAL_SECTION_ENTER(); if (*((volatile uint32_t *)(0x4006EC00)) == 0x00000000) @@ -1691,6 +1704,24 @@ void nrfx_usbd_disable(void) nrf_usbd_disable(); usbd_dma_pending_clear(); m_drv_state = NRFX_DRV_STATE_INITIALIZED; + +#if NRFX_USBD_USE_WORKAROUND_FOR_ANOMALY_211 + if (nrfx_usbd_errata_211()) + { + NRFX_CRITICAL_SECTION_ENTER(); + if (*((volatile uint32_t *)(0x4006EC00)) == 0x00000000) + { + *((volatile uint32_t *)(0x4006EC00)) = 0x00009375; + *((volatile uint32_t *)(0x4006ED14)) = 0x00000000; + *((volatile uint32_t *)(0x4006EC00)) = 0x00009375; + } + else + { + *((volatile uint32_t *)(0x4006ED14)) = 0x00000000; + } + NRFX_CRITICAL_SECTION_EXIT(); + } +#endif } void nrfx_usbd_start(bool enable_sof) diff --git a/drivers/src/nrfx_usbd_errata.h b/drivers/src/nrfx_usbd_errata.h index adf07c2e11..9cf76f8312 100644 --- a/drivers/src/nrfx_usbd_errata.h +++ b/drivers/src/nrfx_usbd_errata.h @@ -69,4 +69,10 @@ static inline bool nrfx_usbd_errata_199(void) return NRFX_USBD_ERRATA_ENABLE && nrf52_errata_199(); } +/* Errata: Device remains in SUSPEND too long. */ +static inline bool nrfx_usbd_errata_211(void) +{ + return NRFX_USBD_ERRATA_ENABLE && nrf52_errata_211(); +} + #endif // NRFX_USBD_ERRATA_H__ diff --git a/mdk/nrf.h b/mdk/nrf.h index 18783ae867..f3f0b288cd 100644 --- a/mdk/nrf.h +++ b/mdk/nrf.h @@ -36,7 +36,7 @@ POSSIBILITY OF SUCH DAMAGE. /* MDK version */ #define MDK_MAJOR_VERSION 8 #define MDK_MINOR_VERSION 32 -#define MDK_MICRO_VERSION 1 +#define MDK_MICRO_VERSION 3 /* Define NRF51_SERIES for common use in nRF51 series devices. Only if not previously defined. */ #if defined (NRF51) ||\ diff --git a/mdk/nrf51.h b/mdk/nrf51.h index 3beac35dfd..f984730b05 100644 --- a/mdk/nrf51.h +++ b/mdk/nrf51.h @@ -30,10 +30,10 @@ * @file nrf51.h * @brief CMSIS HeaderFile * @version 522 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:51 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:28 * from File 'nrf51.svd', - * last modified on Wednesday, 04.03.2020 13:56:43 + * last modified on Thursday, 09.07.2020 11:19:20 */ diff --git a/mdk/nrf52.h b/mdk/nrf52.h index f58aac8330..d3aa67700b 100644 --- a/mdk/nrf52.h +++ b/mdk/nrf52.h @@ -30,10 +30,10 @@ * @file nrf52.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:52 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:29 * from File 'nrf52.svd', - * last modified on Wednesday, 04.03.2020 13:56:43 + * last modified on Thursday, 09.07.2020 11:19:20 */ diff --git a/mdk/nrf52805.h b/mdk/nrf52805.h index f82df087f9..8749489dce 100644 --- a/mdk/nrf52805.h +++ b/mdk/nrf52805.h @@ -30,10 +30,10 @@ * @file nrf52805.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:51 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:28 * from File 'nrf52805.svd', - * last modified on Wednesday, 04.03.2020 13:56:43 + * last modified on Thursday, 09.07.2020 11:19:20 */ diff --git a/mdk/nrf52810.h b/mdk/nrf52810.h index 238e2a38c3..50bc5c7c54 100644 --- a/mdk/nrf52810.h +++ b/mdk/nrf52810.h @@ -30,10 +30,10 @@ * @file nrf52810.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:51 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:28 * from File 'nrf52810.svd', - * last modified on Wednesday, 04.03.2020 13:56:43 + * last modified on Thursday, 09.07.2020 11:19:20 */ diff --git a/mdk/nrf52811.h b/mdk/nrf52811.h index 000099ceb9..3d596d4516 100644 --- a/mdk/nrf52811.h +++ b/mdk/nrf52811.h @@ -30,10 +30,10 @@ * @file nrf52811.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:51 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:29 * from File 'nrf52811.svd', - * last modified on Wednesday, 04.03.2020 13:56:44 + * last modified on Thursday, 09.07.2020 11:19:21 */ diff --git a/mdk/nrf52820.h b/mdk/nrf52820.h index 81e68bf909..6a1326dd9c 100644 --- a/mdk/nrf52820.h +++ b/mdk/nrf52820.h @@ -30,10 +30,10 @@ * @file nrf52820.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:51 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:29 * from File 'nrf52820.svd', - * last modified on Wednesday, 04.03.2020 13:56:44 + * last modified on Thursday, 09.07.2020 11:19:21 */ diff --git a/mdk/nrf52833.h b/mdk/nrf52833.h index b179fb44d3..50ee14d940 100644 --- a/mdk/nrf52833.h +++ b/mdk/nrf52833.h @@ -30,10 +30,10 @@ * @file nrf52833.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:52 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:29 * from File 'nrf52833.svd', - * last modified on Wednesday, 04.03.2020 13:56:44 + * last modified on Thursday, 09.07.2020 11:19:21 */ diff --git a/mdk/nrf52840.h b/mdk/nrf52840.h index 4c761c56d0..725c505f17 100644 --- a/mdk/nrf52840.h +++ b/mdk/nrf52840.h @@ -30,10 +30,10 @@ * @file nrf52840.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:52 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:30 * from File 'nrf52840.svd', - * last modified on Wednesday, 04.03.2020 13:56:44 + * last modified on Thursday, 09.07.2020 11:19:21 */ diff --git a/mdk/nrf52_erratas.h b/mdk/nrf52_erratas.h index dd251d85e9..713dd8c6b6 100644 --- a/mdk/nrf52_erratas.h +++ b/mdk/nrf52_erratas.h @@ -194,6 +194,7 @@ static bool nrf52_errata_204(void) __UNUSED; static bool nrf52_errata_208(void) __UNUSED; static bool nrf52_errata_209(void) __UNUSED; static bool nrf52_errata_210(void) __UNUSED; +static bool nrf52_errata_211(void) __UNUSED; static bool nrf52_errata_212(void) __UNUSED; static bool nrf52_errata_213(void) __UNUSED; static bool nrf52_errata_214(void) __UNUSED; @@ -798,6 +799,8 @@ static bool nrf52_errata_20(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -1367,6 +1370,8 @@ static bool nrf52_errata_36(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -1925,6 +1930,8 @@ static bool nrf52_errata_55(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -2270,6 +2277,8 @@ static bool nrf52_errata_66(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -2864,6 +2873,8 @@ static bool nrf52_errata_78(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -3263,6 +3274,8 @@ static bool nrf52_errata_87(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -4611,6 +4624,8 @@ static bool nrf52_errata_136(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -5163,6 +5178,8 @@ static bool nrf52_errata_153(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -5622,6 +5639,8 @@ static bool nrf52_errata_170(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -5800,6 +5819,8 @@ static bool nrf52_errata_173(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -5949,6 +5970,8 @@ static bool nrf52_errata_176(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -6313,6 +6336,8 @@ static bool nrf52_errata_183(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -6403,6 +6428,8 @@ static bool nrf52_errata_184(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -6487,6 +6514,8 @@ static bool nrf52_errata_187(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -6571,6 +6600,8 @@ static bool nrf52_errata_190(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -6786,6 +6817,8 @@ static bool nrf52_errata_194(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -6900,6 +6933,8 @@ static bool nrf52_errata_196(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -7367,6 +7402,65 @@ static bool nrf52_errata_210(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; + } + } + #endif + return false; + #endif +} + +static bool nrf52_errata_211(void) +{ + #ifndef NRF52_SERIES + return false; + #else + #if defined (NRF52820_XXAA) || defined (DEVELOP_IN_NRF52820)\ + || defined (NRF52833_XXAA) || defined (DEVELOP_IN_NRF52833)\ + || defined (NRF52840_XXAA) || defined (DEVELOP_IN_NRF52840) + uint32_t var1 = *(uint32_t *)0x10000130ul; + uint32_t var2 = *(uint32_t *)0x10000134ul; + #endif + #if defined (NRF52840_XXAA) || defined (DEVELOP_IN_NRF52840) + if (var1 == 0x08) + { + switch(var2) + { + case 0x00ul: + return false; + case 0x01ul: + return true; + case 0x02ul: + return true; + case 0x03ul: + return true; + } + } + #endif + #if defined (NRF52833_XXAA) || defined (DEVELOP_IN_NRF52833) + if (var1 == 0x0D) + { + switch(var2) + { + case 0x00ul: + return true; + case 0x01ul: + return true; + } + } + #endif + #if defined (NRF52820_XXAA) || defined (DEVELOP_IN_NRF52820) + if (var1 == 0x10) + { + switch(var2) + { + case 0x00ul: + return true; + case 0x01ul: + return true; + case 0x02ul: + return true; } } #endif @@ -7487,6 +7581,8 @@ static bool nrf52_errata_212(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -7789,6 +7885,8 @@ static bool nrf52_errata_218(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -7909,6 +8007,8 @@ static bool nrf52_errata_219(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -7989,6 +8089,8 @@ static bool nrf52_errata_225(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -8068,6 +8170,8 @@ static bool nrf52_errata_228(void) return true; case 0x01ul: return true; + case 0x02ul: + return true; } } #endif @@ -8093,6 +8197,8 @@ static bool nrf52_errata_230(void) return true; case 0x01ul: return false; + case 0x02ul: + return false; } } #endif @@ -8118,6 +8224,8 @@ static bool nrf52_errata_231(void) return true; case 0x01ul: return false; + case 0x02ul: + return false; } } #endif diff --git a/mdk/nrf5340_application.h b/mdk/nrf5340_application.h index 7d53f5ebe9..175862a3e9 100644 --- a/mdk/nrf5340_application.h +++ b/mdk/nrf5340_application.h @@ -18,10 +18,10 @@ * @file nrf5340_application.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:52 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:30 * from File 'nrf5340_application.svd', - * last modified on Wednesday, 04.03.2020 13:56:45 + * last modified on Thursday, 09.07.2020 11:19:22 */ diff --git a/mdk/nrf5340_network.h b/mdk/nrf5340_network.h index f8ec27b45f..e348819b4a 100644 --- a/mdk/nrf5340_network.h +++ b/mdk/nrf5340_network.h @@ -18,10 +18,10 @@ * @file nrf5340_network.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:53 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:30 * from File 'nrf5340_network.svd', - * last modified on Wednesday, 04.03.2020 13:56:45 + * last modified on Thursday, 09.07.2020 11:19:22 */ diff --git a/mdk/nrf9160.h b/mdk/nrf9160.h index 94bcb70c01..a516a1def3 100644 --- a/mdk/nrf9160.h +++ b/mdk/nrf9160.h @@ -30,10 +30,10 @@ * @file nrf9160.h * @brief CMSIS HeaderFile * @version 1 - * @date 04. March 2020 - * @note Generated by SVDConv V3.3.25 on Wednesday, 04.03.2020 14:56:53 + * @date 09. July 2020 + * @note Generated by SVDConv V3.3.25 on Thursday, 09.07.2020 13:19:30 * from File 'nrf9160.svd', - * last modified on Wednesday, 04.03.2020 13:56:45 + * last modified on Thursday, 09.07.2020 11:19:22 */