2020-05-19 06:31 AM
I am trying to use the SD card slot on the ST32F746 Discovery board. I am using the default project that is generated by STM32CubeIDE which includes MX_FATFS_Init() to set up the SD card. I have made no changes and used the default settings for everything except the StartDefaultTask method.
In my StartDefaultTask method I am trying to use the SD card similar to STM32CubeF7 Firmware Package:
void StartDefaultTask(void const *argument) {
/* init code for USB_HOST */
MX_USB_HOST_Init();
/* USER CODE BEGIN 5 */
FIL MyFile; /* File object */
uint8_t workBuffer[_MAX_SS];
FRESULT res; /* FatFs function common result code */
uint32_t byteswritten, bytesread; /* File write/read counts */
uint8_t wtext[] = "This is STM32 working with FatFs"; /* File write buffer */
uint8_t rtext[100]; /* File read buffer */
/*##Register the file system object to the FatFs module ##############*/
if (f_mount(&SDFatFS, (TCHAR const*) SDPath, 1) != FR_OK) {
...
f_mount gets stuck since sd_diskio.c/SD_read gets stuck in the last line of this codeblock:
DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT count)
{
DRESULT res = RES_ERROR;
uint32_t timer;
#if (osCMSIS < 0x20000U)
osEvent event;
#else
uint16_t event;
osStatus_t status;
#endif
#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
uint32_t alignedAddr;
#endif
/*
* ensure the SDCard is ready for a new operation
*/
if (SD_CheckStatusWithTimeout(SD_TIMEOUT) < 0)
{
return res;
}
#if defined(ENABLE_SCRATCH_BUFFER)
if (!((uint32_t)buff & 0x3))
{
#endif
/* Fast path cause destination buffer is correctly aligned */
uint8_t ret = BSP_SD_ReadBlocks_DMA((uint32_t*)buff, (uint32_t)(sector), count);
If I click suspend it always stops here and all options (resume/step into/step over/ ...) lead to nothing. I can wait as long as I want but pressing suspend always leads back to this part. Setting breakpoints inside of BSP_SD_ReadBlocks_DMA also does not work since they are never hit (the method seems to never be called).
Do you know what's going wrong?