SDMMC Peripheral
The STM32 Nucleo L552ZEQ contains a hardware peripheral called the SDMMC which allows for rapid data transfer to an SD card. SDMMC has 4 data lines (DAT0-3) and requires a clock signal. 1 clock cycle = 1 byte of data transferred on a SDMMC data line.
From the high level block diagram you can see the following:
AHB contains a built-in DMA module automatically managed by the SDMMC hardware
SDMMC adapter is what actually talks to the SD card, the control unit produces a clock signal SDMMC_CK to the SD card calculated by the input clock SDMMCCLK (configurable in .ioc file)
in the .ioc file a division factor of 0 means SDMMC_CK = SDMMCCLK
Clock divider of 0 and SDMMCCLK of 8 MHz means 8 MB/s data transfer rate over each SDMMC data line
FATFS Library
FATFS is a file system library that allows for file management on the SD card
It requires a couple of low level functions specific to the hardware platform in order to operate
See
sd_diskio.h, bsp_driver_sd.h
File names by default are 8.3 format (max 8 character file name, max 3 character file extension)
There are two utility functions written the abstract over the FATFS API, one for reading, one for writing found in
log_util.h
FRESULT logWrite(char*, void*, UINT, UINT*); FRESULT logRead(char*, void*, UINT, UINT*);
Debugging
Ensure SD cards are formatted using MS-DOS (FAT32) using MBR (Master Boot Record)
Ensure SD card is not over 32GB in capacity
Ensure the clock for SDMMC is set according to your SD card speed, (i.e. if your card is rated for 10MB/s speed, set the SDMMCCLK to just under that, something like 8MB/s with 0 clock divider)
Ensure file names follow 8.3 format
All FATFS function calls return a
FRESULT
error code, printing them out is helpfulFATFS Error Codes: http://elm-chan.org/fsw/ff/doc/rc.html
Links
SD Drivers PR: https://github.com/UWARG/efs-zeropilot-3.5/pull/45
SD Drivers these drivers were based on: https://github.com/alireza-montazeri/STM32_SD_FATFS_freeRTOS/blob/master/FATFS/Target/sd_diskio.c
HAL Docs for STM32 Nucleo L5: https://www.st.com/resource/en/user_manual/um2659-description-of-stm32l5-hal-and-lowlayer-drivers-stmicroelectronics.pdf
FATFS Docs: http://elm-chan.org/fsw/ff/
FATFS Driver unit tests: http://elm-chan.org/fsw/ff/res/app4.c
Add Comment