Browse Source

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

linyiyang 5 years ago
parent
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.IP0=FSMC
 Mcu.IP1=NVIC
 Mcu.IP1=NVIC
 Mcu.IP2=RCC
 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.Name=STM32F103Z(C-D-E)Tx
 Mcu.Package=LQFP144
 Mcu.Package=LQFP144
 Mcu.Pin0=PC14-OSC32_IN
 Mcu.Pin0=PC14-OSC32_IN
@@ -49,25 +50,31 @@ Mcu.Pin35=PG4
 Mcu.Pin36=PG5
 Mcu.Pin36=PG5
 Mcu.Pin37=PC6
 Mcu.Pin37=PC6
 Mcu.Pin38=PC7
 Mcu.Pin38=PC7
-Mcu.Pin39=PA9
+Mcu.Pin39=PC8
 Mcu.Pin4=PF2
 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.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.Pin6=PF4
 Mcu.Pin7=PF5
 Mcu.Pin7=PF5
 Mcu.Pin8=OSC_IN
 Mcu.Pin8=OSC_IN
 Mcu.Pin9=OSC_OUT
 Mcu.Pin9=OSC_OUT
-Mcu.PinsNb=51
+Mcu.PinsNb=57
 Mcu.ThirdPartyNb=0
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserConstants=
 Mcu.UserName=STM32F103ZETx
 Mcu.UserName=STM32F103ZETx
@@ -96,6 +103,12 @@ PA14.Mode=Serial_Wire
 PA14.Signal=SYS_JTCK-SWCLK
 PA14.Signal=SYS_JTCK-SWCLK
 PA9.Mode=Asynchronous
 PA9.Mode=Asynchronous
 PA9.Signal=USART1_TX
 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.Mode=LSE-External-Oscillator
 PC14-OSC32_IN.Signal=RCC_OSC32_IN
 PC14-OSC32_IN.Signal=RCC_OSC32_IN
 PC15-OSC32_OUT.Mode=LSE-External-Oscillator
 PC15-OSC32_OUT.Mode=LSE-External-Oscillator
@@ -104,6 +117,10 @@ PC6.Locked=true
 PC6.Signal=S_TIM3_CH1
 PC6.Signal=S_TIM3_CH1
 PC7.Locked=true
 PC7.Locked=true
 PC7.Signal=S_TIM3_CH2
 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.Checker=false
 PCC.Line=STM32F103
 PCC.Line=STM32F103
 PCC.MCU=STM32F103Z(C-D-E)Tx
 PCC.MCU=STM32F103Z(C-D-E)Tx
@@ -120,6 +137,8 @@ PD12.Signal=FSMC_A17_ALE
 PD13.Signal=FSMC_A18
 PD13.Signal=FSMC_A18
 PD14.Signal=FSMC_D0_DA0
 PD14.Signal=FSMC_D0_DA0
 PD15.Signal=FSMC_D1_DA1
 PD15.Signal=FSMC_D1_DA1
+PD2.Mode=SD_4_bits_Wide_bus
+PD2.Signal=SDIO_CMD
 PD4.Signal=FSMC_NOE
 PD4.Signal=FSMC_NOE
 PD5.Signal=FSMC_NWE
 PD5.Signal=FSMC_NWE
 PD8.Signal=FSMC_D13_DA13
 PD8.Signal=FSMC_D13_DA13
@@ -209,6 +228,8 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
 RCC.TimSysFreq_Value=72000000
 RCC.TimSysFreq_Value=72000000
 RCC.USBFreq_Value=72000000
 RCC.USBFreq_Value=72000000
 RCC.VCOOutput2Freq_Value=8000000
 RCC.VCOOutput2Freq_Value=8000000
+SDIO.ClockDiv=0
+SDIO.IPParameters=ClockDiv
 SH.FSMC_A0.0=FSMC_A0,19b-a1
 SH.FSMC_A0.0=FSMC_A0,19b-a1
 SH.FSMC_A0.ConfNb=1
 SH.FSMC_A0.ConfNb=1
 SH.FSMC_A1.0=FSMC_A1,19b-a1
 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_PWR_MODULE_ENABLED   */
 /*#define HAL_RCC_MODULE_ENABLED   */
 /*#define HAL_RCC_MODULE_ENABLED   */
 /*#define HAL_RTC_MODULE_ENABLED   */
 /*#define HAL_RTC_MODULE_ENABLED   */
-/*#define HAL_SD_MODULE_ENABLED   */
+#define HAL_SD_MODULE_ENABLED
 /*#define HAL_MMC_MODULE_ENABLED   */
 /*#define HAL_MMC_MODULE_ENABLED   */
 /*#define HAL_SDRAM_MODULE_ENABLED   */
 /*#define HAL_SDRAM_MODULE_ENABLED   */
 /*#define HAL_SMARTCARD_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 */
 /* USER CODE END PM */
 
 
 /* Private variables ---------------------------------------------------------*/
 /* Private variables ---------------------------------------------------------*/
+SD_HandleTypeDef hsd;
+
 TIM_HandleTypeDef htim3;
 TIM_HandleTypeDef htim3;
 
 
 UART_HandleTypeDef huart1;
 UART_HandleTypeDef huart1;
@@ -58,6 +60,7 @@ static void MX_GPIO_Init(void);
 static void MX_USART1_UART_Init(void);
 static void MX_USART1_UART_Init(void);
 static void MX_FSMC_Init(void);
 static void MX_FSMC_Init(void);
 static void MX_TIM3_Init(void);
 static void MX_TIM3_Init(void);
+static void MX_SDIO_SD_Init(void);
 /* USER CODE BEGIN PFP */
 /* USER CODE BEGIN PFP */
 
 
 /* USER CODE END PFP */
 /* USER CODE END PFP */
@@ -99,6 +102,7 @@ int main(void)
   MX_USART1_UART_Init();
   MX_USART1_UART_Init();
   MX_FSMC_Init();
   MX_FSMC_Init();
   MX_TIM3_Init();
   MX_TIM3_Init();
+  MX_SDIO_SD_Init();
   /* USER CODE BEGIN 2 */
   /* USER CODE BEGIN 2 */
 
 
   /* USER CODE END 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
   * @brief TIM3 Initialization Function
   * @param None
   * @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 */
   /* 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
 * @brief TIM_Encoder MSP Initialization
 * This function configures the hardware resources used in this example
 * 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
         help
              Chip name is IS62WV51216, 1Mbytes static RAMs organized as 512K words by 16bits.
              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
 endmenu
 
 
 menu "On-chip Peripheral Drivers"
 menu "On-chip Peripheral Drivers"
@@ -209,6 +216,11 @@ menu "On-chip Peripheral Drivers"
         select RT_USING_WDT
         select RT_USING_WDT
         default n
         default n
 
 
+    config BSP_USING_SDIO
+        bool "Enable SDIO"
+        select RT_USING_SDIO
+        default n
+
     menuconfig BSP_USING_PULSE_ENCODER
     menuconfig BSP_USING_PULSE_ENCODER
         bool "Enable Pulse Encoder"
         bool "Enable Pulse Encoder"
         default n
         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']):
 if GetDepend(['BSP_USING_EXT_SRAM']):
     src += Glob('ports/drv_sram.c')
     src += Glob('ports/drv_sram.c')
 
 
+if GetDepend(['BSP_USING_SDCARD']):
+    src += Glob('ports/sdcard_port.c')
+
 path =  [cwd]
 path =  [cwd]
 path += [cwd + '/CubeMX_Config/Inc']
 path += [cwd + '/CubeMX_Config/Inc']
 path += [cwd + '/ports/include']
 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