基于APB 总线的SD 卡控制器IP 设计

2013-07-20 09:40刘钟宇张振华
微处理机 2013年6期
关键词:寄存器时序时钟

刘钟宇,张振华

(中国电子科技集团公司第四十七研究所,沈阳 110032)

1 引言

由于电子产品的高速发展和消费者需求,音频、视频多媒体技术随之发展,数据存储成为必须解决的一个主要问题。SD 卡以其资料储存量高、传输资料速度快、携带方便与安全性极佳而被广泛应用。随着微电子技术的发展,多媒体技术逐渐成熟和降低成本的考虑,开始使用专门的ASIC 方案,SOC(System On Chip)芯片逐渐成为主流。一般SOC 系统上多采用AMBA 总线,基于此我们开发了一款AMBA-APB 总线的IP,该IP 还可以集成在FPGA系统中,应用于军事、航空航天、测试和测量、消费类电子、医疗等领域。

通过对SD 卡协议的分析和APB 总线的研究,设计中使用SPI 方式对SD 卡进行读写操作,完成各种时序电路的设计,最后挂载到ARM 系统的AHB—APB 总线桥上,进行仿真,并下载到FPGA 器件中进行验证,编写相应的验证程序完成了SD 卡上块数据的读写。

2 SD 卡特性及接口简介

2.1 SD 卡特性

·容量:32MB/64MB/128MB/256MB/512MB/1Gbyte

·兼容规范版本1.01

·两个可选的通信协议:SD 模式和SPI 模式

·可变时钟频率0-25MHz

·通信电压范围:2.0-3.6V,工作电压范围:2.0-3.6V

·低电压消耗:自动断电及自动睡醒,智能电源管理

·无需额外编程电压

·卡片带电插拔保护

·正向兼容MMC 卡

·高速串行接口带随机存取

--支持双通道闪存交叉存取

--快写技术:一个低成本的方案,能够超高速

访问闪存和高可靠数据存储

--最大读写速率:10Mbyte/s

·数据寿命:10 万次编程/擦除

2.2 设计中采用的SD 卡接口类型定义

该控制器的时序设计,采用SPI 方式与SD 卡进行数据传输,SPI时钟极性为1,相位为1,其中SD卡在该方式下的引脚定义如表1 所示。

表1 SPI 方式下的SD 卡引脚定义

3 APB 总线介绍

APB 主要用于低带宽周边外设之间的连接,例如UART、SPI、TIMER 等,它的总线架构不像AHB 支持多个主模块,在APB 里面唯一的主模块就是APB桥。其特性包括:两个时钟周期传输;无需等待周期和回应信号;控制逻辑简单,只有四个控制信号。

APB 上的传输可以用图1 所示的状态图来说明。

图1 状态转换图

(1)系统初始化为IDLE 状态,此时没有传输操作,也没有选中任何从模块。

(2)当有传输要进行时,PSELx=1,PENABLE=0,系统进入SETUP 状态,并只会在SETUP 状态停留一个周期。当PCLK的下一个上升沿时到来时,系统进入ENABLE 状态。

(3)系统进入ENABLE 状态时,维持之前在SETUP 状态的PADDR、PSEL、PWRITE 不变,并将PENABLE 置为1。传输也只会在ENABLE 状态维持一个周期,在经过SETUP 与ENABLE 状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP 状态。

4 SD 卡—IP 实现

该IP 能实现SD 卡复位、初始化、块读写操作和CID、CSD 等状态信息读取等。该IP是通过SPI 方式访问SD 卡的。SD 卡IP的接口信号如表2 所示。

表2 IP 信号定义

图2 SD-IP 结构框图

4.1 寄存器的读写

当APB 总线对寄存器进行写操作时,从图3APB的写时序来分析,需要PWRITE=1,PSEL=1,PENABLE=1,则写信号可以表示为APB_WRITE=PWRITE & PSEL & PENABLE;要写入的寄存器地址由PADDR 来做译码进行选择,写入的数据为PWDATA。

当APB 总线对寄存器进行读操作时,从APB的读时序图来分析,需要PWRITE=0,PSEL=1,PENABLE=1,则写信号可以表示为APB_WRITE=~PWRITE & PSEL & PENABLE;要读出的寄存器地址由PADDR 来做译码进行选择,读出的数据为PRDATA,通过APB 总线桥传输到CPU AHB 总线的HRDATA。

图3 APB 写时序图

图4 APB 读时序图

基于以上时序分析,读写信号的逻辑设计如图5 所示。

图5 APB 读写控制信号

4.2 分频模块设计

分频时钟为SD_CLK,该时钟主要是与外部的SD 卡进行SPI 通信,完成数据的读和写两个过程。模块输入时钟为PCLK,复位信号为PRESETn,8 位分频寄存器的值SDIPRE,输出信号则为SD_CLK,频率值为:PCLK/2/(SDIPRE+1)。

设计思想是在PCLK时钟驱动下进行计数,当计数器等于SDIPRE时,状态个数或时钟个数为SDIPRE+1,此时输出信号SD_CLK 进行翻转;翻转两次则形成一个周期,从而得到所要求的分频值PCLK/2/(SDIPRE+1)。

另外需要考虑以下这种情况,当前SDIPRE 设定值为200,内部计数器会出现0-200的任意一个值,假设当前值为13,此时通过APB 总线设置SDIPRE=10,则需要187个时钟周期才能再次使计数器和SDIPRE相等,也即SD_CLK 才能发生动作,然后才开始按照设定值进行工作。为实现设置SDIPRE 以后立刻按照所设定的周期产生SD_CLK,使用一个比较器,当计数器值大于或等于SDIPRE时,SD_CLK 即发生翻转,实现工作频率的立即变换。该模块的结构设计见图6。

4.3 FIFO 设计

CPU 在与SD 卡通信过程中,数据传输都是以块操作来完成,数据量比较大,并且SD 卡接收时序比较慢,对于工作在AHB 总线上的CPU 来说,进行单个数据交换会大大影响系统的工作效率,因此在设计上加入了发送FIFO 和接收FIFO,这样解决了异步传输,快速和慢速设备之间的数据交接。

图6 分频模块结构

这两块FIFO 除了接口上信号不同外,内部都一样,只是被例化成两个不同的模块。FIFO 大小设计成64/4byte,有满、半满,空和半空标志,因此可以通过中断使能的开启,产生中断信号int_sd 快速与CPU 进行协调。FIFO 设计的关键点也是这几个信号的产生,以发送FIFO为例,写入端:时钟为PCLK,写入使能winc是通过PSEL 与所分配的APB地址译码相与来产生。

FIFO的设计框图见图7。主要由写地址产生模块wr_ptr、读地址产生模块rd_ptr、FIFO 满空标志产生模块status 和一个双端口存储器组成。读写地址采用格雷码设计,并使用最高两位来产生空还是满的方向走势。

4.4 SD 卡接口时序设计

SD-Card-Controller的读写时序由图8 几个状态组成,在不同状态下完成不同的时序,详细时序见MMC 卡控制时序图。该模块具有初始化、复位、CSD 和CID 信息的读取,BLOCK的读和写功能,主要完成在适当时间,通过SPI时序写入命令、数据或读出各种信息和数据,该过程中产生FIFO 读时序、写时序和相关寄存器的访问。

图7 FIFO 模块结构

图8 状态机跳转图

该状态机根据不同的寄存器命令和如下代码中的信号,进行各个状态之间的跳转。该状态机设计采用三段式,其组合逻辑部分也即状态跳转部分Verilog 代码如下:

5 IP的FPGA 验证

该IP的验证主要通过 ARM9 内核外接AHB2APB-Briage 来产生APB时序,并外接程序存储器和数据存储器,具体验证结构如图9 所示。

图9 SD-IP的FPGA 验证结构

FPGA 采用Altera的EP3SL1150C2。首先在ADS 下编写测试程序,对寄存器进行访问,保证能够读写,然后正确配置寄存器并通过FIFO 进行数据读写,根据FIFO 产生的中断标志和状态寄存器的两种查询方式,对SD-Card 进行块读写操作。数据的读写正确性采用交叉验证的方式,通过单片机在SD 卡上写入一页数据,通过下面的系统读取该区域的数据;然后以该系统架构执行程序在SD 卡上写入一页数据,再通过单片机读出数据,经过多次读写数据反复验证,该模块都能正常工作。验证过程中使用嵌入在QuartusII 中的SignalTapII Logic Analayzer 对关键信号采集波形,其中图10为CID信息的读取波形。信号SPI_DIN是输入到SD 卡的串行数据,从波形来看SPI_CS 变低以后,其输出命令为4AH,接着4个00H,最后产生一个CRC 校验数据,SPI_DOUT为SD 卡返回的信息。

图10 读取CID的时序波形

6 结束语

该IP的设计思想主要是参考三星S3C2410 中的SDIO 应用资料,测试分析之后进行结构设计,经过仿真验证与设计规范相符合。目前接口为APB形式,并通过FPGA 验证,可以进行页写入、读出和相关信息(CID、CSD)的读取。今后可以根据实际需要更改成各种类型的接口,嵌入到FPGA 或ASIC芯片等需要进行大量数据存储的系统中。

[1]阎石.数字电子技术基础[M].北京:高等教育出版社,1997.

[2]袁俊泉.Verilog HDL 数字系统设计及其应用[M].西安:西安电子科技大学出版社,2002.

[3]Steve Furber.ARM SoC 体系结构[M].田泽,于敦山,盛世敏,译.北京:北京航空航天大学出版社,2002.

猜你喜欢
寄存器时序时钟
清明
STM32和51单片机寄存器映射原理异同分析
别样的“时钟”
古代的时钟
Lite寄存器模型的设计与实现
基于不同建设时序的地铁互联互通方案分析
移位寄存器及算术运算应用
基于FPGA 的时序信号光纤传输系统
有趣的时钟
时钟会开“花”