µ±Ç°Î»ÖãºÊ×Ò³ > LinuxÉ豸Çý¶¯×ÓϵͳµÚ¶þµ¯ - SD¿¨
struct mmc_host_ops {
void (*request)(struct mmc_host *host, struct mmc_request *req); // ºËÐĺ¯Êý£¬Íê³ÉÖ÷¿ØÖÆÆ÷ÓëSD¿¨É豸֮¼äµÄÊý¾ÝͨÐÅ
void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios); // ÅäÖÃʱÖÓ¡¢×ÜÏß¡¢µçÔ´¡¢Æ¬Ñ¡¡¢Ê±ÐòµÈ
int (*get_ro)(struct mmc_host *host);
void (*enable_sdio_irq)(struct mmc_host *host, int enable); };
struct mmc_bus_ops {
void (*remove)(struct mmc_host *); // °Î³öSD¿¨µÄ»Øµ÷º¯Êý
void (*detect)(struct mmc_host *); // ̽²âSD¿¨ÊÇ·ñ»¹ÔÚSD×ÜÏßÉϵĻص÷º¯Êý void (*suspend)(struct mmc_host *); void (*resume)(struct mmc_host *); };
struct mmc_card {
struct mmc_host *host; /* the host this device belongs to */ struct device dev; /* the device */
unsigned int rca; /* relative card address of device */ unsigned int type; /* card type */ unsigned int state; /* (our) card state */ unsigned int quirks; /* card quirks */ u32 raw_cid[4]; /* raw card CID */ u32 raw_csd[4]; /* raw card CSD */ u32 raw_scr[2]; /* raw card SCR */ struct mmc_cid cid; /* card identification */ struct mmc_csd csd; /* card specific */
struct mmc_ext_csd ext_csd; /* mmc v4 extended card specific */ struct sd_scr scr; /* extra SD information */
struct sd_switch_caps sw_caps; /* switch (CMD6) caps */ unsigned int sdio_funcs; /* number of SDIO functions */ struct sdio_cccr cccr; /* common card info */
struct sdio_cis cis; /* common tuple info */ ... ... };
mmc_card½á¹¹ÌåÄÚµÄÊý¾Ý½á¹¹Ö÷Òª´æ·ÅSD¿¨µÄÐÅÏ¢£¬ÆäÖÐRCA, CID, CSD, SCRΪSD¿¨ÄÚ²¿µÄ32λ¼Ä´æÆ÷¡£
2.1.2 struct mmc_request ½á¹¹Ìåmmc_request¶¨ÒåÓÚ/include/linux/mmc/core.h£¬ËüÖ÷Òª´æ·ÅÁ½´óÊý¾Ý½á¹¹µÄÖ¸Õ룬·Ö±ðÊÇcmdºÍdata£¬¹ËÃû˼Ò⣬һ¸öΪָÁһ¸öΪÊý¾Ý£¬Ò²¾ÍÊÇ˵£¬mmc_request½á¹¹Ìå´æ·ÅÁ˽øÐÐÖ÷¿ØÖÆÆ÷Óësd¿¨¼äͨÐÅËùÐèÒªµÄÖ¸ÁîºÍÊý¾Ý£¬struct mmc_request, struct mmc_command *cmd, struct mmc_data *dataÈýÕßÖ®¼äµÄ¹ØÏµÈçÏÂËùʾ£¬
struct mmc_request { struct mmc_command *cmd; struct mmc_data *data; struct mmc_command *stop;
void *done_data; /* completion data */
void (*done)(struct mmc_request *);/* completion function */ };
˵µ½½á¹¹Ìåmmc_commandºÍmmc_data£¬¾Í±ØÐë˵˵SD¿¨µÄÐÒéÁË¡£ 1) ÎïÀí½á¹¹
SD¿¨ÓÐ9¸öpin½Å£¨micro-SDΪ8¸ö£¬ÉÙÒ»¸ö½ÓµØpin½Å£©£¬ÈçͼËùʾ£¬
SDµÄÊý¾Ý´«Ê䷽ʽÓÐÁ½ÖÖ£¬ÆÕͨSDģʽºÍSPIģʽ£¬ÒÔSDģʽΪÀý£¬9¸öpin½Å·Ö±ðÊÇVDD,VSS,CLK£¬ÒÔ¼°ÎÒÃÇÐèÒª¹Ø×¢µÄÒ»¸ùÖ¸ÁîÏßCMD£¬4¸ùÊý¾ÝÏßDAT0~DAT3¡£ 2) ´«Êäģʽ
Ê×ÏÈÓÉÖ÷»úÏòSD¿¨·¢ËÍÃüÁîcommand£¬µÈ´ýSD¿¨µÄ»Ø¸´response£¬Èç¹û³É¹¦ÊÕµ½»Ø¸´£¬Ôò½øÐÐÊý¾Ý´«Êä¡£ÆäÖУ¬Ö¸ÁîÏߺÍÊý¾ÝÏßÉÏ´«ÊäµÄÖ¸ÁîºÍÊý¾Ý¶¼Òª×ñÑÏàÓ¦µÄÐÒé¸ñʽ¡£
3) Ö¸Áî¸ñʽ
¹²·ÖÏí92ƪÏà¹ØÎĵµ