- OtherSpeedConfigution descriptor handling added
- PWRDWN flag is kept cleared in HS mode - RX FIFO size increased to 1024 when operating in HS mode
This commit is contained in:
parent
5a4d170102
commit
c7b69000e7
5
usb.c
5
usb.c
@ -131,8 +131,13 @@ void usbcore_process_setup_pckt(const uint8_t *data, uint16_t size, uint8_t stag
|
|||||||
SET_TRANSMISSION_POINTER(&devDesc);
|
SET_TRANSMISSION_POINTER(&devDesc);
|
||||||
break;
|
break;
|
||||||
case UD_Configuration: // CONFIGURATION DESCRIPTOR
|
case UD_Configuration: // CONFIGURATION DESCRIPTOR
|
||||||
|
case UD_OtherSpeedConfiguration: // OTHER SPEED CONFIGURATION DESCRIPTOR
|
||||||
DETERMINE_TRANSFER_SIZE(confDescs[desc_index]->wTotalLength);
|
DETERMINE_TRANSFER_SIZE(confDescs[desc_index]->wTotalLength);
|
||||||
SET_TRANSMISSION_POINTER(confDescs[desc_index]);
|
SET_TRANSMISSION_POINTER(confDescs[desc_index]);
|
||||||
|
|
||||||
|
if (desc_type == UD_OtherSpeedConfiguration) { // change bDescriptorType to Other_Speed_Configuration
|
||||||
|
confDescs[desc_index]->bDescriptorType = UD_OtherSpeedConfiguration;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case UD_String: // STRING DESCRIPTOR
|
case UD_String: // STRING DESCRIPTOR
|
||||||
DETERMINE_TRANSFER_SIZE(strDescs[desc_index]->bLength);
|
DETERMINE_TRANSFER_SIZE(strDescs[desc_index]->bLength);
|
||||||
|
20
usb_driver.c
20
usb_driver.c
@ -123,7 +123,7 @@ void usbdrv_init() {
|
|||||||
usbdrv_initial_ep0_setup();
|
usbdrv_initial_ep0_setup();
|
||||||
usbdrv_power_and_connect(true);
|
usbdrv_power_and_connect(true);
|
||||||
|
|
||||||
NVIC_SetPriority(USB_IRQn, 0);
|
NVIC_SetPriority(USB_IRQn, 7);
|
||||||
NVIC_EnableIRQ(USB_IRQn);
|
NVIC_EnableIRQ(USB_IRQn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ void usbdrv_periph_init() {
|
|||||||
CLEAR_BIT(USBG->GAHBCFG, USB_OTG_GAHBCFG_GINT); // mask all interrupts for now
|
CLEAR_BIT(USBG->GAHBCFG, USB_OTG_GAHBCFG_GINT); // mask all interrupts for now
|
||||||
CLEAR_BIT(USBG->GUSBCFG, USB_OTG_GUSBCFG_HNPCAP | USB_OTG_GUSBCFG_SRPCAP); // disable HNP and SRP
|
CLEAR_BIT(USBG->GUSBCFG, USB_OTG_GUSBCFG_HNPCAP | USB_OTG_GUSBCFG_SRPCAP); // disable HNP and SRP
|
||||||
WRITE_FIELD(USBG->GUSBCFG, USB_OTG_GUSBCFG_TRDT, TRDT_VALUE); // set TRDT according to the RM
|
WRITE_FIELD(USBG->GUSBCFG, USB_OTG_GUSBCFG_TRDT, TRDT_VALUE); // set TRDT according to the RM
|
||||||
// WRITE_FIELD(USBG->GUSBCFG, USB_OTG_GUSBCFG_TOCAL, TOCAL_VALUE); // set TOCAL
|
//WRITE_FIELD(USBG->GUSBCFG, USB_OTG_GUSBCFG_TOCAL, TOCAL_VALUE); // set TOCAL
|
||||||
CLEAR_BIT(USBG->GUSBCFG, USB_OTG_GUSBCFG_FHMOD); // clear Host mode forcing
|
CLEAR_BIT(USBG->GUSBCFG, USB_OTG_GUSBCFG_FHMOD); // clear Host mode forcing
|
||||||
SET_BIT(USBG->GUSBCFG, USB_OTG_GUSBCFG_FDMOD); // force Device mode
|
SET_BIT(USBG->GUSBCFG, USB_OTG_GUSBCFG_FDMOD); // force Device mode
|
||||||
|
|
||||||
@ -258,8 +258,8 @@ void usbdrv_periph_init() {
|
|||||||
|
|
||||||
#ifdef USB_HIGH_SPEED
|
#ifdef USB_HIGH_SPEED
|
||||||
// WRITE_FIELD(USBD->DCFG, USB_OTG_DCFG_DSPD, USB_LINESPEED_FULL_SPEED);
|
// WRITE_FIELD(USBD->DCFG, USB_OTG_DCFG_DSPD, USB_LINESPEED_FULL_SPEED);
|
||||||
// WRITE_FIELD(USBD->DCFG, USB_OTG_DCFG_DSPD, USB_LINESPEED_HIGH_SPEED_ULPI);
|
WRITE_FIELD(USBD->DCFG, USB_OTG_DCFG_DSPD, USB_LINESPEED_HIGH_SPEED_ULPI);
|
||||||
WRITE_FIELD(USBD->DCFG, USB_OTG_DCFG_DSPD, USB_LINESPEED_FULL_SPEED_ULPI);
|
//WRITE_FIELD(USBD->DCFG, USB_OTG_DCFG_DSPD, USB_LINESPEED_FULL_SPEED_ULPI);
|
||||||
#else
|
#else
|
||||||
WRITE_FIELD(USBD->DCFG, USB_OTG_DCFG_DSPD, USB_LINESPEED_FULL_SPEED); // there's no other possible option
|
WRITE_FIELD(USBD->DCFG, USB_OTG_DCFG_DSPD, USB_LINESPEED_FULL_SPEED); // there's no other possible option
|
||||||
#endif
|
#endif
|
||||||
@ -301,10 +301,14 @@ void usbdrv_periph_init() {
|
|||||||
void usbdrv_power_and_connect(bool en) {
|
void usbdrv_power_and_connect(bool en) {
|
||||||
if (en) { // ON
|
if (en) { // ON
|
||||||
CLEAR_BIT(USBD->DCTL, USB_OTG_DCTL_SDIS);
|
CLEAR_BIT(USBD->DCTL, USB_OTG_DCTL_SDIS);
|
||||||
|
#ifndef USB_HIGH_SPEED
|
||||||
SET_BIT(USBG->GCCFG, USB_OTG_GCCFG_PWRDWN); // actually, this is power UP
|
SET_BIT(USBG->GCCFG, USB_OTG_GCCFG_PWRDWN); // actually, this is power UP
|
||||||
|
#endif
|
||||||
} else { // OFF
|
} else { // OFF
|
||||||
SET_BIT(USBD->DCTL, USB_OTG_DCTL_SDIS);
|
SET_BIT(USBD->DCTL, USB_OTG_DCTL_SDIS);
|
||||||
|
#ifndef USB_HIGH_SPEED
|
||||||
CLEAR_BIT(USBG->GCCFG, USB_OTG_GCCFG_PWRDWN);
|
CLEAR_BIT(USBG->GCCFG, USB_OTG_GCCFG_PWRDWN);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -382,9 +386,13 @@ void usbdrv_fetch_endpoint_configuration(uint8_t config_index) {
|
|||||||
#define USB_RX_FIFO_SETUP_RESERVATION_DWORDS (10)
|
#define USB_RX_FIFO_SETUP_RESERVATION_DWORDS (10)
|
||||||
#define USB_MIN_GROSS_TX_FIFO_SIZE (2 * USB_MIN_EP_FIFO_SIZE)
|
#define USB_MIN_GROSS_TX_FIFO_SIZE (2 * USB_MIN_EP_FIFO_SIZE)
|
||||||
|
|
||||||
#if defined(USB_STM32F4) && !defined(USB_HIGH_SPEED)
|
#if defined(USB_STM32F4)
|
||||||
|
#ifndef USB_HIGH_SPEED
|
||||||
#define USB_MIN_GROSS_RX_FIFO_SIZE (2 * USB_MIN_EP_FIFO_SIZE + USB_RX_FIFO_SETUP_RESERVATION_DWORDS * 4)
|
#define USB_MIN_GROSS_RX_FIFO_SIZE (2 * USB_MIN_EP_FIFO_SIZE + USB_RX_FIFO_SETUP_RESERVATION_DWORDS * 4)
|
||||||
#elif defined(USB_STM32H7) || defined(USB_HIGH_SPEED)
|
#else
|
||||||
|
#define USB_MIN_GROSS_RX_FIFO_SIZE (1024)
|
||||||
|
#endif
|
||||||
|
#elif defined(USB_STM32H7)
|
||||||
#define USB_MIN_GROSS_RX_FIFO_SIZE (256)
|
#define USB_MIN_GROSS_RX_FIFO_SIZE (256)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user