|
34 | 34 | #include "usbd_core.h" |
35 | 35 | #include "py/obj.h" |
36 | 36 | #include "irq.h" |
| 37 | +#include "usb.h" |
37 | 38 |
|
38 | 39 | /* Private typedef -----------------------------------------------------------*/ |
39 | 40 | /* Private define ------------------------------------------------------------*/ |
40 | 41 | /* Private macro -------------------------------------------------------------*/ |
41 | 42 | /* Private variables ---------------------------------------------------------*/ |
42 | | -PCD_HandleTypeDef pcd_handle; |
43 | | - |
| 43 | +#ifdef USE_USB_FS |
| 44 | +PCD_HandleTypeDef pcd_fs_handle; |
| 45 | +#endif |
| 46 | +#ifdef USE_USB_HS |
| 47 | +PCD_HandleTypeDef pcd_hs_handle; |
| 48 | +#endif |
44 | 49 | /* Private function prototypes -----------------------------------------------*/ |
45 | 50 | /* Private functions ---------------------------------------------------------*/ |
46 | 51 |
|
@@ -379,90 +384,97 @@ void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) |
379 | 384 | USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev) |
380 | 385 | { |
381 | 386 | #if defined(USE_USB_FS) |
| 387 | +if (pdev->id == USB_PHY_FS_ID) |
| 388 | +{ |
382 | 389 | /*Set LL Driver parameters */ |
383 | | - pcd_handle.Instance = USB_OTG_FS; |
384 | | - pcd_handle.Init.dev_endpoints = 4; |
385 | | - pcd_handle.Init.use_dedicated_ep1 = 0; |
386 | | - pcd_handle.Init.ep0_mps = 0x40; |
387 | | - pcd_handle.Init.dma_enable = 0; |
388 | | - pcd_handle.Init.low_power_enable = 0; |
389 | | - pcd_handle.Init.phy_itface = PCD_PHY_EMBEDDED; |
390 | | - pcd_handle.Init.Sof_enable = 0; |
391 | | - pcd_handle.Init.speed = PCD_SPEED_FULL; |
| 390 | + pcd_fs_handle.Instance = USB_OTG_FS; |
| 391 | + pcd_fs_handle.Init.dev_endpoints = 4; |
| 392 | + pcd_fs_handle.Init.use_dedicated_ep1 = 0; |
| 393 | + pcd_fs_handle.Init.ep0_mps = 0x40; |
| 394 | + pcd_fs_handle.Init.dma_enable = 0; |
| 395 | + pcd_fs_handle.Init.low_power_enable = 0; |
| 396 | + pcd_fs_handle.Init.phy_itface = PCD_PHY_EMBEDDED; |
| 397 | + pcd_fs_handle.Init.Sof_enable = 0; |
| 398 | + pcd_fs_handle.Init.speed = PCD_SPEED_FULL; |
392 | 399 | #if !defined(MICROPY_HW_USB_VBUS_DETECT_PIN) |
393 | | - pcd_handle.Init.vbus_sensing_enable = 0; // No VBUS Sensing on USB0 |
| 400 | + pcd_fs_handle.Init.vbus_sensing_enable = 0; // No VBUS Sensing on USB0 |
394 | 401 | #else |
395 | | - pcd_handle.Init.vbus_sensing_enable = 1; |
| 402 | + pcd_fs_handle.Init.vbus_sensing_enable = 1; |
396 | 403 | #endif |
397 | 404 | /* Link The driver to the stack */ |
398 | | - pcd_handle.pData = pdev; |
399 | | - pdev->pData = &pcd_handle; |
| 405 | + pcd_fs_handle.pData = pdev; |
| 406 | + pdev->pData = &pcd_fs_handle; |
400 | 407 | /*Initialize LL Driver */ |
401 | | - HAL_PCD_Init(&pcd_handle); |
402 | | - |
403 | | - HAL_PCD_SetRxFiFo(&pcd_handle, 0x80); |
404 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 0, 0x20); |
405 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 1, 0x40); |
406 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 2, 0x20); |
407 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 3, 0x40); |
408 | | -#elif defined(USE_USB_HS) |
| 408 | + HAL_PCD_Init(&pcd_fs_handle); |
| 409 | + |
| 410 | + HAL_PCD_SetRxFiFo(&pcd_fs_handle, 0x80); |
| 411 | + HAL_PCD_SetTxFiFo(&pcd_fs_handle, 0, 0x20); |
| 412 | + HAL_PCD_SetTxFiFo(&pcd_fs_handle, 1, 0x40); |
| 413 | + HAL_PCD_SetTxFiFo(&pcd_fs_handle, 2, 0x20); |
| 414 | + HAL_PCD_SetTxFiFo(&pcd_fs_handle, 3, 0x40); |
| 415 | +} |
| 416 | +#endif |
| 417 | +#if defined(USE_USB_HS) |
| 418 | +if (pdev->id == USB_PHY_HS_ID) |
| 419 | +{ |
409 | 420 | #if defined(USE_USB_HS_IN_FS) |
410 | 421 | /*Set LL Driver parameters */ |
411 | | - pcd_handle.Instance = USB_OTG_HS; |
412 | | - pcd_handle.Init.dev_endpoints = 4; |
413 | | - pcd_handle.Init.use_dedicated_ep1 = 0; |
414 | | - pcd_handle.Init.ep0_mps = 0x40; |
415 | | - pcd_handle.Init.dma_enable = 0; |
416 | | - pcd_handle.Init.low_power_enable = 0; |
417 | | - pcd_handle.Init.phy_itface = PCD_PHY_EMBEDDED; |
418 | | - pcd_handle.Init.Sof_enable = 0; |
419 | | - pcd_handle.Init.speed = PCD_SPEED_HIGH_IN_FULL; |
| 422 | + pcd_hs_handle.Instance = USB_OTG_HS; |
| 423 | + pcd_hs_handle.Init.dev_endpoints = 4; |
| 424 | + pcd_hs_handle.Init.use_dedicated_ep1 = 0; |
| 425 | + pcd_hs_handle.Init.ep0_mps = 0x40; |
| 426 | + pcd_hs_handle.Init.dma_enable = 0; |
| 427 | + pcd_hs_handle.Init.low_power_enable = 0; |
| 428 | + pcd_hs_handle.Init.phy_itface = PCD_PHY_EMBEDDED; |
| 429 | + pcd_hs_handle.Init.Sof_enable = 0; |
| 430 | + pcd_hs_handle.Init.speed = PCD_SPEED_HIGH_IN_FULL; |
420 | 431 | #if !defined(MICROPY_HW_USB_VBUS_DETECT_PIN) |
421 | | - pcd_handle.Init.vbus_sensing_enable = 0; // No VBUS Sensing on USB0 |
| 432 | + pcd_hs_handle.Init.vbus_sensing_enable = 0; // No VBUS Sensing on USB0 |
422 | 433 | #else |
423 | | - pcd_handle.Init.vbus_sensing_enable = 1; |
| 434 | + pcd_hs_handle.Init.vbus_sensing_enable = 1; |
424 | 435 | #endif |
425 | 436 | /* Link The driver to the stack */ |
426 | | - pcd_handle.pData = pdev; |
427 | | - pdev->pData = &pcd_handle; |
| 437 | + pcd_hs_handle.pData = pdev; |
| 438 | + pdev->pData = &pcd_hs_handle; |
428 | 439 | /*Initialize LL Driver */ |
429 | | - HAL_PCD_Init(&pcd_handle); |
| 440 | + HAL_PCD_Init(&pcd_hs_handle); |
430 | 441 |
|
431 | | - HAL_PCD_SetRxFiFo(&pcd_handle, 0x80); |
432 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 0, 0x20); |
433 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 1, 0x40); |
434 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 2, 0x20); |
435 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 3, 0x40); |
| 442 | + HAL_PCD_SetRxFiFo(&pcd_hs_handle, 0x80); |
| 443 | + HAL_PCD_SetTxFiFo(&pcd_hs_handle, 0, 0x20); |
| 444 | + HAL_PCD_SetTxFiFo(&pcd_hs_handle, 1, 0x40); |
| 445 | + HAL_PCD_SetTxFiFo(&pcd_hs_handle, 2, 0x20); |
| 446 | + HAL_PCD_SetTxFiFo(&pcd_hs_handle, 3, 0x40); |
436 | 447 | #else // !defined(USE_USB_HS_IN_FS) |
437 | 448 | /*Set LL Driver parameters */ |
438 | | - pcd_handle.Instance = USB_OTG_HS; |
439 | | - pcd_handle.Init.dev_endpoints = 6; |
440 | | - pcd_handle.Init.use_dedicated_ep1 = 0; |
441 | | - pcd_handle.Init.ep0_mps = 0x40; |
| 449 | + pcd_hs_handle.Instance = USB_OTG_HS; |
| 450 | + pcd_hs_handle.Init.dev_endpoints = 6; |
| 451 | + pcd_hs_handle.Init.use_dedicated_ep1 = 0; |
| 452 | + pcd_hs_handle.Init.ep0_mps = 0x40; |
442 | 453 |
|
443 | 454 | /* Be aware that enabling USB-DMA mode will result in data being sent only by |
444 | 455 | multiple of 4 packet sizes. This is due to the fact that USB-DMA does |
445 | 456 | not allow sending data from non word-aligned addresses. |
446 | 457 | For this specific application, it is advised to not enable this option |
447 | 458 | unless required. */ |
448 | | - pcd_handle.Init.dma_enable = 0; |
| 459 | + pcd_hs_handle.Init.dma_enable = 0; |
449 | 460 |
|
450 | | - pcd_handle.Init.low_power_enable = 0; |
451 | | - pcd_handle.Init.phy_itface = PCD_PHY_ULPI; |
452 | | - pcd_handle.Init.Sof_enable = 0; |
453 | | - pcd_handle.Init.speed = PCD_SPEED_HIGH; |
454 | | - pcd_handle.Init.vbus_sensing_enable = 1; |
| 461 | + pcd_hs_handle.Init.low_power_enable = 0; |
| 462 | + pcd_hs_handle.Init.phy_itface = PCD_PHY_ULPI; |
| 463 | + pcd_hs_handle.Init.Sof_enable = 0; |
| 464 | + pcd_hs_handle.Init.speed = PCD_SPEED_HIGH; |
| 465 | + pcd_hs_handle.Init.vbus_sensing_enable = 1; |
455 | 466 | /* Link The driver to the stack */ |
456 | | - pcd_handle.pData = pdev; |
457 | | - pdev->pData = &pcd_handle; |
| 467 | + pcd_hs_handle.pData = pdev; |
| 468 | + pdev->pData = &pcd_hs_handle; |
458 | 469 | /*Initialize LL Driver */ |
459 | | - HAL_PCD_Init(&pcd_handle); |
| 470 | + HAL_PCD_Init(&pcd_hs_handle); |
460 | 471 |
|
461 | | - HAL_PCD_SetRxFiFo(&pcd_handle, 0x200); |
462 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 0, 0x80); |
463 | | - HAL_PCD_SetTxFiFo(&pcd_handle, 1, 0x174); |
| 472 | + HAL_PCD_SetRxFiFo(&pcd_hs_handle, 0x200); |
| 473 | + HAL_PCD_SetTxFiFo(&pcd_hs_handle, 0, 0x80); |
| 474 | + HAL_PCD_SetTxFiFo(&pcd_hs_handle, 1, 0x174); |
464 | 475 |
|
465 | 476 | #endif // !USE_USB_HS_IN_FS |
| 477 | +} |
466 | 478 | #endif // USE_USB_HS |
467 | 479 | return USBD_OK; |
468 | 480 | } |
|
0 commit comments