[STM32H7] 【STM32H7S78-DK测评】sd卡测试

[复制链接]
1486|2
 楼主| SJZhu 发表于 2024-10-6 12:04 | 显示全部楼层 |阅读模式
本帖最后由 SJZhu 于 2024-10-6 12:04 编辑

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

8732067013cf746e52.png

在图形化配置界面:
612636701d46610e4d.png

297176701d47f001d0.png
855126701d4a485f6f.png

2666701d4b2cb5ee.png

最后还有一个GPIO用于SD卡检测:
363546701d50b634e1.png

点击保存,自动生成代码。
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url] SDMMC1 Initialization Function
  3.   * @param None
  4.   * @retval None
  5.   */
  6. void MX_SDMMC1_SD_Init(void)
  7. {

  8.   /* USER CODE BEGIN SDMMC1_Init 0 */

  9.   /* USER CODE END SDMMC1_Init 0 */

  10.   /* USER CODE BEGIN SDMMC1_Init 1 */

  11.   /* USER CODE END SDMMC1_Init 1 */
  12.   hsd1.Instance = SDMMC1;
  13.   hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_FALLING;
  14.   hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
  15.   hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B;
  16.   hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE;
  17.   hsd1.Init.ClockDiv = 0x02;
  18.   if (HAL_SD_Init(&hsd1) != HAL_OK)
  19.   {
  20.     Error_Handler();
  21.   }
  22.   /* USER CODE BEGIN SDMMC1_Init 2 */

  23.   /* USER CODE END SDMMC1_Init 2 */

  24. }


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

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

  4.     if (HAL_GPIO_ReadPin(SD_GPIO_PORT, PinDetect) == GPIO_PIN_RESET)
  5.     {
  6.       ret = HAL_ERROR;
  7.     }
  8.     else
  9.     {
  10.       ret = HAL_OK;
  11.     }
  12.       return ret;
  13. }


接下来就可以正常读写SD卡:

  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url] File system : file operation
  3.   * @retval File operation result
  4.   */
  5. static int32_t FS_FileOperations(void)
  6. {
  7.   FRESULT res; /* FatFs function common result code */
  8.   uint32_t byteswritten, bytesread; /* File write/read counts */
  9.   uint8_t rtext[100]; /* File read buffer */

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

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

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

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

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

  31.             /* Compare read data with the expected data */
  32.             if(bytesread == byteswritten)
  33.             {
  34.               /* Success of the demo: no error occurrence */
  35.               return 0;
  36.             }
  37.           }
  38.         }
  39.       }
  40.     }
  41.   }
  42.   /* Error */
  43.   return -1;
  44. }

通过读卡器把SD卡插入电脑后,可以看到TXT文件: 4292567020c3f58f6c.png





Amazingxixixi 发表于 2024-10-31 16:17 | 显示全部楼层
这个SD卡接口是多少线的标准啊?单线还是四线?
地瓜patch 发表于 2024-10-31 18:43 来自手机 | 显示全部楼层
能支持多大的sd卡,与文件系统有关么?没查到相关数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部