新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ReWorks平台的SD卡驱动程序设计

基于ReWorks平台的SD卡驱动程序设计

作者: 时间:2011-07-22 来源:网络 收藏

1.2卡读/写过程
卡的读/写过程是主机通过CMD物理接口向卡发出相关指令,对卡进行读或者写操作,读和写操作都有单块和多块的区别,根据卡协议规范,在进行读/写操作之前,先发送CMD16(SET_BLOCKLEN)命令来设置块大小。实现单块读和写操作分别用CMD17(READ_SINGLE_BLOCK)和CMD24(WRITE_BLOCK)命令,实现多块读和写操作分别用CMD18(READ_MULTIPLE_BLOCK)和CMD25(WRITE_MUL TIPLE_BLOCK)命令。主机和卡之间通过FIFO管道进行数据交换,因此读和写函数模块中且在数据交换之前,必须要对FIFO进行复位,通过对S3C2440的SD卡接口模块中的SDI-FSTA寄存器操作即可完成FIFO复位。在对卡读/写的过程中必须要注意在进行多块读和写操作完成后必须用CMD12(STOP_TRANSMISSION)指令结束读/写操作,将卡转入传输状态(Transfer State)。

2SD卡设备程序的设计
同其他操作系统一样抽象了对设备的处理。所有的硬件设备都像常规文件一样看待,它们可以使用和操作文件相同的、标准的系统调用来打开、关闭和读/写。系统中的每一个设备都用一个设备文件代表。
在创建具体的SD卡设备之前必须要在内存区中开辟一块空间,实现形式为:dev_table=(SDCARD_DEV*)malloc(sizeof(SDCARD_DEV)*max_SD_devices);SDCARD_DEV结构体包含了block_device_operations结构和SD卡相关属性,block_device_operations结构体如下所示:
b.JPG
f.jpg
该结构体对于块设备程序来讲非常重要。因为用户进程通过设备文件同硬件打交道,对设备文件的操作方式不外乎就是一些系统调用,如读/写等。中就是用block_device_operations这个关键的数据结构将系统调用和程序关联起来的。
在该数据结构中每一个函数指针都对应了一个系统调用,用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。该结构体包含了块设备操作所需的函数接口和必要的设备属性。
空间开辟成功后,便向系统注册设备,实现形式为:register_block_driver(SD_MAJOR,max_SD_devices,(block_ops*)dev_table,sizeof(SDCARD_DEV),”SDdriver”,ret_major);其实就是向系统设备表中写入相关信息,将上面开辟的SDCARD_DEV类型的内存空间和所要创建的块设备建立关联,再对SDCARD_DEV类型的内存空间进行必要的初始化,为下面创建SD卡块设备做好准备。


评论


相关推荐

技术专区

关闭