|
|
@ -29,38 +29,30 @@ |
|
|
|
****************************************************************************** |
|
|
|
*/ |
|
|
|
|
|
|
|
/* Includes ------------------------------------------------------------------*/ |
|
|
|
#include "usbd_core.h" |
|
|
|
#include "py/obj.h" |
|
|
|
#include "py/mphal.h" |
|
|
|
#include "irq.h" |
|
|
|
#include "usb.h" |
|
|
|
|
|
|
|
/* Private typedef -----------------------------------------------------------*/ |
|
|
|
/* Private define ------------------------------------------------------------*/ |
|
|
|
/* Private macro -------------------------------------------------------------*/ |
|
|
|
/* Private variables ---------------------------------------------------------*/ |
|
|
|
#if MICROPY_HW_USB_FS |
|
|
|
PCD_HandleTypeDef pcd_fs_handle; |
|
|
|
#endif |
|
|
|
#if MICROPY_HW_USB_HS |
|
|
|
PCD_HandleTypeDef pcd_hs_handle; |
|
|
|
#endif |
|
|
|
/* Private function prototypes -----------------------------------------------*/ |
|
|
|
/* Private functions ---------------------------------------------------------*/ |
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
PCD BSP Routines |
|
|
|
*******************************************************************************/ |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Initializes the PCD MSP. |
|
|
|
* @param hpcd: PCD handle |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) |
|
|
|
{ |
|
|
|
if(hpcd->Instance == USB_OTG_FS) |
|
|
|
{ |
|
|
|
void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) { |
|
|
|
if (hpcd->Instance == USB_OTG_FS) { |
|
|
|
#if defined(STM32H7) |
|
|
|
const uint32_t otg_alt = GPIO_AF10_OTG1_FS; |
|
|
|
#else |
|
|
@ -72,7 +64,6 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) |
|
|
|
mp_hal_pin_config(pin_A12, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, otg_alt); |
|
|
|
mp_hal_pin_config_speed(pin_A12, GPIO_SPEED_FREQ_VERY_HIGH); |
|
|
|
|
|
|
|
/* Configure VBUS Pin */ |
|
|
|
#if defined(MICROPY_HW_USB_VBUS_DETECT_PIN) |
|
|
|
// USB VBUS detect pin is always A9
|
|
|
|
mp_hal_pin_config(MICROPY_HW_USB_VBUS_DETECT_PIN, MP_HAL_PIN_MODE_INPUT, MP_HAL_PIN_PULL_NONE, 0); |
|
|
@ -89,57 +80,49 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) |
|
|
|
__HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE(); |
|
|
|
#endif |
|
|
|
|
|
|
|
/* Enable USB FS Clocks */ |
|
|
|
// Enable USB FS Clocks
|
|
|
|
__USB_OTG_FS_CLK_ENABLE(); |
|
|
|
|
|
|
|
#if defined(STM32L4) |
|
|
|
/* Enable VDDUSB */ |
|
|
|
if(__HAL_RCC_PWR_IS_CLK_DISABLED()) |
|
|
|
{ |
|
|
|
// Enable VDDUSB
|
|
|
|
if (__HAL_RCC_PWR_IS_CLK_DISABLED()) { |
|
|
|
__HAL_RCC_PWR_CLK_ENABLE(); |
|
|
|
HAL_PWREx_EnableVddUSB(); |
|
|
|
__HAL_RCC_PWR_CLK_DISABLE(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
} else { |
|
|
|
HAL_PWREx_EnableVddUSB(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
/* Set USBFS Interrupt priority */ |
|
|
|
// Configure and enable USB FS interrupt
|
|
|
|
NVIC_SetPriority(OTG_FS_IRQn, IRQ_PRI_OTG_FS); |
|
|
|
|
|
|
|
/* Enable USBFS Interrupt */ |
|
|
|
HAL_NVIC_EnableIRQ(OTG_FS_IRQn); |
|
|
|
} |
|
|
|
#if MICROPY_HW_USB_HS |
|
|
|
else if(hpcd->Instance == USB_OTG_HS) |
|
|
|
{ |
|
|
|
else if (hpcd->Instance == USB_OTG_HS) { |
|
|
|
#if MICROPY_HW_USB_HS_IN_FS |
|
|
|
|
|
|
|
/* Configure USB FS GPIOs */ |
|
|
|
// Configure USB FS GPIOs
|
|
|
|
mp_hal_pin_config(pin_B14, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, GPIO_AF12_OTG_HS_FS); |
|
|
|
mp_hal_pin_config_speed(pin_B14, GPIO_SPEED_FREQ_VERY_HIGH); |
|
|
|
mp_hal_pin_config(pin_B15, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, GPIO_AF12_OTG_HS_FS); |
|
|
|
mp_hal_pin_config_speed(pin_B15, GPIO_SPEED_FREQ_VERY_HIGH); |
|
|
|
|
|
|
|
#if defined(MICROPY_HW_USB_VBUS_DETECT_PIN) |
|
|
|
/* Configure VBUS Pin */ |
|
|
|
// Configure VBUS Pin
|
|
|
|
mp_hal_pin_config(MICROPY_HW_USB_VBUS_DETECT_PIN, MP_HAL_PIN_MODE_INPUT, MP_HAL_PIN_PULL_NONE, 0); |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(MICROPY_HW_USB_OTG_ID_PIN) |
|
|
|
/* Configure ID pin */ |
|
|
|
// Configure ID pin
|
|
|
|
mp_hal_pin_config(MICROPY_HW_USB_OTG_ID_PIN, MP_HAL_PIN_MODE_ALT_OPEN_DRAIN, MP_HAL_PIN_PULL_UP, GPIO_AF12_OTG_HS_FS); |
|
|
|
#endif |
|
|
|
/*
|
|
|
|
* Enable calling WFI and correct |
|
|
|
* function of the embedded USB_FS_IN_HS phy |
|
|
|
*/ |
|
|
|
|
|
|
|
// Enable calling WFI and correct function of the embedded USB_FS_IN_HS phy
|
|
|
|
__HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE(); |
|
|
|
__HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE(); |
|
|
|
|
|
|
|
/* Enable USB HS Clocks */ |
|
|
|
// Enable USB HS Clocks
|
|
|
|
|
|
|
|
#if defined(STM32F723xx) || defined(STM32F733xx) |
|
|
|
// Needs to remain awake during sleep or else __WFI() will disable the USB
|
|
|
@ -151,16 +134,17 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) |
|
|
|
__HAL_RCC_USB_OTG_HS_CLK_ENABLE(); |
|
|
|
|
|
|
|
#else // !MICROPY_HW_USB_HS_IN_FS
|
|
|
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStruct; |
|
|
|
|
|
|
|
/* Configure USB HS GPIOs */ |
|
|
|
// Configure USB HS GPIOs
|
|
|
|
__HAL_RCC_GPIOA_CLK_ENABLE(); |
|
|
|
__HAL_RCC_GPIOB_CLK_ENABLE(); |
|
|
|
__HAL_RCC_GPIOC_CLK_ENABLE(); |
|
|
|
__HAL_RCC_GPIOH_CLK_ENABLE(); |
|
|
|
__HAL_RCC_GPIOI_CLK_ENABLE(); |
|
|
|
|
|
|
|
/* CLK */ |
|
|
|
// CLK
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_5; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
@ -168,7 +152,7 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; |
|
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
|
|
|
|
|
|
|
/* D0 */ |
|
|
|
// D0
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_3; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
@ -176,7 +160,7 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; |
|
|
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
|
|
|
|
|
|
|
/* D1 D2 D3 D4 D5 D6 D7 */ |
|
|
|
// D1 D2 D3 D4 D5 D6 D7
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 |\ |
|
|
|
GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
@ -184,56 +168,53 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd) |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; |
|
|
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
|
|
|
|
|
|
|
/* STP */ |
|
|
|
// STP
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_0; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; |
|
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
|
|
|
|
|
|
|
/* NXT */ |
|
|
|
// NXT
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_4; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; |
|
|
|
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); |
|
|
|
|
|
|
|
/* DIR */ |
|
|
|
// DIR
|
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_11; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS; |
|
|
|
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); |
|
|
|
|
|
|
|
/* Enable USB HS Clocks */ |
|
|
|
// Enable USB HS Clocks
|
|
|
|
__USB_OTG_HS_CLK_ENABLE(); |
|
|
|
__USB_OTG_HS_ULPI_CLK_ENABLE(); |
|
|
|
|
|
|
|
#endif // !MICROPY_HW_USB_HS_IN_FS
|
|
|
|
|
|
|
|
/* Set USBHS Interrupt to the lowest priority */ |
|
|
|
// Configure and enable USB HS interrupt
|
|
|
|
NVIC_SetPriority(OTG_HS_IRQn, IRQ_PRI_OTG_HS); |
|
|
|
|
|
|
|
/* Enable USBHS Interrupt */ |
|
|
|
HAL_NVIC_EnableIRQ(OTG_HS_IRQn); |
|
|
|
} |
|
|
|
#endif // MICROPY_HW_USB_HS
|
|
|
|
} |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief DeInitializes the PCD MSP. |
|
|
|
* @param hpcd: PCD handle |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd) |
|
|
|
{ |
|
|
|
if(hpcd->Instance == USB_OTG_FS) |
|
|
|
{ |
|
|
|
void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd) { |
|
|
|
if (hpcd->Instance == USB_OTG_FS) { |
|
|
|
/* Disable USB FS Clocks */ |
|
|
|
__USB_OTG_FS_CLK_DISABLE(); |
|
|
|
__SYSCFG_CLK_DISABLE(); |
|
|
|
} |
|
|
|
#if MICROPY_HW_USB_HS |
|
|
|
else if(hpcd->Instance == USB_OTG_HS) |
|
|
|
{ |
|
|
|
else if (hpcd->Instance == USB_OTG_HS) { |
|
|
|
/* Disable USB FS Clocks */ |
|
|
|
__USB_OTG_HS_CLK_DISABLE(); |
|
|
|
__SYSCFG_CLK_DISABLE(); |
|
|
@ -245,14 +226,12 @@ void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd) |
|
|
|
LL Driver Callbacks (PCD -> USB Device Library) |
|
|
|
*******************************************************************************/ |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Setup stage callback. |
|
|
|
* @param hpcd: PCD handle |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
{ |
|
|
|
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) { |
|
|
|
USBD_LL_SetupStage(hpcd->pData, (uint8_t *)hpcd->Setup); |
|
|
|
} |
|
|
|
|
|
|
@ -262,8 +241,7 @@ void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
* @param epnum: Endpoint Number |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
|
|
|
{ |
|
|
|
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) { |
|
|
|
USBD_LL_DataOutStage(hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff); |
|
|
|
} |
|
|
|
|
|
|
@ -273,8 +251,7 @@ void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
|
|
|
* @param epnum: Endpoint Number |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
|
|
|
{ |
|
|
|
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) { |
|
|
|
USBD_LL_DataInStage(hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff); |
|
|
|
} |
|
|
|
|
|
|
@ -296,13 +273,11 @@ void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
* @param hpcd: PCD handle |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
{ |
|
|
|
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) { |
|
|
|
USBD_SpeedTypeDef speed = USBD_SPEED_FULL; |
|
|
|
|
|
|
|
/* Set USB Current Speed */ |
|
|
|
switch(hpcd->Init.speed) |
|
|
|
{ |
|
|
|
// Set USB Current Speed
|
|
|
|
switch (hpcd->Init.speed) { |
|
|
|
#if defined(PCD_SPEED_HIGH) |
|
|
|
case PCD_SPEED_HIGH: |
|
|
|
speed = USBD_SPEED_HIGH; |
|
|
@ -319,7 +294,7 @@ void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
} |
|
|
|
USBD_LL_SetSpeed(hpcd->pData, speed); |
|
|
|
|
|
|
|
/* Reset Device */ |
|
|
|
// Reset Device
|
|
|
|
USBD_LL_Reset(hpcd->pData); |
|
|
|
} |
|
|
|
|
|
|
@ -328,8 +303,7 @@ void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
* @param hpcd: PCD handle |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
{ |
|
|
|
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) { |
|
|
|
USBD_LL_Suspend(hpcd->pData); |
|
|
|
} |
|
|
|
|
|
|
@ -338,8 +312,7 @@ void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
* @param hpcd: PCD handle |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
{ |
|
|
|
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) { |
|
|
|
USBD_LL_Resume(hpcd->pData); |
|
|
|
} |
|
|
|
|
|
|
@ -349,8 +322,7 @@ void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
* @param epnum: Endpoint Number |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
|
|
|
{ |
|
|
|
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) { |
|
|
|
USBD_LL_IsoOUTIncomplete(hpcd->pData, epnum); |
|
|
|
} |
|
|
|
|
|
|
@ -360,8 +332,7 @@ void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
|
|
|
* @param epnum: Endpoint Number |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
|
|
|
{ |
|
|
|
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) { |
|
|
|
USBD_LL_IsoINIncomplete(hpcd->pData, epnum); |
|
|
|
} |
|
|
|
|
|
|
@ -370,8 +341,7 @@ void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) |
|
|
|
* @param hpcd: PCD handle |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
{ |
|
|
|
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) { |
|
|
|
USBD_LL_DevConnected(hpcd->pData); |
|
|
|
} |
|
|
|
|
|
|
@ -380,25 +350,23 @@ void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
* @param hpcd: PCD handle |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) |
|
|
|
{ |
|
|
|
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) { |
|
|
|
USBD_LL_DevDisconnected(hpcd->pData); |
|
|
|
} |
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
LL Driver Interface (USB Device Library --> PCD) |
|
|
|
*******************************************************************************/ |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Initializes the Low Level portion of the Device driver. |
|
|
|
* @param pdev: Device handle |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev, int high_speed) |
|
|
|
{ |
|
|
|
USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev, int high_speed) { |
|
|
|
#if MICROPY_HW_USB_FS |
|
|
|
if (pdev->id == USB_PHY_FS_ID) |
|
|
|
{ |
|
|
|
/*Set LL Driver parameters */ |
|
|
|
if (pdev->id == USB_PHY_FS_ID) { |
|
|
|
// Set LL Driver parameters
|
|
|
|
pcd_fs_handle.Instance = USB_OTG_FS; |
|
|
|
pcd_fs_handle.Init.dev_endpoints = 4; |
|
|
|
pcd_fs_handle.Init.use_dedicated_ep1 = 0; |
|
|
@ -417,10 +385,12 @@ if (pdev->id == USB_PHY_FS_ID) |
|
|
|
#else |
|
|
|
pcd_fs_handle.Init.vbus_sensing_enable = 1; |
|
|
|
#endif |
|
|
|
/* Link The driver to the stack */ |
|
|
|
|
|
|
|
// Link The driver to the stack
|
|
|
|
pcd_fs_handle.pData = pdev; |
|
|
|
pdev->pData = &pcd_fs_handle; |
|
|
|
/*Initialize LL Driver */ |
|
|
|
|
|
|
|
// Initialize LL Driver
|
|
|
|
HAL_PCD_Init(&pcd_fs_handle); |
|
|
|
|
|
|
|
HAL_PCD_SetRxFiFo(&pcd_fs_handle, 0x80); |
|
|
@ -431,10 +401,10 @@ if (pdev->id == USB_PHY_FS_ID) |
|
|
|
} |
|
|
|
#endif |
|
|
|
#if MICROPY_HW_USB_HS |
|
|
|
if (pdev->id == USB_PHY_HS_ID) |
|
|
|
{ |
|
|
|
if (pdev->id == USB_PHY_HS_ID) { |
|
|
|
#if MICROPY_HW_USB_HS_IN_FS |
|
|
|
/*Set LL Driver parameters */ |
|
|
|
|
|
|
|
// Set LL Driver parameters
|
|
|
|
pcd_hs_handle.Instance = USB_OTG_HS; |
|
|
|
pcd_hs_handle.Init.dev_endpoints = 4; |
|
|
|
pcd_hs_handle.Init.use_dedicated_ep1 = 0; |
|
|
@ -458,10 +428,12 @@ if (pdev->id == USB_PHY_HS_ID) |
|
|
|
pcd_hs_handle.Init.vbus_sensing_enable = 1; |
|
|
|
#endif |
|
|
|
pcd_hs_handle.Init.use_external_vbus = 0; |
|
|
|
/* Link The driver to the stack */ |
|
|
|
|
|
|
|
// Link The driver to the stack
|
|
|
|
pcd_hs_handle.pData = pdev; |
|
|
|
pdev->pData = &pcd_hs_handle; |
|
|
|
/*Initialize LL Driver */ |
|
|
|
|
|
|
|
// Initialize LL Driver
|
|
|
|
HAL_PCD_Init(&pcd_hs_handle); |
|
|
|
|
|
|
|
HAL_PCD_SetRxFiFo(&pcd_hs_handle, 0x200); |
|
|
@ -469,8 +441,10 @@ if (pdev->id == USB_PHY_HS_ID) |
|
|
|
HAL_PCD_SetTxFiFo(&pcd_hs_handle, 1, 0x100); |
|
|
|
HAL_PCD_SetTxFiFo(&pcd_hs_handle, 2, 0x20); |
|
|
|
HAL_PCD_SetTxFiFo(&pcd_hs_handle, 3, 0xc0); |
|
|
|
|
|
|
|
#else // !MICROPY_HW_USB_HS_IN_FS
|
|
|
|
/*Set LL Driver parameters */ |
|
|
|
|
|
|
|
// Set LL Driver parameters
|
|
|
|
pcd_hs_handle.Instance = USB_OTG_HS; |
|
|
|
pcd_hs_handle.Init.dev_endpoints = 6; |
|
|
|
pcd_hs_handle.Init.use_dedicated_ep1 = 0; |
|
|
@ -488,10 +462,12 @@ if (pdev->id == USB_PHY_HS_ID) |
|
|
|
pcd_hs_handle.Init.Sof_enable = 1; |
|
|
|
pcd_hs_handle.Init.speed = PCD_SPEED_HIGH; |
|
|
|
pcd_hs_handle.Init.vbus_sensing_enable = 1; |
|
|
|
/* Link The driver to the stack */ |
|
|
|
|
|
|
|
// Link The driver to the stack
|
|
|
|
pcd_hs_handle.pData = pdev; |
|
|
|
pdev->pData = &pcd_hs_handle; |
|
|
|
/*Initialize LL Driver */ |
|
|
|
|
|
|
|
// Initialize LL Driver
|
|
|
|
HAL_PCD_Init(&pcd_hs_handle); |
|
|
|
|
|
|
|
HAL_PCD_SetRxFiFo(&pcd_hs_handle, 0x200); |
|
|
@ -501,6 +477,7 @@ if (pdev->id == USB_PHY_HS_ID) |
|
|
|
#endif // !MICROPY_HW_USB_HS_IN_FS
|
|
|
|
} |
|
|
|
#endif // MICROPY_HW_USB_HS
|
|
|
|
|
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
|
|
|
|
@ -509,8 +486,7 @@ if (pdev->id == USB_PHY_HS_ID) |
|
|
|
* @param pdev: Device handle |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev) |
|
|
|
{ |
|
|
|
USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev) { |
|
|
|
HAL_PCD_DeInit(pdev->pData); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -520,8 +496,7 @@ USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev) |
|
|
|
* @param pdev: Device handle |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev) |
|
|
|
{ |
|
|
|
USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev) { |
|
|
|
HAL_PCD_Start(pdev->pData); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -531,8 +506,7 @@ USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev) |
|
|
|
* @param pdev: Device handle |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev) |
|
|
|
{ |
|
|
|
USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev) { |
|
|
|
HAL_PCD_Stop(pdev->pData); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -546,10 +520,7 @@ USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev) |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, |
|
|
|
uint8_t ep_addr, |
|
|
|
uint8_t ep_type, |
|
|
|
uint16_t ep_mps) |
|
|
|
{ |
|
|
|
uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps) { |
|
|
|
HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -560,8 +531,7 @@ USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, |
|
|
|
* @param ep_addr: Endpoint Number |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
{ |
|
|
|
USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) { |
|
|
|
HAL_PCD_EP_Close(pdev->pData, ep_addr); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -572,8 +542,7 @@ USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
* @param ep_addr: Endpoint Number |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
{ |
|
|
|
USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) { |
|
|
|
HAL_PCD_EP_Flush(pdev->pData, ep_addr); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -584,8 +553,7 @@ USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
* @param ep_addr: Endpoint Number |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
{ |
|
|
|
USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) { |
|
|
|
HAL_PCD_EP_SetStall(pdev->pData, ep_addr); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -596,8 +564,7 @@ USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
* @param ep_addr: Endpoint Number |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
{ |
|
|
|
USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) { |
|
|
|
HAL_PCD_EP_ClrStall(pdev->pData, ep_addr); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -608,16 +575,12 @@ USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_add |
|
|
|
* @param ep_addr: Endpoint Number |
|
|
|
* @retval Stall (1: yes, 0: No) |
|
|
|
*/ |
|
|
|
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
{ |
|
|
|
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) { |
|
|
|
PCD_HandleTypeDef *hpcd = pdev->pData; |
|
|
|
|
|
|
|
if((ep_addr & 0x80) == 0x80) |
|
|
|
{ |
|
|
|
if ((ep_addr & 0x80) == 0x80) { |
|
|
|
return hpcd->IN_ep[ep_addr & 0x7F].is_stall; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
} else { |
|
|
|
return hpcd->OUT_ep[ep_addr & 0x7F].is_stall; |
|
|
|
} |
|
|
|
} |
|
|
@ -628,8 +591,7 @@ uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
* @param dev_addr: USB address |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr) |
|
|
|
{ |
|
|
|
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr) { |
|
|
|
HAL_PCD_SetAddress(pdev->pData, dev_addr); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -643,10 +605,7 @@ USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_a |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, |
|
|
|
uint8_t ep_addr, |
|
|
|
uint8_t *pbuf, |
|
|
|
uint16_t size) |
|
|
|
{ |
|
|
|
uint8_t ep_addr, uint8_t *pbuf, uint16_t size) { |
|
|
|
HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -660,10 +619,7 @@ USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, |
|
|
|
* @retval USBD Status |
|
|
|
*/ |
|
|
|
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, |
|
|
|
uint8_t ep_addr, |
|
|
|
uint8_t *pbuf, |
|
|
|
uint16_t size) |
|
|
|
{ |
|
|
|
uint8_t ep_addr, uint8_t *pbuf, uint16_t size) { |
|
|
|
HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size); |
|
|
|
return USBD_OK; |
|
|
|
} |
|
|
@ -674,8 +630,7 @@ USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, |
|
|
|
* @param ep_addr: Endpoint Number |
|
|
|
* @retval Recived Data Size |
|
|
|
*/ |
|
|
|
uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
{ |
|
|
|
uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr) { |
|
|
|
return HAL_PCD_EP_GetRxCount(pdev->pData, ep_addr); |
|
|
|
} |
|
|
|
|
|
|
@ -684,8 +639,7 @@ uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
|
|
|
* @param Delay: Delay in ms |
|
|
|
* @retval None |
|
|
|
*/ |
|
|
|
void USBD_LL_Delay(uint32_t Delay) |
|
|
|
{ |
|
|
|
void USBD_LL_Delay(uint32_t Delay) { |
|
|
|
HAL_Delay(Delay); |
|
|
|
} |
|
|
|
|
|
|
|