123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- /*
- * File : drv_mmc.h
- * This file is part of gkipc BSP for RT-Thread distribution.
- *
- * Copyright (c) 2017 chengdu goke Microelectronics Co., Ltd.
- * All rights reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Visit http://www.goke.com to get contact with goke.
- *
- * Change Logs:
- * Date Author Notes
- */
- #ifndef MMC_H_
- #define MMC_H_
- #include "rtdevice.h"
- #define MMC_FEQ_MIN 100000
- #define MMC_FEQ_MAX 50000000
- #define MMC_DMA_DESC_BUFF_SIZE (0x1f00)
- #define MMC_HANDLE_COUNT 2
- #define CARD_UNPLUGED 1
- #define CARD_PLUGED 0
- typedef enum {
- RT_GAPI_SDIO_VERSION = (rt_int32_t)0x00010000 //!< The current driver version
- } RT_SDIO_VersionEnumT;
- typedef enum {
- RT_GAPI_SDIO_TRANSFER_TYPE_NORMAL = 0, //!< Normal transfer type for SD/SDHC/MMC cards (default)
- RT_GAPI_SDIO_TRANSFER_TYPE_DIRECT, //!< Direct transfer mode special for SDIO cards
- RT_GAPI_SDIO_TRANSFER_TYPE_SECURE, //!< Spezial secure transfer mode for SD-Cards
- RT_GAPI_SDIO_TRANSFER_TYPE_WIFI
- } RT_SDIO_TransferTypeEnumT;
- typedef enum rt_card_type
- {
- RT_CARDTYPE_NONE = 0,
- RT_CARDTYPE_MMC,
- RT_CARDTYPE_SD10,
- RT_CARDTYPE_SD20,
- RT_CARDTYPE_SDHC
- }RT_SDIO_Card_Type;
- /*!
- ****************************************************************************
- **
- ** \brief SDIO callback function signature
- **
- ** This is the callback function signature required by the SDIO driver
- ** for internally notification functions.
- **
- ** \param comState Comunication status.
- ** \param optArgPtr Optional arg pointer.
- **
- ****************************************************************************
- */
- typedef void (*RT_SDIO_NotifyFuncT)(rt_uint32_t index, rt_uint32_t comState, void* optArgPtr);
- typedef void (*RT_SDIO_IRQFuncT)();
- typedef void (*RT_SDIO_RESETFuncT)(rt_uint32_t index);
- typedef struct {
- /*!
- The version of the driver.
- \ref GAPI_SDIO_VersionEnumT "GAPI_SDIO_VERSION".
- */
- RT_SDIO_VersionEnumT version;
- RT_SDIO_TransferTypeEnumT type;
- /*!
- ** The handle specific notification function.
- */
- RT_SDIO_NotifyFuncT notifyFunc;
- RT_SDIO_IRQFuncT irqFunc;
- RT_SDIO_RESETFuncT resetFunc;
- /*!
- ** Optional data pointer for the notification function.
- */
- void* notifyFuncOptPtr;
- /*!
- Flag to request DMA for read/write transfer operation.
- */
- rt_uint32_t isUseDmaWay;
- }RT_SDIO_OpenParamsT;
- /*cid info */
- typedef struct
- {
- rt_uint8_t MID; /*Manufacturer ID width:8[127:120]*/
- rt_uint16_t OID; /*OEM/Application ID width:16[119:104]*/
- rt_uint8_t PNM[5]; /*Product name width:40[103:64]*/
- rt_uint8_t PRV; /*Product revision width:8[63:56]*/
- rt_uint32_t PSN; /*Product serial number width:32[55:24]*/
- rt_uint16_t MDT; /*Manufacturing date width:12[19:8]*/
- }rtSdioCidInfo;
- /*I just care about usefull info of CSD*/
- typedef struct
- {
- rt_uint8_t csdStructure; /*csd revision*/
- rt_uint32_t classes; /*Describes the card command classes CCC*/
- rt_uint32_t tranSpeed; /*transfer speed*/
- rt_uint8_t eraseBlkEn; /*erase block enable*/
- rt_uint8_t permWriteProtect; /*write protect*/
- rt_uint8_t tmpWriteProtect; /*write protect*/
- }rtSdiocsdInfo;
- /*I just case ablot usefull info of SCR*/
- typedef struct
- {
- rt_uint32_t scrStructure; // SCR Register Structure Version
- rt_uint32_t sdSpec; // Describes the Physical Layer Specification Version supported by the card.
- rt_uint32_t stateaftererase; // Defines the data status after erase, whether it is 0 or 1.
- rt_uint32_t sdSecurity; // Describes the Security Specification Version supported by the card.
- rt_uint32_t sdBusWith; // Describes all the DAT bus widths that are supported by this card.
- }rtSdioScrInfo;
- typedef struct
- {
- rt_uint32_t index; /*index of handle array*/
- rt_uint32_t ocr; /*card volage info*/
- rt_uint32_t csd[4]; /*csd info (invert)*/
- rt_uint32_t read_bl_len;
- rt_uint32_t write_bl_len;
- unsigned long long capacity_user;
- rt_uint32_t sectorcount;
- rt_uint32_t inhighspeed;
- rt_uint32_t maxTransferBlk;
- rt_uint32_t eraseGrpSize;
- rtSdioScrInfo scr;
- rtSdiocsdInfo csdInfo;
- rt_uint32_t tran_speed; /*max transfer speed*/
- rt_uint32_t rca; /*card address*/
- rt_uint32_t cid[4]; /*card cid info*/
- enum rt_card_type type; /*card type*/
- rt_uint32_t highCapacity; /*is high capacity*/
- rtSdioCidInfo cidInfo;
- }rtSdioBlockT;
- /* SDIO specific handle */
- typedef struct
- {
- rt_uint32_t inUse; /* specifies if handle is in use */
- rt_uint32_t index; /*index of handle array*/
- RT_SDIO_OpenParamsT openParams; /* open params of the handle */
- rtSdioBlockT devicePtr; /* pointer to hardware device */
- } rtSdioHandleT;
- typedef struct gk_mmc_driver
- {
- rtSdioHandleT handle;
- RT_SDIO_OpenParamsT openParams;
- struct rt_device *deviceP[MMC_HANDLE_COUNT];
- struct dfs_partition *partP[MMC_HANDLE_COUNT];
- }gk_mmc_driver_s;
- typedef void (*fs_sdio_notify_func_t)(rt_uint32_t index, rt_uint32_t comState, void* optArgPtr);
- int rt_hw_mmc_init(gk_mmc_driver_s *pMmcParams);
- #endif /* MMC_H_ */
|