2018-07-10 08:29 AM
Hello,
This is continuation of below Topic.
I have
/external-link.jspa?url=http%3A%2F%2Fwww.st.com%2Fen%2Fevaluation-tools%2Fnucleo-f722ze.html
And Trying to access Two microSDCards Simultaneously . One by One (Either SDMMC1 or SDMMC2 is working fine)
https://community.st.com/0D50X00009XkWKfSAN
Below is my STM32Cube Configuration Setting
Rest all default .
/* USER CODE BEGIN 0 */FATFS myFATFS;
FIL myFILE, myFILE2 ;UINT testByte ;char myRDdata[15] ;/* USER CODE END 0 */MX_GPIO_Init();
MX_SDMMC1_SD_Init(); MX_SDMMC2_SD_Init(); MX_FATFS_Init();void MX_FATFS_Init(void)
{ /*♯♯ FatFS: Link the SD driver ♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯♯*/ retSD = FATFS_LinkDriver(&SD_Driver, SD_Path);/* USER CODE BEGIN Init */
/* additional user code for init */ /* USER CODE END Init */}/* USER CODE BEGIN 2 */
if(f_mount(&myFATFS,SD_Path,0) == FR_OK) { char mypath[] = {''0:OneDrive.txt\0''} ; f_open(&myFILE,mypath , FA_WRITE | FA_CREATE_ALWAYS) ; char mydata[] = {''SD Card 1 Testing \0''} ; f_write(&myFILE, mydata , sizeof(mydata),&testByte ) ; f_close(&myFILE) ;}
if(f_mount(&myFATFS,SD_Path, 1) == FR_OK) { char mypath2[] = {''1:SecondDrive.txt\0''} ; f_open(&myFILE2,mypath2 , FA_WRITE | FA_CREATE_ALWAYS) ; char mydata2[] = {''SD Card 2 Testing \ \0''} ; f_write(&myFILE2, mydata2 , sizeof(mydata2),&testByte ) ; f_close(&myFILE2) ; }With above code I can only access one microSD Card Only.
I am not able to access both micro SDCards simultaneously . By Added Drive number .
Please help me to resolve this ..
Thanks In advance .
--
Karan
nullSolved! Go to Solution.
2018-07-10 11:32 AM
Pretty sure that's not how you mount two drives,
STM32Cube_FW_F4_V1.16.0\Projects\STM32446E_EVAL\Applications\FatFs\FatFs_MultiDrives\Src\main.c
FATFS RAMFatFs, SDFatFs; /* File system objects logical drives */
FIL RAMFile, SDFile; /* File objects */char RAMpath[4], SDpath[4]; /* RAM disk and SD card logical drives paths */.../*##-1- Link the disk I/O drivers ##########################################*/
if((FATFS_LinkDriver(&SDRAMDISK_Driver, RAMpath) == 0) && (FATFS_LinkDriver(&SD_Driver, SDpath) == 0)) { /*##-2- Register the file system object to the FatFs module ##############*/ res1 = f_mount(&RAMFatFs, (TCHAR const*)RAMpath, 0); res2 = f_mount(&SDFatFs, (TCHAR const*)SDpath, 0);if((res1 != FR_OK) || (res2 != FR_OK))
{ /* FatFs Initialization Error */ Error_Handler(); }.../*##-4- Create and Open new text file objects with write access ######*/
res1 = f_open(&RAMFile, '0:STM32.TXT', FA_CREATE_ALWAYS | FA_WRITE); res2 = f_open(&SDFile, '1:STM32.TXT', FA_CREATE_ALWAYS | FA_WRITE);if((res1 != FR_OK) || (res2 != FR_OK))
{ /* 'STM32.TXT' file Open for write Error */ Error_Handler(); }...
2018-07-10 11:32 AM
Pretty sure that's not how you mount two drives,
STM32Cube_FW_F4_V1.16.0\Projects\STM32446E_EVAL\Applications\FatFs\FatFs_MultiDrives\Src\main.c
FATFS RAMFatFs, SDFatFs; /* File system objects logical drives */
FIL RAMFile, SDFile; /* File objects */char RAMpath[4], SDpath[4]; /* RAM disk and SD card logical drives paths */.../*##-1- Link the disk I/O drivers ##########################################*/
if((FATFS_LinkDriver(&SDRAMDISK_Driver, RAMpath) == 0) && (FATFS_LinkDriver(&SD_Driver, SDpath) == 0)) { /*##-2- Register the file system object to the FatFs module ##############*/ res1 = f_mount(&RAMFatFs, (TCHAR const*)RAMpath, 0); res2 = f_mount(&SDFatFs, (TCHAR const*)SDpath, 0);if((res1 != FR_OK) || (res2 != FR_OK))
{ /* FatFs Initialization Error */ Error_Handler(); }.../*##-4- Create and Open new text file objects with write access ######*/
res1 = f_open(&RAMFile, '0:STM32.TXT', FA_CREATE_ALWAYS | FA_WRITE); res2 = f_open(&SDFile, '1:STM32.TXT', FA_CREATE_ALWAYS | FA_WRITE);if((res1 != FR_OK) || (res2 != FR_OK))
{ /* 'STM32.TXT' file Open for write Error */ Error_Handler(); }...
2018-07-10 09:45 PM
Thanks for update...
'if((FATFS_LinkDriver(&SDRAMDISK_Driver, RAMpath) == 0) && (FATFS_LinkDriver(&SD_Driver, SDpath) == 0))'
But In my case in
sd_diskio.h
Only
extern Diskio_drvTypeDef SD_Driver;
How single instance (
SD_Driver) will handle both SDMMC(s) cards. ?Please update.
Thanks Again..
--
Karan
2018-07-11 01:22 AM
>>
Please update
Perhaps you can dig deeper into all the available examples and find something you can just drop in. It would probably take me a hour or two to conjure something up, if you want to pick up the billable hours?
As far as I'm aware the 'XXXpath' variable provides instance specific data for ST's link driver mechanism. The DISKIO layer from FatFs (Chan) does provide it's own way to instantiate multiple drives. As I recall the STM32F779-EVAL supports multiple cards.
Like I said, use your favorite File Manager and trawl the examples, or review the mechanics of the LinkDriver
2018-07-11 04:31 AM
Thanks for update... Again...
I have dig in to below code
...\en.stm32cubef7\STM32Cube_FW_F7_V1.8.0\Projects\STM32F769I_EVAL\Applications\FatFs\FatFs_MultiDrives\MDK-ARM and find 'sdram_diskio.h' and 'sd_diskio.h'
and found different xxx_Driver
const Diskio_drvTypeDef SDRAMDISK_Driver =
{ SDRAMDISK_initialize, SDRAMDISK_status, SDRAMDISK_read,#if _USE_WRITE SDRAMDISK_write,#endif /* _USE_WRITE == 1 */#if _USE_IOCTL == 1 SDRAMDISK_ioctl,#endif /* _USE_IOCTL == 1 */};const Diskio_drvTypeDef SD_Driver =
{ SD_initialize, SD_status, SD_read,#if _USE_WRITE == 1 SD_write,#endif /* _USE_WRITE == 1 */#if _USE_IOCTL == 1
SD_ioctl,#endif /* _USE_IOCTL == 1 */};>> As far as I'm aware the 'XXXpath' variable provides instance specific data for ST's link driver mechanism. The DISKIO layer from FatFs (Chan) does provide it's own way to instantiate multiple drives. As I recall the STM32F779-EVAL supports multiple cards.
I have tried below :
/* USER CODE BEGIN Variables */
FATFS SDCardFatFs_1, SDCardFatFs_2; /* File system objects logical drives */FIL SDCardFile_1, SDCardFile_2; /* File objects */FRESULT ReturnSDCard_1 , ReturnSDCard_2; /* Return value for SD */char SDCardPath_1[4], SDCardPath_2[4]; /* SD Card 1 logical and SD card 2 logical drives paths */uint32_t byteswritten1, byteswritten2; /* File write counts */
uint8_t wtext[] = 'This is STM32 working with FatFs'; /* File write buffer *//* USER CODE END Variables */
/* ## FatFS: Link the SD driver ########################### */
// Link First micrSD Card if((FATFS_LinkDriver(&SD_Driver, SDCardPath_1) == 0) && FATFS_LinkDriver(&SD_Driver, SDCardPath_2) == 0) { /*##-2- Register the file system object to the FatFs module ##############*/ ReturnSDCard_1 = f_mount(&SDCardFatFs_1, (TCHAR const*)SDCardPath_1, 0); ReturnSDCard_2 = f_mount(&SDCardFatFs_2, (TCHAR const*)SDCardPath_2, 0); if(( ReturnSDCard_1 != FR_OK)) { /* FatFs Initialization Error */ Error_Handler(); } if(( ReturnSDCard_2 != FR_OK)) { /* FatFs Initialization Error */ Error_Handler(); } ReturnSDCard_1 = f_open(&SDCardFile_1, '0:D332.TXT', FA_CREATE_ALWAYS | FA_WRITE); ReturnSDCard_2 = f_open(&SDCardFile_2, '1:SD32.TXT', FA_CREATE_ALWAYS | FA_WRITE); if(( ReturnSDCard_1 != FR_OK)) { /* FatFs Initialization Error */ Error_Handler(); } if(( ReturnSDCard_2 != FR_OK)) { /* FatFs Initialization Error */ Error_Handler(); } /*##-5- Write data to the text files ###############################*/ ReturnSDCard_1 = f_write(&SDCardFile_1, wtext, sizeof(wtext), (void *)&byteswritten1); ReturnSDCard_1 = f_write(&SDCardFile_2, wtext, sizeof(wtext), (void *)&byteswritten2); /*##-6- Close the open text files ################################*/ f_close(&SDCardFile_1); f_close(&SDCardFile_2);Problem still persist... Please Update Again...
--
Karan
2018-07-11 08:30 AM
Would take several hours to create a working example, I'm open to reasonable offers.
2018-07-25 10:38 PM
Thanks .. Worked...
I have created new &SD_Driver_2 in diskio.c Now Both SDCard working fine ..
const Diskio_drvTypeDef SD_Driver_2 =
{
SD_initialize_2,
SD_status_2,
SD_read_2,
#if _USE_WRITE == 1
SD_write_2,
#endif /* _USE_WRITE == 1 */
#if _USE_IOCTL == 1
SD_ioctl_2,
#endif /* _USE_IOCTL == 1 */
};
Thanks again
--
Karan