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

2011-07-08 14:19:54来源: 电子技术应用 关键字:控制器  IP核  Quartus  II
   

摘  要: 针对目前在嵌入式平台中使用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
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AMBA总线 SoC 系统IP核的即插即用研究
下一篇:边缘图像连通区域标记的算法研究和SoPC实现

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
控制器
IP核
Quartus
II

小广播

独家专题更多

TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来

夏宇闻老师专栏

你问我答FPGA设计

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

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