Browse Source

[bsp][stm32/pandora]增加对板载 AP6181 的支持

yangjie 5 years ago
parent
commit
dae2d1e8fe

+ 2 - 1
bsp/stm32/stm32l475-atk-pandora/README.md

@@ -57,6 +57,7 @@
 | TFTLCD           |    支持     | 使用 SPI3 驱动 |
 | 贴片电机           |    暂不支持     |即将支持                      |
 | 光环境传感器       |    暂不支持     |即将支持                           |
+| AP6181 WIFI 模块 | 支持 |使用 SDIO 驱动 |
 | **片上外设**      | **支持情况** | **备注**                              |
 | GPIO              |     支持     |                                      |
 | UART              |     支持     |                                      |
@@ -68,7 +69,7 @@
 | RTC               |     支持     | 支持外部晶振和内部低速时钟 |
 | WDT               |     支持     |                                      |
 | PWM               |     支持     |                                      |
-| USB Device        |   暂不支持   | 即将支持                              |
+| USB Device        |   支持   |                          |
 | USB Host          |   暂不支持   | 即将支持                              |
 | **扩展模块**      | **支持情况** | **备注**                              |
 | NRF24L01 模块  |     支持    | 根据实际板子接线情况修改 NRF24L01 软件包中的 `NRF24L01_CE_PIN` 和 `NRF24_IRQ_PIN` 的宏定义,以及 SPI 设备名 |

+ 2 - 0
bsp/stm32/stm32l475-atk-pandora/SConstruct

@@ -56,5 +56,7 @@ objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SCons
 # include drivers
 objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript')))
 
+objs.extend(SConscript(os.path.join(os.getcwd(), 'board', 'ports', 'SConscript')))
+
 # make a building
 DoBuilding(TARGET, objs)

File diff suppressed because it is too large
+ 2 - 2
bsp/stm32/stm32l475-atk-pandora/board/CubeMX_Config/.mxproject


+ 1 - 1
bsp/stm32/stm32l475-atk-pandora/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h

@@ -83,7 +83,7 @@
 /*#define HAL_RNG_MODULE_ENABLED   */
 #define HAL_RTC_MODULE_ENABLED
 #define HAL_SAI_MODULE_ENABLED
-/*#define HAL_SD_MODULE_ENABLED   */
+#define HAL_SD_MODULE_ENABLED
 /*#define HAL_SMBUS_MODULE_ENABLED   */
 /*#define HAL_SMARTCARD_MODULE_ENABLED   */
 #define HAL_SPI_MODULE_ENABLED

+ 59 - 40
bsp/stm32/stm32l475-atk-pandora/board/CubeMX_Config/STM32L475VE.ioc

@@ -11,26 +11,27 @@ KeepUserPlacement=false
 Mcu.Family=STM32L4
 Mcu.IP0=ADC1
 Mcu.IP1=IWDG
-Mcu.IP10=SPI3
-Mcu.IP11=SYS
-Mcu.IP12=TIM1
-Mcu.IP13=TIM2
-Mcu.IP14=TIM4
-Mcu.IP15=TIM15
-Mcu.IP16=TIM16
-Mcu.IP17=TIM17
-Mcu.IP18=USART1
-Mcu.IP19=USART2
+Mcu.IP10=SPI2
+Mcu.IP11=SPI3
+Mcu.IP12=SYS
+Mcu.IP13=TIM1
+Mcu.IP14=TIM2
+Mcu.IP15=TIM4
+Mcu.IP16=TIM15
+Mcu.IP17=TIM16
+Mcu.IP18=TIM17
+Mcu.IP19=USART1
 Mcu.IP2=LPTIM1
-Mcu.IP20=USB_OTG_FS
+Mcu.IP20=USART2
+Mcu.IP21=USB_OTG_FS
 Mcu.IP3=NVIC
 Mcu.IP4=QUADSPI
 Mcu.IP5=RCC
 Mcu.IP6=RTC
 Mcu.IP7=SAI1
-Mcu.IP8=SPI1
-Mcu.IP9=SPI2
-Mcu.IPNb=21
+Mcu.IP8=SDMMC1
+Mcu.IP9=SPI1
+Mcu.IPNb=22
 Mcu.Name=STM32L475V(C-E-G)Tx
 Mcu.Package=LQFP100
 Mcu.Pin0=PE2
@@ -53,37 +54,43 @@ Mcu.Pin23=PB11
 Mcu.Pin24=PB13
 Mcu.Pin25=PB14
 Mcu.Pin26=PB15
-Mcu.Pin27=PA9
-Mcu.Pin28=PA10
-Mcu.Pin29=PA11
+Mcu.Pin27=PC8
+Mcu.Pin28=PC9
+Mcu.Pin29=PA9
 Mcu.Pin3=PE5
-Mcu.Pin30=PA12
-Mcu.Pin31=PA13 (JTMS-SWDIO)
-Mcu.Pin32=PA14 (JTCK-SWCLK)
-Mcu.Pin33=PC11
-Mcu.Pin34=PB3 (JTDO-TRACESWO)
-Mcu.Pin35=PB5
-Mcu.Pin36=PB7
-Mcu.Pin37=PB8
-Mcu.Pin38=VP_IWDG_VS_IWDG
-Mcu.Pin39=VP_LPTIM1_VS_LPTIM_counterModeInternalClock
+Mcu.Pin30=PA10
+Mcu.Pin31=PA11
+Mcu.Pin32=PA12
+Mcu.Pin33=PA13 (JTMS-SWDIO)
+Mcu.Pin34=PA14 (JTCK-SWCLK)
+Mcu.Pin35=PC10
+Mcu.Pin36=PC11
+Mcu.Pin37=PC12
+Mcu.Pin38=PD2
+Mcu.Pin39=PB3 (JTDO-TRACESWO)
 Mcu.Pin4=PE6
-Mcu.Pin40=VP_RTC_VS_RTC_Activate
-Mcu.Pin41=VP_SAI1_VP_$IpInstance_SAIA_SAI_BASIC
-Mcu.Pin42=VP_SAI1_VP_$IpInstance_SAIB_SAI_BASIC
-Mcu.Pin43=VP_SYS_VS_Systick
-Mcu.Pin44=VP_TIM1_VS_ClockSourceINT
-Mcu.Pin45=VP_TIM2_VS_ClockSourceINT
-Mcu.Pin46=VP_TIM4_VS_ClockSourceINT
-Mcu.Pin47=VP_TIM15_VS_ClockSourceINT
-Mcu.Pin48=VP_TIM16_VS_ClockSourceINT
-Mcu.Pin49=VP_TIM17_VS_ClockSourceINT
+Mcu.Pin40=PB4 (NJTRST)
+Mcu.Pin41=PB5
+Mcu.Pin42=PB7
+Mcu.Pin43=PB8
+Mcu.Pin44=VP_IWDG_VS_IWDG
+Mcu.Pin45=VP_LPTIM1_VS_LPTIM_counterModeInternalClock
+Mcu.Pin46=VP_RTC_VS_RTC_Activate
+Mcu.Pin47=VP_SAI1_VP_$IpInstance_SAIA_SAI_BASIC
+Mcu.Pin48=VP_SAI1_VP_$IpInstance_SAIB_SAI_BASIC
+Mcu.Pin49=VP_SYS_VS_Systick
 Mcu.Pin5=PC14-OSC32_IN (PC14)
+Mcu.Pin50=VP_TIM1_VS_ClockSourceINT
+Mcu.Pin51=VP_TIM2_VS_ClockSourceINT
+Mcu.Pin52=VP_TIM4_VS_ClockSourceINT
+Mcu.Pin53=VP_TIM15_VS_ClockSourceINT
+Mcu.Pin54=VP_TIM16_VS_ClockSourceINT
+Mcu.Pin55=VP_TIM17_VS_ClockSourceINT
 Mcu.Pin6=PC15-OSC32_OUT (PC15)
 Mcu.Pin7=PH0-OSC_IN (PH0)
 Mcu.Pin8=PH1-OSC_OUT (PH1)
 Mcu.Pin9=PA2
-Mcu.PinsNb=50
+Mcu.PinsNb=56
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32L475VETx
@@ -137,6 +144,8 @@ PB15.Signal=SPI2_MOSI
 PB3\ (JTDO-TRACESWO).Locked=true
 PB3\ (JTDO-TRACESWO).Mode=Full_Duplex_Master
 PB3\ (JTDO-TRACESWO).Signal=SPI3_SCK
+PB4\ (NJTRST).Mode=Full_Duplex_Master
+PB4\ (NJTRST).Signal=SPI3_MISO
 PB5.Locked=true
 PB5.Mode=Full_Duplex_Master
 PB5.Signal=SPI3_MOSI
@@ -144,13 +153,23 @@ PB7.Locked=true
 PB7.Signal=S_TIM4_CH2
 PB8.Locked=true
 PB8.Signal=S_TIM4_CH3
-PC11.Mode=Full_Duplex_Master
-PC11.Signal=SPI3_MISO
+PC10.Mode=SD_4_bits_Wide_bus
+PC10.Signal=SDMMC1_D2
+PC11.Mode=SD_4_bits_Wide_bus
+PC11.Signal=SDMMC1_D3
+PC12.Mode=SD_4_bits_Wide_bus
+PC12.Signal=SDMMC1_CK
 PC14-OSC32_IN\ (PC14).Mode=LSE-External-Oscillator
 PC14-OSC32_IN\ (PC14).Signal=RCC_OSC32_IN
 PC15-OSC32_OUT\ (PC15).Mode=LSE-External-Oscillator
 PC15-OSC32_OUT\ (PC15).Signal=RCC_OSC32_OUT
 PC5.Signal=ADCx_IN14
+PC8.Mode=SD_4_bits_Wide_bus
+PC8.Signal=SDMMC1_D0
+PC9.Mode=SD_4_bits_Wide_bus
+PC9.Signal=SDMMC1_D1
+PD2.Mode=SD_4_bits_Wide_bus
+PD2.Signal=SDMMC1_CMD
 PE10.Mode=Single Bank
 PE10.Signal=QUADSPI_CLK
 PE11.Mode=Single Bank

+ 43 - 1
bsp/stm32/stm32l475-atk-pandora/board/CubeMX_Config/Src/main.c

@@ -75,6 +75,8 @@ RTC_HandleTypeDef hrtc;
 SAI_HandleTypeDef hsai_BlockA1;
 SAI_HandleTypeDef hsai_BlockB1;
 
+SD_HandleTypeDef hsd1;
+
 SPI_HandleTypeDef hspi1;
 SPI_HandleTypeDef hspi2;
 SPI_HandleTypeDef hspi3;
@@ -117,6 +119,7 @@ static void MX_SPI3_Init(void);
 static void MX_TIM2_Init(void);
 static void MX_USB_OTG_FS_PCD_Init(void);
 static void MX_LPTIM1_Init(void);
+static void MX_SDMMC1_SD_Init(void);
 /* USER CODE BEGIN PFP */
 /* Private function prototypes -----------------------------------------------*/
 
@@ -173,6 +176,7 @@ int main(void)
   MX_TIM2_Init();
   MX_USB_OTG_FS_PCD_Init();
   MX_LPTIM1_Init();
+  MX_SDMMC1_SD_Init();
   /* USER CODE BEGIN 2 */
 
   /* USER CODE END 2 */
@@ -238,7 +242,7 @@ void SystemClock_Config(void)
   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1
                               |RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_LPTIM1
                               |RCC_PERIPHCLK_SAI1|RCC_PERIPHCLK_USB
-                              |RCC_PERIPHCLK_ADC;
+                              |RCC_PERIPHCLK_SDMMC1|RCC_PERIPHCLK_ADC;
   PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
   PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
   PeriphClkInit.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_PCLK;
@@ -246,6 +250,7 @@ void SystemClock_Config(void)
   PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLSAI1;
   PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
   PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLLSAI1;
+  PeriphClkInit.Sdmmc1ClockSelection = RCC_SDMMC1CLKSOURCE_PLLSAI1;
   PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_HSE;
   PeriphClkInit.PLLSAI1.PLLSAI1M = 1;
   PeriphClkInit.PLLSAI1.PLLSAI1N = 12;
@@ -511,6 +516,42 @@ static void MX_SAI1_Init(void)
 
 }
 
+/**
+  * @brief SDMMC1 Initialization Function
+  * @param None
+  * @retval None
+  */
+static void MX_SDMMC1_SD_Init(void)
+{
+
+  /* USER CODE BEGIN SDMMC1_Init 0 */
+
+  /* USER CODE END SDMMC1_Init 0 */
+
+  /* USER CODE BEGIN SDMMC1_Init 1 */
+
+  /* USER CODE END SDMMC1_Init 1 */
+  hsd1.Instance = SDMMC1;
+  hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
+  hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
+  hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
+  hsd1.Init.BusWide = SDMMC_BUS_WIDE_1B;
+  hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
+  hsd1.Init.ClockDiv = 0;
+  if (HAL_SD_Init(&hsd1) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  if (HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /* USER CODE BEGIN SDMMC1_Init 2 */
+
+  /* USER CODE END SDMMC1_Init 2 */
+
+}
+
 /**
   * @brief SPI1 Initialization Function
   * @param None
@@ -1066,6 +1107,7 @@ static void MX_GPIO_Init(void)
   __HAL_RCC_GPIOH_CLK_ENABLE();
   __HAL_RCC_GPIOA_CLK_ENABLE();
   __HAL_RCC_GPIOB_CLK_ENABLE();
+  __HAL_RCC_GPIOD_CLK_ENABLE();
 
 }
 

+ 89 - 14
bsp/stm32/stm32l475-atk-pandora/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c

@@ -323,6 +323,91 @@ void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc)
 
 }
 
+/**
+* @brief SD MSP Initialization
+* This function configures the hardware resources used in this example
+* @param hsd: SD handle pointer
+* @retval None
+*/
+void HAL_SD_MspInit(SD_HandleTypeDef* hsd)
+{
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
+  if(hsd->Instance==SDMMC1)
+  {
+  /* USER CODE BEGIN SDMMC1_MspInit 0 */
+
+  /* USER CODE END SDMMC1_MspInit 0 */
+    /* Peripheral clock enable */
+    __HAL_RCC_SDMMC1_CLK_ENABLE();
+  
+    __HAL_RCC_GPIOC_CLK_ENABLE();
+    __HAL_RCC_GPIOD_CLK_ENABLE();
+    /**SDMMC1 GPIO Configuration    
+    PC8     ------> SDMMC1_D0
+    PC9     ------> SDMMC1_D1
+    PC10     ------> SDMMC1_D2
+    PC11     ------> SDMMC1_D3
+    PC12     ------> SDMMC1_CK
+    PD2     ------> SDMMC1_CMD 
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 
+                          |GPIO_PIN_12;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF12_SDMMC1;
+    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = GPIO_PIN_2;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF12_SDMMC1;
+    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+  /* USER CODE BEGIN SDMMC1_MspInit 1 */
+
+  /* USER CODE END SDMMC1_MspInit 1 */
+  }
+
+}
+
+/**
+* @brief SD MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param hsd: SD handle pointer
+* @retval None
+*/
+void HAL_SD_MspDeInit(SD_HandleTypeDef* hsd)
+{
+  if(hsd->Instance==SDMMC1)
+  {
+  /* USER CODE BEGIN SDMMC1_MspDeInit 0 */
+
+  /* USER CODE END SDMMC1_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_SDMMC1_CLK_DISABLE();
+  
+    /**SDMMC1 GPIO Configuration    
+    PC8     ------> SDMMC1_D0
+    PC9     ------> SDMMC1_D1
+    PC10     ------> SDMMC1_D2
+    PC11     ------> SDMMC1_D3
+    PC12     ------> SDMMC1_CK
+    PD2     ------> SDMMC1_CMD 
+    */
+    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 
+                          |GPIO_PIN_12);
+
+    HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);
+
+  /* USER CODE BEGIN SDMMC1_MspDeInit 1 */
+
+  /* USER CODE END SDMMC1_MspDeInit 1 */
+  }
+
+}
+
 /**
 * @brief SPI MSP Initialization
 * This function configures the hardware resources used in this example
@@ -390,21 +475,13 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
     /* Peripheral clock enable */
     __HAL_RCC_SPI3_CLK_ENABLE();
   
-    __HAL_RCC_GPIOC_CLK_ENABLE();
     __HAL_RCC_GPIOB_CLK_ENABLE();
     /**SPI3 GPIO Configuration    
-    PC11     ------> SPI3_MISO
     PB3 (JTDO-TRACESWO)     ------> SPI3_SCK
+    PB4 (NJTRST)     ------> SPI3_MISO
     PB5     ------> SPI3_MOSI 
     */
-    GPIO_InitStruct.Pin = GPIO_PIN_11;
-    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-    GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
-    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
-    GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_5;
+    GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
@@ -473,13 +550,11 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
     __HAL_RCC_SPI3_CLK_DISABLE();
   
     /**SPI3 GPIO Configuration    
-    PC11     ------> SPI3_MISO
     PB3 (JTDO-TRACESWO)     ------> SPI3_SCK
+    PB4 (NJTRST)     ------> SPI3_MISO
     PB5     ------> SPI3_MOSI 
     */
-    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_11);
-
-    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_3|GPIO_PIN_5);
+    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
 
   /* USER CODE BEGIN SPI3_MspDeInit 1 */
 

+ 40 - 0
bsp/stm32/stm32l475-atk-pandora/board/Kconfig

@@ -71,6 +71,37 @@ menu "Onboard Peripheral Drivers"
             bool "Enable Audio Record"
             default n
         endif
+        
+    config BSP_USING_WIFI
+            bool "Enable WiFi (AP6181)"
+            select PKG_USING_WLAN_WICED
+            select BSP_USING_STM32_SDIO
+            select PKG_USING_STM32_SDIO
+            select BSP_USING_QSPI_FLASH
+            select BSP_USING_ON_CHIP_FLASH
+            select RT_USING_WIFI
+            select RT_WLAN_PROT_LWIP_PBUF_FORCE
+            select RT_USING_LWIP
+            select RT_USING_LIBC
+            select RT_USING_POSIX
+            select RT_USING_DFS
+            select PKG_USING_FAL
+            select PKG_USING_EASYFLASH
+            select RT_USING_WIFI_6181_LIB
+            select RT_USING_OTA_LIB
+            select RT_USING_SAL
+            default n
+
+            if BSP_USING_WIFI
+                config BSP_USING_WIFI_THREAD_INIT
+                    bool "Using Thread Initialize WiFi"
+                    default n
+
+                config BSP_USING_WIFI_AUTO_INIT
+                    bool "Using WiFi Automatically Initialization"
+                    depends on RT_USING_COMPONENTS_INIT
+                    default y
+            endif
 
 endmenu
 
@@ -304,6 +335,15 @@ menu "On-chip Peripheral Drivers"
         bool "Enable OTGFS as USB device"
         select RT_USING_USB_DEVICE
         default n
+
+    config BSP_USING_STM32_SDIO
+            bool "Enable SDIO"
+            select RT_USING_SDIO
+            select PKG_USING_STM32_SDIO
+            default n
+            help
+            BSP_USING_STM32_SDIO use drv_sdio_adapter.c,and
+            BSP_USING_SDIO use drv_sdio.c
    
     source "../libraries/HAL_Drivers/Kconfig"
     

+ 4 - 1
bsp/stm32/stm32l475-atk-pandora/board/SConscript

@@ -31,13 +31,16 @@ if GetDepend(['BSP_USING_AUDIO']):
 if GetDepend(['BSP_USING_AUDIO_RECORD']):
     src += Glob('ports/audio/drv_mic.c')
 
+if GetDepend(['BSP_USING_STM32_SDIO']):
+    src += Glob('ports/drv_sdio_adapter.c')    
+
 path =  [cwd]
 path += [cwd + '/CubeMX_Config/Inc']
 path += [cwd + '/ports']
 
 if GetDepend(['BSP_USING_AUDIO']):
     path += [cwd + '/ports/audio']
-
+    
 startup_path_prefix = SDK_LIB
 
 if rtconfig.CROSS_TOOL == 'gcc':

Some files were not shown because too many files changed in this diff