2021-05-09 02:44 PM
Hello..
I have a few problems, can you help me?
I am using FatFS on stm32f103RB MCU. I have a Single SPI bus and 2 CS pins for 2 SD Card.
used STM32CUBEIDE. No problem when I use 1 SD card and 1 CS pin. But Problem occurs when I use 2 SD Cards. Problem is SD Card 2 not mounting
DSTATUS USER_initialize (
BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
/* USER CODE BEGIN INIT */
return SD_disk_initialize(pdrv);
/* USER CODE END INIT */
}
I am using the "pdrv" parameter here for CS pin control. But "pdrv" parameter allway 0. For this reason, SD Card 0 remains selected.
I mount like this:
FATFS fs0,fs1; // file systems
FIL fil0,fil1; // Files
// mount the device with fs
fresult = f_mount(&fs0, "0:/", 1);
fresult = f_mount(&fs1, "1:/", 1);
// create files
fresult = f_open(&fil0, "0:/test_file_for_sd0.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE);
fresult = f_open(&fil1, "1:/test_file_for_sd1.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE);
// Write text
f_puts("Test DATA to SD 0", &fil0);
f_puts("Test DATA to SD 1", &fil1);
// Close files
fresult = f_close(&fil0);
fresult = f_close(&fil1);
my FatFS library parameters :
I will be very happy if you can help :)
Thanks..
2021-05-09 03:08 PM
You'll have to manage this, and the selection/deselection, in the DISKIO layer code.
2021-05-09 03:35 PM
Thank you for quickly replay.
Inside the discio.c file there is the "disk_initialize" function. The "pdrv" parameter here is always seen as 0 in debug mode. I've closed all the "fil0" and "fs0" related lines. I only worked with "fil1" and "fil2" but "pdrv" was 0 again. I was able to follow this parameter in the above f_mount function. The value that is 1 then changes to 0. as a result, I always read the value 0 in user-side functions.
DSTATUS disk_initialize (
BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
DSTATUS stat = RES_OK;
if(disk.is_initialized[pdrv] == 0)
{
disk.is_initialized[pdrv] = 1;
stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);
}
return stat;
}