SJZhu 发表于 2024-10-6 12:04

【STM32H7S78-DK测评】sd卡测试

本帖最后由 SJZhu 于 2024-10-6 12:04 编辑

STM32H7S78-DK板载了SD卡接口。支持microSD 4gb或更大容量的卡可以插入到插座(CN13)中。STM32H7S7L8H6H通过SDMMC1接口中的四个数据位、CLK和CMD信号与microSD进行通信™卡。SD_Detect信号检测卡插入。当microSD™卡插入时,SD_Detect级别为LOW,否则为HIGH。



在图形化配置界面:







最后还有一个GPIO用于SD卡检测:


点击保存,自动生成代码。
/**
* @brief SDMMC1 Initialization Function
* @param None
* @retval None
*/
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_FALLING;
hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B;
hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE;
hsd1.Init.ClockDiv = 0x02;
if (HAL_SD_Init(&hsd1) != HAL_OK)
{
    Error_Handler();
}
/* USER CODE BEGIN SDMMC1_Init 2 */

/* USER CODE END SDMMC1_Init 2 */

}

通过调用FATFS_LinkDriver(&SD_Driver, SDPath)来初始化FatFs。

检测SD卡是否插入的函数:
static uint8_t SD_IsDetected(void)
{
    uint8_t ret;

    if (HAL_GPIO_ReadPin(SD_GPIO_PORT, PinDetect) == GPIO_PIN_RESET)
    {
      ret = HAL_ERROR;
    }
    else
    {
      ret = HAL_OK;
    }
      return ret;
}

接下来就可以正常读写SD卡:
/**
* @brief File system : file operation
* @retval File operation result
*/
static int32_t FS_FileOperations(void)
{
FRESULT res; /* FatFs function common result code */
uint32_t byteswritten, bytesread; /* File write/read counts */
uint8_t rtext; /* File read buffer */

/* Register the file system object to the FatFs module */
if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) == FR_OK)
{
    /* Create and Open a new text file object with write access */
    if(f_open(&SDFile, "STM32.TXT", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
    {

      /* Write data to the text file */
      res = f_write(&SDFile, (const void *)wtext, sizeof(wtext), (void *)&byteswritten);

      if((byteswritten > 0) && (res == FR_OK))
      {
      /* Close the open text file */
      f_close(&SDFile);

      /* Open the text file object with read access */
      if(f_open(&SDFile, "STM32.TXT", FA_READ) == FR_OK)
      {
          /* Read data from the text file */
          res = f_read(&SDFile, ( void *)rtext, sizeof(rtext), (void *)&bytesread);

          if((bytesread > 0) && (res == FR_OK))
          {
            /* Close the open text file */
            f_close(&SDFile);

            /* Compare read data with the expected data */
            if(bytesread == byteswritten)
            {
            /* Success of the demo: no error occurrence */
            return 0;
            }
          }
      }
      }
    }
}
/* Error */
return -1;
}
通过读卡器把SD卡插入电脑后,可以看到TXT文件:





Amazingxixixi 发表于 2024-10-31 16:17

这个SD卡接口是多少线的标准啊?单线还是四线?

地瓜patch 发表于 2024-10-31 18:43

能支持多大的sd卡,与文件系统有关么?没查到相关数据
页: [1]
查看完整版本: 【STM32H7S78-DK测评】sd卡测试