hi, i am working on a project that in it i need to write and read sectors in sd card, i decide to use keil File system lib with mci driver but i have problem to write sector in sd card but reading is ok. i use below code to initilize sd card:
if (finit ("M0:") != fsOK) { // Initialize File System return 0; // Exit if failed } id = fs_ioc_get_id ("M0:"); // Get ID of media drive if (sdcard_drv_id < 0U) { return 0; } // If ID is invalid exit status = 0U; if (fs_ioc_device_ctrl (id, fsDevCtrlCodeControlMedia, &status) != fsOK) { return 0; // Exit if failed } if (fs_ioc_lock (id)) { // Lock media for USB usage return 0; // Exit if failed } st = fs_ioc_write_sector(id,0,buf,1); if(st != fsOK) return 0;
when i call fs_ioc_write_sector in above code it returns FsError(0x01) but when reading sector it work correctly. can any one give me an advise to solve that??
hi friends,in following of previous post. may be this acour because i intilize file system in one thread and call fs_ioc_write_sector in another thread??
did you checked this ?? #define _USE_WRITE 1 #define _USE_IOCTL 1
you have to define in FF_GEN_DRV_H
where i must define these?? i added these defines in main,still not working. thanks for attention
in fatfs file called ****************************************************************************** * @file ff_gen_drv.h * @author MCD Application Team * @version V1.3.0 * @date 08-May-2015 * @brief Header for ff_gen_drv.c module. ****************************************************************************** * @attention * * <h2><center>© COPYRIGHT 2015 STMicroelectronics</center></h2> * * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * www.st.com/software_license_agreement_liberty_v2 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ****************************************************************************** */
/* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __FF_GEN_DRV_H #define __FF_GEN_DRV_H
#ifdef __cplusplus extern "C" { #endif
/* Includes ------------------------------------------------------------------*/ #include "diskio.h" #include "ff.h" #include "stdint.h" /* Exported types ------------------------------------------------------------*/ #define _USE_WRITE 1 #define _USE_IOCTL 1 /** * @brief Disk IO Driver structure definition */ typedef struct { DSTATUS (*disk_initialize) (BYTE); /*!< Initialize Disk Drive */ DSTATUS (*disk_status) (BYTE); /*!< Get Disk Status */ DRESULT (*disk_read) (BYTE, BYTE*, DWORD, UINT); /*!< Read Sector(s) */ #if _USE_WRITE == 1 DRESULT (*disk_write) (BYTE, const BYTE*, DWORD, UINT); /*!< Write Sector(s) when _USE_WRITE = 0 */ #endif /* _USE_WRITE == 1 */ #if _USE_IOCTL == 1 DRESULT (*disk_ioctl) (BYTE, BYTE, void*); /*!< I/O control operation when _USE_IOCTL = 1 */ #endif /* _USE_IOCTL == 1 */
}Diskio_drvTypeDef;
/** * @brief Global Disk IO Drivers structure definition */ typedef struct { uint8_t is_initialized[_VOLUMES]; Diskio_drvTypeDef *drv[_VOLUMES]; uint8_t lun[_VOLUMES]; volatile uint8_t nbr;
}Disk_drvTypeDef;
/* Exported constants --------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/ /* Exported functions ------------------------------------------------------- */ uint8_t FATFS_LinkDriverEx(Diskio_drvTypeDef *drv, char *path, uint8_t lun); uint8_t FATFS_LinkDriver(Diskio_drvTypeDef *drv, char *path); uint8_t FATFS_UnLinkDriver(char *path); uint8_t FATFS_LinkDriverEx(Diskio_drvTypeDef *drv, char *path, BYTE lun); uint8_t FATFS_UnLinkDriverEx(char *path, BYTE lun); uint8_t FATFS_GetAttachedDriversNbr(void);
#ifdef __cplusplus } #endif
#endif /* __FF_GEN_DRV_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
hi mohamad, i am using keil middleware file system under CMSIS:MCI driver, and i did n't find file that you point, also my mcu is lpc1788. after i programming keil usb file system example to my board, i notice that this example like my code can not write sector on sd card and writing done with fsError !!!! may be problem is keil side and library has a problem ???? i am still searching for solution and i can find problem.
after some hours of Paddle i noticed that fs_write sector write data on sd card(i can see writed data on hex editor when atach it to computer) but it return FsError !!!!!!! i wondered so, what is problem??
I uploaded file system files from outside and used it separate as any other c file that is why i can control my programs more easy check FATFS by chan files and try to implement it outside keil lib
don macki, I suggest that you take a look at your MCI driver and investigate if COMMAND_TIMEOUT/ERROR or TRANSFER_TIMEOUT/ERROR events are returned at some point.