Sfoglia il codice sorgente

dev merging

fix: DP not pulled up in V0A driver
fix: Incorrect doublebuffered read in V0A and V1A driver
fix: Hangs on bus reset (reenumeration) in V2 driver
feature: compile-time control variables added
chore: some docs revised

* USBD_SOF_DISABLED flag added
ESOF event removed

* VBUS_DETECTION for V2 driver moved to global USBD_VBUS_DETECT

* Fixed hangs on USB bus reset event (reenumeration) for OTG_FS driver

* Incorrect doublebuffered read fixed for ASM drivers

* docs: Revised CMSIS path in readme.md
chore: Reverted back Makefile
Dmitry Filimonchuk 8 anni fa
parent
commit
3db9d8efa5
8 ha cambiato i file con 87 aggiunte e 91 eliminazioni
  1. 11 5
      inc/usbd_core.h
  2. 2 2
      readme.md
  3. 7 4
      src/usb_32v0.c
  4. 23 38
      src/usb_32v0A.S
  5. 7 4
      src/usb_32v1.c
  6. 24 29
      src/usb_32v1A.S
  7. 6 5
      src/usb_32v2.c
  8. 7 4
      src/usb_32v3.c

+ 11 - 5
inc/usbd_core.h

@@ -21,9 +21,16 @@
 
 /**\addtogroup USBD_HW_CORE USB Device HW driver and core API
  * @{ */
+#if defined(__DOXYGEN__)
+/**\name Compile-time control macros
+ * @{ */
+#define USBD_SOF_DISABLED   /**<\brief Disables SOF handling.*/
+#define USBD_VBUS_DETECT    /**<\brief Enables Vbus detection for V2 driver.*/
+/** @} */
+#endif
 
 /**\addtogroup USBD_HW USB hardware driver
- * \brief Contains HW driver API 
+ * \brief Contains HW driver API
  * @{ */
 /**\anchor USB_EVENTS
  * \name USB device events
@@ -36,8 +43,7 @@
 #define usbd_evt_eprx       5   /**<\brief Data packet received.*/
 #define usbd_evt_epsetup    6   /**<\brief Setup packet received.*/
 #define usbd_evt_error      7   /**<\brief Data error.*/
-#define usbd_evt_esof       8   /**<\brief Missed SOF.*/
-#define usbd_evt_count      9
+#define usbd_evt_count      8
 /** @} */
 
 /**\anchor USB_LANES_STATUS
@@ -58,7 +64,7 @@
 /** @} */
 
 /**\addtogroup USBD_CORE USB device core
- * \brief Contains core API 
+ * \brief Contains core API
  * @{ */
 #define USB_EPTYPE_DBLBUF   0x04    /**<\brief Doublebuffered endpoint (bulk endpoint only).*/
 
@@ -181,7 +187,7 @@ typedef usbd_respond (*usbd_ctl_callback)(usbd_device *dev, usbd_ctlreq *req, us
 /**\brief USB get descriptor callback function
  * \details Called when GET_DESCRIPTOR request issued
  * \param[in] req pointer to usb control request structure
- * \param[in,out] address pointer to the descriptor in memory. Points to req->data by default. You 
+ * \param[in,out] address pointer to the descriptor in memory. Points to req->data by default. You
  * can use this buffer.
  * \param[in,out] dsize descriptor size. maximum buffer size by default.
  * \return usbd_ack if you passed the correct descriptor, usbd_fail otherwise.

+ 2 - 2
readme.md

@@ -49,11 +49,11 @@ make program
 ### Default values: ###
 | Variable | Default Value                       | Means                         |
 |----------|-------------------------------------|-------------------------------|
-| CMSIS    | ../../cmsis                         | path to CMSIS root folder     |
+| CMSIS    | ../../CMSIS                         | path to CMSIS root folder     |
 | MCU      | stm32l100xc                         | MCU selection for demo project|
 | CFLAGS   | -mcpu=cortex-m3 -mfloat-abi=soft    | MCU specified compiler flags  |
 | DEFINES  | STM32L1 STM32L100xC                 | MCU specified defines         |
-| INCLUDES | $(CMSIS)/device/ST $(CMSIS)/include | path to ST CMSIS includes     |
+| INCLUDES | $(CMSIS)/Device/ST $(CMSIS)/Include | path to ST CMSIS includes     |
 
 ### Useful Resources ###
 1. [USB Implementers Forum official site](http://www.usb.org/home)

+ 7 - 4
src/usb_32v0.c

@@ -145,7 +145,11 @@ void enable(bool enable) {
         RCC->APB1ENR  |=  RCC_APB1ENR_USBEN;
         RCC->APB1RSTR |= RCC_APB1RSTR_USBRST;
         RCC->APB1RSTR &= ~RCC_APB1RSTR_USBRST;
-        USB->CNTR = USB_CNTR_CTRM | USB_CNTR_RESETM | USB_CNTR_SOFM | USB_CNTR_ESOFM | USB_CNTR_ERRM | USB_CNTR_SUSPM | USB_CNTR_WKUPM;
+        USB->CNTR = USB_CNTR_CTRM | USB_CNTR_RESETM | USB_CNTR_ERRM |
+#if !defined(USBD_SOF_DISABLED)
+        USB_CNTR_SOFM |
+#endif
+        USB_CNTR_SUSPM | USB_CNTR_WKUPM;
     } else if (RCC->APB1ENR & RCC_APB1ENR_USBEN) {
         USB->BCDR = 0;
         RCC->APB1RSTR |= RCC_APB1RSTR_USBRST;
@@ -402,9 +406,11 @@ void evt_poll(usbd_device *dev, usbd_evt_callback callback) {
             ep_deconfig(i);
         }
         _ev = usbd_evt_reset;
+#if !defined(USBD_SOF_DISABLED)
     } else if (_istr & USB_ISTR_SOF) {
         _ev = usbd_evt_sof;
         USB->ISTR &= ~USB_ISTR_SOF;
+#endif
     } else if (_istr & USB_ISTR_WKUP) {
         _ev = usbd_evt_wkup;
         USB->CNTR &= ~USB_CNTR_FSUSP;
@@ -413,9 +419,6 @@ void evt_poll(usbd_device *dev, usbd_evt_callback callback) {
         _ev = usbd_evt_susp;
         USB->CNTR |= USB_CNTR_FSUSP;
         USB->ISTR &= ~USB_ISTR_SUSP;
-    } else if (_istr & USB_ISTR_ESOF) {
-        USB->ISTR &= ~USB_ISTR_ESOF;
-        _ev = usbd_evt_esof;
     } else if (_istr & USB_ISTR_ERR) {
         USB->ISTR &= ~USB_ISTR_ERR;
         _ev = usbd_evt_error;

+ 23 - 38
src/usb_32v0A.S

@@ -163,7 +163,6 @@ _get_serial_desc:
     .thumb_func
     .type   _connect, %function
 _connect:
-#if 1
     ldr     r3, =#USB_REGBASE
     movs    r1, #0x03               //BCDEN + DCDEN
     movs    r2, #usbd_lane_dsc
@@ -191,20 +190,11 @@ _connect:
     subs    r1, r0, #1
     sbcs    r0, r1
     lsls    r0, #15
-    strh    r1, [r3, #USB_BCDR]
+    strh    r0, [r3, #USB_BCDR]
     mov     r0, r2
     bx      lr
-#else
-    subs    r1, r0, #1
-    sbcs    r0, r1
-    lsls    r0, #15
-    ldr     r1, =#USB_REGBASE
-    strh    r0, [r1, #USB_BCDR]      //USB->BCDR
-    bx      lr
-#endif
     .size   _connect, . - _connect
 
-
     .thumb_func
     .type   _setaddr, %function
 _setaddr:
@@ -255,8 +245,12 @@ _enable:
     str     r0, [r2, #RCC_APB1RSTR]     //RCC->APB1RSTR |= USBRST
     bics    r0, r3
     str     r0, [r2, #RCC_APB1RSTR]     //RCC->APB1RSTR &= ~USBRST
-    movs    r0, #0xBE
-    lsls    r0, #0x08           // CTRM | ERRM | WKUPM | SUSPM | RESETM | SOFM
+#if !defined(USBD_SOF_DISABLED)
+    movs    r0, #0xBE                   // CTRM | ERRM | WKUPM | SUSPM | RESETM | SOFM
+#else
+    movs    r0, #0xBC                   // CTRM | ERRM | WKUPM | SUSPM | RESETM
+#endif
+    lsls    r0, #0x08
     strh    r0, [r1]            //set USB->CNTR
     bx      lr
 .L_disable:
@@ -395,19 +389,18 @@ _ep_read:
 .L_epr_dbl:
     lsrs    r0, r5, #8
     eors    r0, r5
-    lsrs    r0, #6          // SW_RX ^ DTOG_RX -> CF
-    bcc     .L_epr_notog    // jmp if SW_RX != DTOG_RX (VALID)
+    lsrs    r0, #7          // SW_RX ^ DTOG_RX -> CF
+    bcs     .L_epr_notog    // jmp if SW_RX != DTOG_RX (VALID)
     ldr     r0, =#EP_NOTOG
     ands    r5, r0
     adds    r5, #EP_RX_SWBUF
     strh    r5, [r3]        // toggling SW_RX
-    ldrh    r5, [r3]
 .L_epr_notog:
-    mvns    r5, r5
-    lsls    r5, #8          // shift ~SW_RX to DTOG_RX
+    ldrh    r5, [r3]
+    lsls    r5, #8          // shift SW_RX to DTOG_RX
 .L_epr_iso:
     lsrs    r5, #15         // DTOG_RX -> CF
-    bcc     .L_epr_sngl
+    bcs     .L_epr_sngl
     subs    r4, #0x04       // set RXADDR0
 .L_epr_sngl:
     ldrh    r0, [r4, #RXCOUNT]
@@ -477,8 +470,6 @@ _ep_write:
     lsrs    r0, #4
     cmp     r0, #0x43       // (OK) TX_VALID + ISO
     beq     .L_epw_iso
-    cmp     r0, #0x13       // (OK) TX_VALID + DBLBULK
-    beq     .L_epw_dbl
     cmp     r0, #0x12       // (OK) TX_NAK + DBLBULK
     beq     .L_epw_dbl
     cmp     r0, #0x02       // (OK) TX_NAK + BULK
@@ -735,20 +726,20 @@ _evt_poll:
     movs    r2, 0x07
     ands    r2, r0
 /* checking USB->ISTR for events */
-    lsls    r0, #17             //CTRM -> CF
+#if !defined(USBD_SOF_DISABLED)
+    lsrs    r1, r0, #10         //SOFM -> CF
+    bcs     .L_ep_sofm
+#endif
+    lsrs    r1, r0, #16         //CTRM -> CF
     bcs     .L_ep_ctrm
-    lsls    r0, #2              //ERRM -> CF
+    lsrs    r1, r0, #14         //ERRM -> CF
     bcs     .L_ep_errm
-    lsls    r0, #1              //WKUPM -> CF
+    lsrs    r1, r0, #13         //WKUPM -> CF
     bcs     .L_ep_wkupm
-    lsls    r0, #1              //SUSPM -> CF
+    lsrs    r1, r0, #12         //SUSPM -> CF
     bcs     .L_ep_suspm
-    lsls    r0, #1              //RESETM -> CF
+    lsrs    r1, r0, #11         //RESETM -> CF
     bcs     .L_ep_resetm
-    lsls    r0, #1              //SOFM -> CF
-    bcs     .L_ep_sofm
-    lsls    r0, #1
-    bcs     .L_ep_esofm
     /* exit with no callback */
     pop     {r0, r1, r4 , r5}
     bx      lr
@@ -783,17 +774,12 @@ _evt_poll:
     movs    r1, #usbd_evt_error
     movs    r4, #ISTRBIT(13)
     b      .L_ep_clristr
-
+#if !defined(USBD_SOF_DISABLED)
 .L_ep_sofm:
     movs    r1, #usbd_evt_sof
     movs    r4, #ISTRBIT(9)
     b       .L_ep_clristr
-
-.L_ep_esofm:
-    movs    r1, #usbd_evt_esof
-    movs    r4, #ISTRBIT(8)
-    b       .L_ep_clristr
-
+#endif
 .L_ep_wkupm:
     ldrh    r1, [r3, #USB_CNTR]     //R1 USB->CNTR
     movs    r5, #0x08
@@ -843,7 +829,6 @@ _evt_poll:
     bx      r3
     .size   _evt_poll, . - _evt_poll
 
-
     .pool
 
    .end

+ 7 - 4
src/usb_32v1.c

@@ -148,7 +148,11 @@ void enable(bool enable) {
         RCC->APB2ENR  |= RCC_APB2ENR_SYSCFGEN;
         RCC->APB1RSTR |= RCC_APB1RSTR_USBRST;
         RCC->APB1RSTR &= ~RCC_APB1RSTR_USBRST;
-        USB->CNTR = USB_CNTR_CTRM | USB_CNTR_RESETM | USB_CNTR_SOFM | USB_CNTR_ESOFM | USB_CNTR_ERRM | USB_CNTR_SUSPM | USB_CNTR_WKUPM ;
+        USB->CNTR = USB_CNTR_CTRM | USB_CNTR_RESETM | USB_CNTR_ERRM |
+#if !defined(USBD_SOF_DISABLED)
+        USB_CNTR_SOFM |
+#endif
+        USB_CNTR_SUSPM | USB_CNTR_WKUPM;
     } else if (RCC->APB1ENR & RCC_APB1ENR_USBEN) {
         SYSCFG->PMC &= ~SYSCFG_PMC_USB_PU;
         RCC->APB1RSTR |= RCC_APB1RSTR_USBRST;
@@ -392,9 +396,11 @@ void evt_poll(usbd_device *dev, usbd_evt_callback callback) {
             ep_deconfig(i);
         }
         _ev = usbd_evt_reset;
+#if !defined(USBD_SOF_DISABLED)
     } else if (_istr & USB_ISTR_SOF) {
         _ev = usbd_evt_sof;
         USB->ISTR &= ~USB_ISTR_SOF;
+#endif
     } else if (_istr & USB_ISTR_WKUP) {
         _ev = usbd_evt_wkup;
         USB->CNTR &= ~USB_CNTR_FSUSP;
@@ -403,9 +409,6 @@ void evt_poll(usbd_device *dev, usbd_evt_callback callback) {
         _ev = usbd_evt_susp;
         USB->CNTR |= USB_CNTR_FSUSP;
         USB->ISTR &= ~USB_ISTR_SUSP;
-    } else if (_istr & USB_ISTR_ESOF) {
-        USB->ISTR &= ~USB_ISTR_ESOF;
-        _ev = usbd_evt_esof;
     } else if (_istr & USB_ISTR_ERR) {
         USB->ISTR &= ~USB_ISTR_ERR;
         _ev = usbd_evt_error;

+ 24 - 29
src/usb_32v1A.S

@@ -210,7 +210,6 @@ _get_frame:
     .thumb_func
     .type   _enable, %function
 _enable:
-
     ldr     r2, =#RCC_BASE        //RCC
     movs    r3, #0x01
     lsls    r3, #23             //USBEN or USBRST
@@ -232,8 +231,12 @@ _enable:
     orrs    r0, r3
     str     r0, [r2, #RCC_APB2ENR]
 /* setting up USB CNTR */
-    movs    r0, #0xBE
-    lsls    r0, #0x08                   // CTRM | ERRM | WKUPM | SUSPM | RESETM | SOFM
+#if !defined(USBD_SOF_DISABLED)
+    movs    r0, #0xBE                   // CTRM | ERRM | WKUPM | SUSPM | RESETM | SOFM
+#else
+    movs    r0, #0xBC                   // CTRM | ERRM | WKUPM | SUSPM | RESETM
+#endif
+    lsls    r0, #0x08
     strh    r0, [r1, #USB_CNTR]         //set USB->CNTR
     bx      lr
 .L_disable:
@@ -346,7 +349,7 @@ _ep_read:
     push    {r4, r5, lr}
     ldr     r3, =#USB_EPBASE
     ldr     r4, =#USB_PMABASE
-    lsls    r0,  #28
+    lsls    r0, #28
     lsrs    r0, #26
     adds    r3, r0          // *EPR -> R3
     lsls    r0, #2
@@ -374,19 +377,18 @@ _ep_read:
 .L_epr_dbl:
     lsrs    r0, r5, #8
     eors    r0, r5
-    lsrs    r0, #6          // SW_RX ^ DTOG_RX -> CF
-    bcc     .L_epr_notog    // jmp if SW_RX != DTOG_RX (VALID)
+    lsrs    r0, #7          // SW_RX ^ DTOG_RX -> CF
+    bcs     .L_epr_notog    // jmp if SW_RX != DTOG_RX (VALID)
     ldr     r0, =#EP_NOTOG
     ands    r5, r0
     adds    r5, #EP_RX_SWBUF
     strh    r5, [r3]        // toggling SW_RX
-    ldrh    r5, [r3]
 .L_epr_notog:
-    mvns    r5, r5
-    lsls    r5, #8          // shift ~SW_RX to DTOG_RX
+    ldrh    r5, [r3]
+    lsls    r5, #8          // shift SW_RX to DTOG_RX
 .L_epr_iso:
     lsrs    r5, #15         // DTOG_RX -> CF
-    bcc     .L_epr_sngl
+    bcs     .L_epr_sngl
     subs    r4, #0x08       // set RXADDR0
 .L_epr_sngl:
     ldrh    r0, [r4, #RXCOUNT]
@@ -456,8 +458,6 @@ _ep_write:
     lsrs    r0, #4
     cmp     r0, #0x43       // (OK) TX_VALID + ISO
     beq     .L_epw_iso
-    cmp     r0, #0x13       // (OK) TX_VALID + DBLBULK
-    beq     .L_epw_dbl
     cmp     r0, #0x12       // (OK) TX_NAK + DBLBULK
     beq     .L_epw_dbl
     cmp     r0, #0x02       // (OK) TX_NAK + BULK
@@ -719,20 +719,20 @@ _evt_poll:
     movs    r2, 0x07
     ands    r2, r0
 /* checking USB->ISTR for events */
-    lsls    r0, #17             //CTRM -> CF
+#if !defined(USBD_SOF_DISABLED)
+    lsrs    r1, r0, #10         //SOFM -> CF
+    bcs     .L_ep_sofm
+#endif
+    lsrs    r1, r0, #11         //RESETM -> CF
+    bcs     .L_ep_resetm
+    lsrs    r1, r0, #16         //CTRM -> CF
     bcs     .L_ep_ctrm
-    lsls    r0, #2              //ERRM -> CF
+    lsrs    r1, r0, #14         //ERRM -> CF
     bcs     .L_ep_errm
-    lsls    r0, #1              //WKUPM -> CF
+    lsrs    r1, r0, #13         //WKUPM -> CF
     bcs     .L_ep_wkupm
-    lsls    r0, #1              //SUSPM -> CF
+    lsrs    r1, r0, #12         //SUSPM -> CF
     bcs     .L_ep_suspm
-    lsls    r0, #1              //RESETM -> CF
-    bcs     .L_ep_resetm
-    lsls    r0, #1              //SOFM -> CF
-    bcs     .L_ep_sofm
-    lsls    r0, #1
-    bcs     .L_ep_esofm
     /* exit with no callback */
     pop     {r0, r1, r4 , r5}
     bx      lr
@@ -767,17 +767,12 @@ _evt_poll:
     movs    r1, #usbd_evt_error
     movs    r4, #ISTRBIT(13)
     b      .L_ep_clristr
-
+#if !defined(USBD_SOF_DISABLED)
 .L_ep_sofm:
     movs    r1, #usbd_evt_sof
     movs    r4, #ISTRBIT(9)
     b       .L_ep_clristr
-
-.L_ep_esofm:
-    movs    r1, #usbd_evt_esof
-    movs    r4, #ISTRBIT(8)
-    b       .L_ep_clristr
-
+#endif
 .L_ep_wkupm:
     ldrh    r1, [r3, #0]            //R1 USB->CNTR
     movs    r5, #0x08

+ 6 - 5
src/usb_32v2.c

@@ -20,7 +20,6 @@
 
 #if defined(USE_STMV2_DRIVER)
 
-#define VBUS_DETECTION  0
 #define MAX_EP          6
 #define MAX_RX_PACKET   128
 #define MAX_CONTROL_EP  1
@@ -108,7 +107,7 @@ void enable(bool enable) {
         OTG->GUSBCFG = USB_OTG_GUSBCFG_FDMOD | USB_OTG_GUSBCFG_PHYSEL |
                        _VAL2FLD(USB_OTG_GUSBCFG_TRDT, 0x06);
         /* configuring Vbus sense and powerup PHY */
-#if (VBUS_DETECTION)
+#if defined(USBD_VBUS_DETECT)
         OTG->GCCFG |= USB_OTG_GCCFG_VBDEN | USB_OTG_GCCFG_PWRDWN;
 #else
         OTG->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN | USB_OTG_GOTGCTL_BVALOVAL;
@@ -125,7 +124,9 @@ void enable(bool enable) {
         OTGD->DIEPMSK = USB_OTG_DIEPMSK_XFRCM;
         /* unmask core interrupts */
         OTG->GINTMSK  = USB_OTG_GINTMSK_USBRST | USB_OTG_GINTMSK_ENUMDNEM |
+#if !defined(USBD_SOF_DISABLED)
                         USB_OTG_GINTMSK_SOFM |
+#endif
                         USB_OTG_GINTMSK_USBSUSPM | USB_OTG_GINTMSK_WUIM |
                         USB_OTG_GINTMSK_IEPINT | USB_OTG_GINTMSK_RXFLVLM;
         /* clear pending interrupts */
@@ -154,7 +155,7 @@ void reset (void) {
 
 uint8_t connect(bool connect) {
     uint8_t res;
-#if (VBUS_DETECTION)
+#if defined(USBD_VBUS_DETECT)
     #define SET_GCCFG(x) OTG->GCCFG = USB_OTG_GCCFG_VBDEN | (x)
 #else
     #define SET_GCCFG(x) OTG->GCCFG = (x)
@@ -323,7 +324,6 @@ void ep_deconfig(uint8_t ep) {
     /* disabling endpoint */
     if ((epi->DIEPCTL & USB_OTG_DIEPCTL_EPENA) && (ep != 0)) {
         epi->DIEPCTL = USB_OTG_DIEPCTL_EPDIS;
-        _WBS(epi->DIEPINT, USB_OTG_DIEPINT_EPDISD);
     }
     /* clean EP interrupts */
     epi->DIEPINT = 0xFF;
@@ -335,7 +335,6 @@ void ep_deconfig(uint8_t ep) {
     _BCL(epo->DOEPCTL, USB_OTG_DOEPCTL_USBAEP);
     if ((epo->DOEPCTL & USB_OTG_DOEPCTL_EPENA) && (ep != 0)) {
         epo->DOEPCTL = USB_OTG_DOEPCTL_EPDIS;
-        _WBS(epo->DOEPINT, USB_OTG_DOEPINT_EPDISD);
     }
     epo->DOEPINT = 0xFF;
 }
@@ -434,9 +433,11 @@ void evt_poll(usbd_device *dev, usbd_evt_callback callback) {
                 OTG->GRXSTSP;
                 continue;
             }
+#if !defined(USBD_SOF_DISABLED)
         } else if (_t & USB_OTG_GINTSTS_SOF) {
             OTG->GINTSTS = USB_OTG_GINTSTS_SOF;
             evt = usbd_evt_sof;
+#endif
         } else if (_t & USB_OTG_GINTSTS_USBSUSP) {
             evt = usbd_evt_susp;
             OTG->GINTSTS = USB_OTG_GINTSTS_USBSUSP;

+ 7 - 4
src/usb_32v3.c

@@ -153,7 +153,11 @@ void enable(bool enable) {
         RCC->APB1ENR  |= RCC_APB1ENR_USBEN;
         RCC->APB1RSTR |= RCC_APB1RSTR_USBRST;
         RCC->APB1RSTR &= ~RCC_APB1RSTR_USBRST;
-        USB->CNTR = USB_CNTR_CTRM | USB_CNTR_RESETM | USB_CNTR_SOFM | USB_CNTR_ESOFM | USB_CNTR_ERRM | USB_CNTR_SUSPM | USB_CNTR_WKUPM ;
+        USB->CNTR = USB_CNTR_CTRM | USB_CNTR_RESETM | USB_CNTR_ERRM |
+#if !defined(USBD_SOF_DISABLED)
+        USB_CNTR_SOFM |
+#endif
+        USB_CNTR_SUSPM | USB_CNTR_WKUPM;
     } else if (RCC->APB1ENR & RCC_APB1ENR_USBEN) {
         RCC->APB1RSTR |= RCC_APB1RSTR_USBRST;
         RCC->APB1ENR &= ~RCC_APB1ENR_USBEN;
@@ -391,9 +395,11 @@ void evt_poll(usbd_device *dev, usbd_evt_callback callback) {
             ep_deconfig(i);
         }
         _ev = usbd_evt_reset;
+#if !defined(USBD_SOF_DISABLED)
     } else if (_istr & USB_ISTR_SOF) {
         _ev = usbd_evt_sof;
         USB->ISTR &= ~USB_ISTR_SOF;
+#endif
     } else if (_istr & USB_ISTR_WKUP) {
         _ev = usbd_evt_wkup;
         USB->CNTR &= ~USB_CNTR_FSUSP;
@@ -402,9 +408,6 @@ void evt_poll(usbd_device *dev, usbd_evt_callback callback) {
         _ev = usbd_evt_susp;
         USB->CNTR |= USB_CNTR_FSUSP;
         USB->ISTR &= ~USB_ISTR_SUSP;
-    } else if (_istr & USB_ISTR_ESOF) {
-        USB->ISTR &= ~USB_ISTR_ESOF;
-        _ev = usbd_evt_esof;
     } else if (_istr & USB_ISTR_ERR) {
         USB->ISTR &= ~USB_ISTR_ERR;
         _ev = usbd_evt_error;