Bladeren bron

[bsp][stm32][stm32f103-atk-warshipv3]add sdcard driver

linyiyang 5 jaren geleden
bovenliggende
commit
8f1d5c5ba2

File diff suppressed because it is too large
+ 0 - 0
bsp/stm32/stm32f103-atk-warshipv3/board/CubeMX_Config/.mxproject


+ 38 - 17
bsp/stm32/stm32f103-atk-warshipv3/board/CubeMX_Config/CubeMX_Config.ioc

@@ -10,10 +10,11 @@ Mcu.Family=STM32F1
 Mcu.IP0=FSMC
 Mcu.IP1=NVIC
 Mcu.IP2=RCC
-Mcu.IP3=SYS
-Mcu.IP4=TIM3
-Mcu.IP5=USART1
-Mcu.IPNb=6
+Mcu.IP3=SDIO
+Mcu.IP4=SYS
+Mcu.IP5=TIM3
+Mcu.IP6=USART1
+Mcu.IPNb=7
 Mcu.Name=STM32F103Z(C-D-E)Tx
 Mcu.Package=LQFP144
 Mcu.Pin0=PC14-OSC32_IN
@@ -49,25 +50,31 @@ Mcu.Pin35=PG4
 Mcu.Pin36=PG5
 Mcu.Pin37=PC6
 Mcu.Pin38=PC7
-Mcu.Pin39=PA9
+Mcu.Pin39=PC8
 Mcu.Pin4=PF2
-Mcu.Pin40=PA10
-Mcu.Pin41=PA13
-Mcu.Pin42=PA14
-Mcu.Pin43=PD0
-Mcu.Pin44=PD1
-Mcu.Pin45=PD4
-Mcu.Pin46=PD5
-Mcu.Pin47=PG10
-Mcu.Pin48=PE0
-Mcu.Pin49=PE1
+Mcu.Pin40=PC9
+Mcu.Pin41=PA9
+Mcu.Pin42=PA10
+Mcu.Pin43=PA13
+Mcu.Pin44=PA14
+Mcu.Pin45=PC10
+Mcu.Pin46=PC11
+Mcu.Pin47=PC12
+Mcu.Pin48=PD0
+Mcu.Pin49=PD1
 Mcu.Pin5=PF3
-Mcu.Pin50=VP_SYS_VS_Systick
+Mcu.Pin50=PD2
+Mcu.Pin51=PD4
+Mcu.Pin52=PD5
+Mcu.Pin53=PG10
+Mcu.Pin54=PE0
+Mcu.Pin55=PE1
+Mcu.Pin56=VP_SYS_VS_Systick
 Mcu.Pin6=PF4
 Mcu.Pin7=PF5
 Mcu.Pin8=OSC_IN
 Mcu.Pin9=OSC_OUT
-Mcu.PinsNb=51
+Mcu.PinsNb=57
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32F103ZETx
@@ -96,6 +103,12 @@ PA14.Mode=Serial_Wire
 PA14.Signal=SYS_JTCK-SWCLK
 PA9.Mode=Asynchronous
 PA9.Signal=USART1_TX
+PC10.Mode=SD_4_bits_Wide_bus
+PC10.Signal=SDIO_D2
+PC11.Mode=SD_4_bits_Wide_bus
+PC11.Signal=SDIO_D3
+PC12.Mode=SD_4_bits_Wide_bus
+PC12.Signal=SDIO_CK
 PC14-OSC32_IN.Mode=LSE-External-Oscillator
 PC14-OSC32_IN.Signal=RCC_OSC32_IN
 PC15-OSC32_OUT.Mode=LSE-External-Oscillator
@@ -104,6 +117,10 @@ PC6.Locked=true
 PC6.Signal=S_TIM3_CH1
 PC7.Locked=true
 PC7.Signal=S_TIM3_CH2
+PC8.Mode=SD_4_bits_Wide_bus
+PC8.Signal=SDIO_D0
+PC9.Mode=SD_4_bits_Wide_bus
+PC9.Signal=SDIO_D1
 PCC.Checker=false
 PCC.Line=STM32F103
 PCC.MCU=STM32F103Z(C-D-E)Tx
@@ -120,6 +137,8 @@ PD12.Signal=FSMC_A17_ALE
 PD13.Signal=FSMC_A18
 PD14.Signal=FSMC_D0_DA0
 PD15.Signal=FSMC_D1_DA1
+PD2.Mode=SD_4_bits_Wide_bus
+PD2.Signal=SDIO_CMD
 PD4.Signal=FSMC_NOE
 PD5.Signal=FSMC_NWE
 PD8.Signal=FSMC_D13_DA13
@@ -209,6 +228,8 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
 RCC.TimSysFreq_Value=72000000
 RCC.USBFreq_Value=72000000
 RCC.VCOOutput2Freq_Value=8000000
+SDIO.ClockDiv=0
+SDIO.IPParameters=ClockDiv
 SH.FSMC_A0.0=FSMC_A0,19b-a1
 SH.FSMC_A0.ConfNb=1
 SH.FSMC_A1.0=FSMC_A1,19b-a1

+ 1 - 1
bsp/stm32/stm32f103-atk-warshipv3/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h

@@ -57,7 +57,7 @@
 /*#define HAL_PWR_MODULE_ENABLED   */
 /*#define HAL_RCC_MODULE_ENABLED   */
 /*#define HAL_RTC_MODULE_ENABLED   */
-/*#define HAL_SD_MODULE_ENABLED   */
+#define HAL_SD_MODULE_ENABLED
 /*#define HAL_MMC_MODULE_ENABLED   */
 /*#define HAL_SDRAM_MODULE_ENABLED   */
 /*#define HAL_SMARTCARD_MODULE_ENABLED   */

+ 40 - 0
bsp/stm32/stm32f103-atk-warshipv3/board/CubeMX_Config/Src/main.c

@@ -42,6 +42,8 @@
 /* USER CODE END PM */
 
 /* Private variables ---------------------------------------------------------*/
+SD_HandleTypeDef hsd;
+
 TIM_HandleTypeDef htim3;
 
 UART_HandleTypeDef huart1;
@@ -58,6 +60,7 @@ static void MX_GPIO_Init(void);
 static void MX_USART1_UART_Init(void);
 static void MX_FSMC_Init(void);
 static void MX_TIM3_Init(void);
+static void MX_SDIO_SD_Init(void);
 /* USER CODE BEGIN PFP */
 
 /* USER CODE END PFP */
@@ -99,6 +102,7 @@ int main(void)
   MX_USART1_UART_Init();
   MX_FSMC_Init();
   MX_TIM3_Init();
+  MX_SDIO_SD_Init();
   /* USER CODE BEGIN 2 */
 
   /* USER CODE END 2 */
@@ -151,6 +155,42 @@ void SystemClock_Config(void)
   }
 }
 
+/**
+  * @brief SDIO Initialization Function
+  * @param None
+  * @retval None
+  */
+static void MX_SDIO_SD_Init(void)
+{
+
+  /* USER CODE BEGIN SDIO_Init 0 */
+
+  /* USER CODE END SDIO_Init 0 */
+
+  /* USER CODE BEGIN SDIO_Init 1 */
+
+  /* USER CODE END SDIO_Init 1 */
+  hsd.Instance = SDIO;
+  hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
+  hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
+  hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
+  hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
+  hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
+  hsd.Init.ClockDiv = 0;
+  if (HAL_SD_Init(&hsd) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /* USER CODE BEGIN SDIO_Init 2 */
+
+  /* USER CODE END SDIO_Init 2 */
+
+}
+
 /**
   * @brief TIM3 Initialization Function
   * @param None

+ 81 - 0
bsp/stm32/stm32f103-atk-warshipv3/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c

@@ -81,6 +81,87 @@ void HAL_MspInit(void)
   /* USER CODE END MspInit 1 */
 }
 
+/**
+* @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==SDIO)
+  {
+  /* USER CODE BEGIN SDIO_MspInit 0 */
+
+  /* USER CODE END SDIO_MspInit 0 */
+    /* Peripheral clock enable */
+    __HAL_RCC_SDIO_CLK_ENABLE();
+  
+    __HAL_RCC_GPIOC_CLK_ENABLE();
+    __HAL_RCC_GPIOD_CLK_ENABLE();
+    /**SDIO GPIO Configuration    
+    PC8     ------> SDIO_D0
+    PC9     ------> SDIO_D1
+    PC10     ------> SDIO_D2
+    PC11     ------> SDIO_D3
+    PC12     ------> SDIO_CK
+    PD2     ------> SDIO_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.Speed = GPIO_SPEED_FREQ_HIGH;
+    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = GPIO_PIN_2;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
+    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+  /* USER CODE BEGIN SDIO_MspInit 1 */
+
+  /* USER CODE END SDIO_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==SDIO)
+  {
+  /* USER CODE BEGIN SDIO_MspDeInit 0 */
+
+  /* USER CODE END SDIO_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_SDIO_CLK_DISABLE();
+  
+    /**SDIO GPIO Configuration    
+    PC8     ------> SDIO_D0
+    PC9     ------> SDIO_D1
+    PC10     ------> SDIO_D2
+    PC11     ------> SDIO_D3
+    PC12     ------> SDIO_CK
+    PD2     ------> SDIO_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 SDIO_MspDeInit 1 */
+
+  /* USER CODE END SDIO_MspDeInit 1 */
+  }
+
+}
+
 /**
 * @brief TIM_Encoder MSP Initialization
 * This function configures the hardware resources used in this example

+ 12 - 0
bsp/stm32/stm32f103-atk-warshipv3/board/Kconfig

@@ -40,6 +40,13 @@ menu "Onboard Peripheral Drivers"
         help
              Chip name is IS62WV51216, 1Mbytes static RAMs organized as 512K words by 16bits.
 
+    config BSP_USING_SDCARD
+        bool "Enable SDCARD (sdio)"
+        select BSP_USING_SDIO
+        select RT_USING_DFS
+        select RT_USING_DFS_ELMFAT
+        default n
+
 endmenu
 
 menu "On-chip Peripheral Drivers"
@@ -209,6 +216,11 @@ menu "On-chip Peripheral Drivers"
         select RT_USING_WDT
         default n
 
+    config BSP_USING_SDIO
+        bool "Enable SDIO"
+        select RT_USING_SDIO
+        default n
+
     menuconfig BSP_USING_PULSE_ENCODER
         bool "Enable Pulse Encoder"
         default n

+ 3 - 0
bsp/stm32/stm32f103-atk-warshipv3/board/SConscript

@@ -15,6 +15,9 @@ CubeMX_Config/Src/stm32f1xx_hal_msp.c
 if GetDepend(['BSP_USING_EXT_SRAM']):
     src += Glob('ports/drv_sram.c')
 
+if GetDepend(['BSP_USING_SDCARD']):
+    src += Glob('ports/sdcard_port.c')
+
 path =  [cwd]
 path += [cwd + '/CubeMX_Config/Inc']
 path += [cwd + '/ports/include']

+ 62 - 0
bsp/stm32/stm32f103-atk-warshipv3/board/ports/sdcard_port.c

@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2006-2020, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2020-01-17     linyiyang    add sdcard port file
+ */
+
+#include <rtthread.h>
+
+#ifdef BSP_USING_SDCARD
+
+#include <dfs_elm.h>
+#include <dfs_fs.h>
+#include <dfs_posix.h>
+
+#define DBG_TAG "app.card"
+#define DBG_LVL DBG_INFO
+#include <rtdbg.h>
+
+void sd_mount(void *parameter)
+{
+    while (1)
+    {
+        rt_thread_mdelay(500);
+        if(rt_device_find("sd0") != RT_NULL)
+        {
+            if (dfs_mount("sd0", "/", "elm", 0, 0) == RT_EOK)
+            {
+                LOG_I("sd card mount to '/'");
+                break;
+            }
+            else
+            {
+                LOG_W("sd card mount to '/' failed!");
+            }
+        }
+    }
+}
+
+int stm32_sdcard_mount(void)
+{
+    rt_thread_t tid;
+
+    tid = rt_thread_create("sd_mount", sd_mount, RT_NULL,
+                           1024, RT_THREAD_PRIORITY_MAX - 2, 20);
+    if (tid != RT_NULL)
+    {
+        rt_thread_startup(tid);
+    }
+    else
+    {
+        LOG_E("create sd_mount thread err!");
+    }
+    return RT_EOK;
+}
+INIT_APP_EXPORT(stm32_sdcard_mount);
+
+#endif  /* BSP_USING_SDCARD */
+

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