基于SoPC的SD卡控制器IP核的设计

2011-07-08 14:19:54来源: 电子技术应用
   

摘  要: 针对目前在嵌入式平台中使用SD卡控制器专用芯片价格昂贵、软件模拟SPI时序控制读写速度较慢的问题,提出了一种基于SoPC技术的SD卡控制器IP核设计的架构方案。采用VHDL语言设计SD卡控制器IP核,利用自定义模块技术将其添加到SoPC中,利用Nios II IDE编写SD卡的基础读写驱动软件并移植μC/FS文件系统,实现对SD卡的文件操作。该设计具有使用方便、集成度高、数据传输可靠、文件格式通用等特点,在基于SoPC架构的多用途无线防盗监控系统中得到良好的应用。
关键词: 可编程片上系统; SD卡; μC/FS文件系统; 控制器; IP核

 随着电子产品的音频、视频等多媒体功能的不断增强,嵌入式系统对存储介质的容量、安全、性能、价格等提出了更高的要求,而SD卡因其价格低廉、速度快、容量大和兼容性好(兼容MMC卡协议)等特点在嵌入式平台中得到了广泛的使用。目前在嵌入式平台中使用SD卡的方式主要有:(1)系统中使用带SD卡控制器的电路模块或芯片。(2)将I/O口与SD卡接口连接以软件模拟SPI时序控制其读写。方式(1)使用方便、控制简单,但是增加了硬件电路复杂度和成本;方式(2)电路虽然结构简单,但是读写速度慢。
 针对上述缺陷,本文提出了基于SoPC技术的SD卡控制器的架构方案,即在Altera公司提供的Quartus II软件中开发SD卡控制器并在SoPC Builder中将其作为一个独立的IP核集成到SoPC中,通过软件驱动控制器以实现SD卡读写及文件操作,使其系统设计灵活、集成度高、读写速度快,为SOPC设计中使用非易失性存储提供了新的方案。


1 SD卡协议规范
    SD联盟在2000年和2006年分别发布了SD卡规范1.0和2.0版本,SD卡规范主要包括物理层规范[1]、文件系统规范和安全规范三部分内容,最大支持容量为32 GB,支持的文件系统为FAT16和FAT32。
 SD卡内部不仅有大量的存储单元,还有卡接口控制器、寄存器等,外部控制器不能直接访问存储器,所有对SD卡的操作如读/写、设置块长度、擦除等都是由卡接口控制器根据收到的命令自动完成,减少了外部控制器对存储器操作的负担[2]。SD卡支持SD和SPI两种工作模式,两种模式下SD卡的管脚意义如表1所示。SD模式下数据采用4线并行传输,速度较快。而SPI模式接口协议简单,在各嵌入式平台中的通用性好,故本设计中采用SPI模式。 


2 SD卡控制器IP核设计
 SD卡工作在SPI模式下,其总线主要有时钟线CLK、命令线CMD、数据线DAT和片选线CS。SD卡控制器主要实现三大功能:
 (1)复位和初始化SD卡。控制器按照SD卡总线协议产生控制时序对其进行复位和初始化。
 (2)读写SD卡。控制器首先通过CMD线发送读或写命令和扇区地址,等收到正确的命令回执后,将DAT线上传输的串行数据进行串/并转换,然后存储在控制器内部缓存中(写数据则将控制器内部缓存中的数据并/串转换后从DAT线发送到SD卡),一个扇区数据(512 B)传输完毕后将就绪信号置为有效。
 (3)设置SD卡。设置操作与读写操作相同,都是发送命令和参数,只是不接收和发送数据。
 需要特别指出的是:CLK信号由控制器产生,对SD卡的命令或数据传输等一系列操作均要与该时钟同步(SD卡的最大工作时钟为25 MHz)。
 SD控制器的功能模块划分如图1所示。

2.1 总线接口模块
    总线接口模块SDInterface是整个SD卡控制器的核心,其端口信号遵循Avalon协议规范[3],主要负责连接Avalon总线、缓存SD卡命令、缓存扇区地址、将要发送的数据送至缓存(双口RAM)以及从缓存中读取数据等。
 当处理器要对SD卡进行初始化时,需要写SDInterface模块的特定地址,之后SDInterface选择启动复位/初始化模块(SDInit),由SDInit完成SD卡的初始化工作。
 向SD卡写数据时,需要先通过SDInterface模块将要写的数据缓存到双口RAM中,然后将扇区地址和写命令(CMD24)发送到SDInterface模块的特定地址,之后SDInterface会启动命令控制(SDcmd)模块并将命令和地址传递给后者,最后由SDcmd模块完成一次写操作。
    从SD卡中读数据或对SD卡进行其他操作与向SD卡写数据过程基本一致,处理器首先向SDInterface发送命令和参数(如果是读写操作,则参数即为扇区地址),之后SDInterface启动SDCmd模块并由SDCmd模块完成后续操作(如果是读操作则将读得的数据缓存到双口RAM中)。


2.2 初始化模块
     对SD卡进行读写或其他操作前首先应将其初始化。初始化模块SDInit主要负责完成SD卡的初始化工作,主要工作流程如下:
 (1)当总线接口模块使能SDInit后,SDInit通过SPITrans模块向SD卡发送复位命令(CMD40)。
 (2)等待复位命令的回执,如果复位成功(返回值为0x01),则转向步骤(3),否则继续等待。
 (3)向SD卡发送初始化命令(CMD41),等待初始化命令的回执并将执行结果返回给SDInterface以便通知处理器。


2.3 命令控制模块
 命令控制模块SDCmd主要完成SD卡命令、参数、命令校验值的发送和命令回执的读取(如果是读写操作,则还要进行数据的发送和接收)。
 SDInterface模块使能SDCmd前会将SD命令、参数传递给SDCmd,这样SDCmd使能后,首先通过SPITrans模块将得到的命令、参数发送到SD卡,然后等待命令回执,如果当前命令是读、写之外的其他命令,则将执行结果返回给SDInterface模块即可;如果是读、写命令则收到正确的命令回执后,则还要将数据接收并存到缓存或发送到SD卡。


2.4 选择器和双口RAM
 选择器模块Mux主要用来根据当前操作从SDInit模块和SDCmd模块的输出信号中选择一路送至SPITrans模块。双口RAM是SD控制器的缓存,用来存储发送到SD卡和从SD卡上读取的数据。


2.5 串/并、并/串转换及时钟产生模块
 SPITrans模块主要负责串/并转换、并/串转换和SD卡时钟产生。当SPITrans模块使能后,它通过对输入时钟进行分频产生SD卡时钟,并在8个SD卡时钟周期内将选择器输出的8位并行数据转换为串行数据发送到SD卡,同时将SD卡DAT线上的串行数据转换为并行数据返回给SDInit模块和SDCmd模块。


3 基础读写设计
 SD卡控制器软件的编写在Altera公司的Quartus II中完成,使用SOPC Builder工具将具有Avalon总线接口的SD卡控制器封装成IP 核并集成到SOPC中,利用Nios II IDE编写软件驱动实现SD卡的基础读写(以扇区为单位进行读写)。写数据到SD卡扇区操作函数如下:
    int sd_write(UINT8 *data, UINT32 addr)
        {
         int ret, i=0, j=0;
            if(sd_type == 1) addr = addr << 9;
            /*判断地址偏移*/
         for(i=0; i<512; i++) 
         IOWR(SD_CARD_BASE, i, data[i]);
         /*写数据*/
         IOWR(SD_CARD_BASE, 517, CMD24);   
         /*写入地址*/
         IOWR(SD_CARD_BASE, 518, addr);
         /*开始运行*/
         IOWR(SD_CARD_BASE, 519, 0);
         /*读命令回执*/
         ret = IORD(SD_CARD_BASE, 519); 
         …
        }

[1] [2]

关键字:控制器  IP核  Quartus  II

编辑:北极风 引用地址:http://www.eeworld.com.cn/FPGA/2011/0708/article_2305.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
控制器
IP核
Quartus
II

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 

夏宇闻老师专栏

你问我答FPGA设计

北京航空航天大学教授,国内最早从事复杂数字逻辑和嵌入式系统设计的专家。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved