Linux内核MTD驱动程序与SD卡驱动程序(9)

2019-08-29 20:26

};

unsigned int unsigned int usage;

block_bits; //卡每一块大小所占的bit位

结构mmc_card是一个插卡的特性描述结构,它代有了一个插卡。列出如下(在include/linux/mmc/card.h中):

struct mmc_card { struct list_head struct mmc_host struct device unsigned int 地址 unsigned int #define MMC_STATE_PRESENT 统中

#define MMC_STATE_DEAD #define MMC_STATE_BAD u32 u32 struct mmc_cid 的CID寄存器 struct mmc_csd csd; 器 };

node; *host; dev; rca; //在主设备链表中的节点 // 卡所属的控制器 //通用设备结构

//设备的相对本地系统的//卡的状态

//卡出现在sysfs文件系//卡不在工作状态 //不认识的设备

/* raw card CID */ /* raw card CSD */ //卡的身份鉴别,值来自卡

state;

(1<<0) (1<<1) (1<<2) raw_cid[4]; raw_csd[4]; cid;

//卡特定信息,值来自卡的CSD寄存

结构mmc_host描述了一个MMC卡控制器的特性及操作等,结构mmc_host列出如

下(在include/linux/mmc/host.h中):

struct mmc_host { struct device struct mmc_host_ops unsigned int unsigned int u32 char

*dev; //通用设备结构

*ops; //控制器操作函数集结构 f_min; f_max;

ocr_avail; //卡可用的OCR寄存器值 host_name[8]; //控制器名字

//主控制器中与块层请求队列相关数据 unsigned int max_seg_size; //最大片断的尺寸 unsigned short max_hw_segs; //最大硬件片断数 unsigned short max_phys_segs; //最大物理片断数 unsigned short max_sectors; //最大扇区数 unsigned short unused; //私有数据 struct mmc_ios ios; //当前i/o总线设置 u32 ocr; //当前的OCR设置 struct list_head cards; //接在这个主控制器上的设备 wait_queue_head_t wq; //等待队列 spinlock_t lock; //卡忙时的锁 struct mmc_card *card_busy; //正与主控制器通信的卡 struct mmc_card *card_selected; //选择的MMC卡 struct work_struct detect; //工作结构 };

结构mmc_host_ops是控制器的操作函数集,它包括请求处理函数指针和控制器对卡I/O的状态的设置函数指针,结构mmc_host_ops列出如下:

struct mmc_host_ops { void (*request)(struct mmc_host *host, struct mmc_request *req); void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios); }

结构mmc_ios描述了控制器对卡的I/O状态,列出如下:

struct mmc_ios { unsigned int clock; unsigned short vdd; unsigned char bus_mode; unsigned char power_mode;

//时钟频率 //命令输出模式 //电源供应模式

};

结构mmc_driver是MMC设备驱动程序结构,列出如下:

struct mmc_driver { struct device_driver drv; int (*probe)(struct mmc_card *); void (*remove)(struct mmc_card *); int (*suspend)(struct mmc_card *, u32); int (*resume)(struct mmc_card *); };

(2) 读写请求相关结构

图 MMC卡读写请求结构示意图

对于MMC卡的操作是通过MMC请求结构mmc_request的传递来完成的,来自系统块层的读写请求到达MMC设备抽象层时,用系统的读写请求填充初始化MMC卡的

读写请求,经MMC协议分解后,然后把请求发给设备,再调用具体设备的请求处理函数来完成请求的处理。MMC卡读写请求结构示意图中上图。下面分析MMC卡读写请求相关结构:

结构mmc_request描述了读写MMC卡的请求,它包括命令、数据及请求完成后的回调函数。结构mmc_request列出如下(在include/linux/mmc/mmc.h中):

struct mmc_request { struct mmc_command struct mmc_data struct mmc_command void void 成的回调函数 };

*cmd; *data; *stop;

*done_data; //回调函数的参数

(*done)(struct mmc_request *);//请求完

结构mmc_queue是MMC的请求队列结构,它封装了通用请求队列结构,加入了MMC卡相关结构,结构mmc_queue列出如下(在drivers/mmc/mmc_queue.h中):

struct mmc_queue { struct mmc_card struct completion wait_queue_head_t struct semaphore unsigned int struct request int request *);

//发出读写请求函数 int request *); void struct request_queue struct scatterlist };

*card; //MMC卡结构

thread_complete; //线程完成结构 thread_wq; //等待队列 thread_sem; flags;

*req; //通用请求结构

(*prep_fn)(struct mmc_queue *, struct

(*issue_fn)(struct mmc_queue *, struct *data;

*queue; //块层通用请求队列 *sg; //碎片链表

结构mmc_data描述了MMC卡读写的数据相关信息,如:请求、操作命令、数据及状态等。结构mmc_data列出如下(在include/linuc/mmc/mmc.h中):

struct mmc_data { unsigned int timeout_ns; //数据超时( ns,最大80ms) unsigned int timeout_clks; //数据超时(以时钟计数) unsigned int blksz_bits; //数据块大小的bit位 unsigned int blocks; //块数 unsigned int error; //数据错误 unsigned int flags; //数据操作标识

#define MMC_DATA_WRITE (1 << 8) #define MMC_DATA_READ (1 << 9) #define MMC_DATA_STREAM (1 << 10) unsigned int bytes_xfered; struct mmc_command *stop; //停止命令 struct mmc_request *mrq; //相关的请求 unsigned int sg_len; //碎片链表的长度 struct scatterlist *sg; // I/O碎片链表指针 };

结构mmc_command描述了MMC卡操作相关命令及数据、状态信息等,结构列出如下:

struct mmc_command { u32 u32 u32 unsigned int #define MMC_RSP_NONE #define MMC_RSP_SHORT #define MMC_RSP_LONG #define MMC_RSP_MASK #define MMC_RSP_CRC #define MMC_RSP_BUSY

opcode; arg; resp[4]; flags; (0 << 0) (1 << 0) (2 << 0) (3 << 0) (1 << 3) (1 << 4)

//期望的反应类型

/* expect valid crc */

/* card may send busy */


Linux内核MTD驱动程序与SD卡驱动程序(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:8个穴位治8种常见病 记住一生受益

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: