This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

problem with File system middleware

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??

Parents
  • 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****/

Reply
  • 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****/

Children