一种基于apb总线的sd/mmc卡控制方法

文档序号:9810477阅读:758来源:国知局
一种基于apb总线的sd/mmc卡控制方法
【技术领域】
[0001]本发明属于控制方法,具体涉及一种基于APB总线的SD/MMC卡控制方法。
【背景技术】
[0002]MMC卡由西门子公司和SanDisk公司于1997年推出。1998年由十四家公司联合组建了 MMC协会(MMCA)。MMC卡集成了存储单元和控制器,兼具了高速和大容量的特点。SD卡由MMC发展而来,其规范中明确指出它是MMC规范的超集。按SD卡规范2.0以上版本设计的SD卡控制器可以同时兼容SD卡和MMC卡。SD/MMC卡接口包括以下信号:
[0003]a) CLK:时钟信号;
[0004]b)CMD:指令信号,双向;
[0005]c)DAT0?DAT7:数据信号,双向。
[0006]AMBA标准是由ARM公司提出并的一种专门为设计高性能嵌入式微处理器而定义的芯片上的通讯标准。根据工作速度和应用,分为AHB、ASB和APB。
[0007]APB总线是AMBA总线层级中的一部分,他可以降低功耗和减少外设接口的复杂性。适用于带宽较低并且无需高性能流水总线接口的外设。本发明中所使用到的APB总线信号包括以下几个:
[0008]a)PCLK:APB总线时钟信号读写等操作均与该信号上升沿同步;
[0009]b) RESETn =APB总线复位信号,低电平有效;
[0010]c) PSELx =APB从模块片选信号,高电平有效;
[0011 ] d) PENABLE =APB使能信号,高电平有效;
[0012]e)PffRITE:APB读写信号,高电平执行写操作,低电平执行读操作;
[0013]f) PSTRB =APB触发及字节使能信号;
[0014]g) PADDR =APB地址总线信号,9位宽度;
[0015]h) PffDATA =APB写数据总线信号,16位宽度;
[0016]i) PRDATA =APB读数据总线信号,16位宽度;
[0017]传统设计中对于要求具备大容量存储功能的导航计算机采用的存储设备通常是NAND FLASH芯片。这种芯片在使用过程中需要进行坏块处理操作,增加了导航算法的复杂度,浪费软件资源。采用SD/MMC接口的大容量存储设备(如SD卡、MMC卡和eMMC卡等),不需要进行坏块处理操作,并且非常适合文件系统的搭建,既节省了软件开销,还扩展了导航计算机的功能。但由于目前导航计算机上所使用的处理器大多为DSP,而片内集成SD/MMC接口的DSP较少,限制了这类存储设备在导航计算机上的使用。

【发明内容】

[0018]本发明针对传统技术的缺陷,提供一种基于APB总线的SD/MMC卡控制方法。
[0019]本发明是这样实现的:一种基于APB总线的SD/MMC卡控制方法,包括下述步骤:
[0020]步骤一:指令响应收发控制
[0021]指令响应收发控制由指令响应收发控制状态机完成,它包括6种状态IDLE1、WRITE_WR1、WRITE_W01、DLY_WR1、DLY_W01、READ_WR1,
[0022]在IDLE状态下,指令响应收发控制状态机根据外部指令判断该指令是否需要响应回复,
[0023]步骤二:数据传输控制
[0024]数据传输控制由数据传输控制模块完成,它分为6种状态IDLE2、WRITE_DAT22、WRITE_CRC2、WRITE_BUSY2、READ_ffAIT2,READ_DAT2。
[0025]如上所述的一种基于APB总线的SD/MMC卡控制方法,其中,
[0026]所述的步骤一中指令响应收发控制状态机的工作过程分为两条分支:
[0027]分支1:1DLE1-〉WRITE_WR1-) DLY_WR1-) READ_WR1-) IDLEl ;
[0028]分支2 JDLE1-) WRITE_W01-) DLY_W01-) IDLEl,
[0029]各状态作用如下所示:
[0030](I) IDLEl状态:IDLE状态下除了完成指令的初始化工作以外,还需要根据处理器设置信息完成下一状态的跳转操作,若所发送的指令需要响应回复,状态机进入分支I的WRITE_WR状态;若不需要响应回复,状态机进入分支2的WRITE_W0状态;
[0031](2)WRITE_WR1状态:WRITE_WR状态完成指令的并串转换和CRC校验码的生成,并从CMD信号线发送至外挂设备,该状态还需要判断该指令是否要求从设备读取数据,若需要读取数据则产生一个SDMMC_CLK时钟周期高脉冲的DATA_READ1信号传递给数据传输控制模块;若不需要则直接跳转至DLY_WR1状态;
[0032](3)WRITE_W01状态:相对于WRITE_WR1状态,WRITE_W01状态较为简单,它仅需要完成指令的并串转换和CRC校验码的生成,完成指令的发送操作后直接跳转至DLY_W0状态;
[0033](4)DLY_WR1状态:该状态的主要工作包括设置CMD信号线为高阻、复位并禁止CRC校验模块,并且等待接收CMD信号线上的响应起始位,待接收到后跳转到READ_WR1状态;
[0034](5)DLY_W01状态:该状态完成设置CMD信号线为高阻、复位并禁止CRC校验模块后,等待4个时钟周期,然后直接跳转至IDLEl状态;
[0035](6) READ_WR1状态:READ_WR1状态负责设备返回响应的接收,它会根据处理器设置的响应字节长度完成接收响应的串并转换,进行CRC校验,并置相应的状态位供处理器读取。
[0036]如上所述的一种基于APB总线的SD/MMC卡控制方法,其中,
[0037]所述的步骤二中数据传输控制模块的工作分成了两条分支,分支I为数据写操作,分支2为数据读操作:
[0038]分支1:1DLE2-〉WRITE_DAT2-) WRITE_CRC2-) WRITE_BUSY2_〉IDLE2 ;
[0039]分支2:IDLE2-) READ_ffAIT2-) READ_DAT2_〉IDLE2,
[0040]各状态作用如下所示:
[0041](1)IDLE2状态:IDL2E状态主要功能是完成一次数据读/写操作的初始化工作,如CRC校验码清零、写缓冲区清零、DAT[7:0]信号线置高阻态等;
[0042](2)ffRITE_DAT2状态:WRITE_DAT2状态下,状态机通过控制双口 RAM的端口使能信号,从双口 RAM中读取数据,并对读取的数据进行CRC校验,根据参数设置的SD/MMC数据线位宽,状态机将读取的8位数据通过一个或两个SDMMC_CLK时钟周期发送到设备的DAT数据总线上,在发送数据的同时,通过CRC校验模块计算CRC校验码,在数据发送完后,再从DAT信号线发送CRC校验码,从而完成一次单块数据的写操作;
[0043](3)WRITE_CRC2状态:设备在接收到FPGA发送的数据和CRC校验和后,会利用CRC校验和对数据的有效性进行判断,并将判断结果通过CRC状态响应从数据信号线DATO发送给FPGA,若数据有效,CRC状态响应为“010”,反之为“ 101”,WRITE_CRC2状态的作用既是用来接收3位CRC校验状态码,随后跳转到WRITE_BUSY2状态;
[0044](4)ffRITE_BUSY2状态:WRITE_BUSY2状态判断设备发送的CRC状态响应是否正确,并将判断结果供处理器读取,并判断前已写的数据块数是否等于处理器的设置块数,若已写数据块数等于处理器设置块数,状态机返回IDLE2状态,整个写操作完成;否则返回WRITE_DAT2状态,继续写下一个数据块,
[0045](5)READ_ffAIT2状态:该状态将DAT [7:0]信号线置高阻态,等待接收数据的起始位,检测到起始位后,状态跳转至READ_DAT2状态;
[0046](6)READ_DAT2状态:READ_DAT状态通过移位操作接收DAT数据总线上的数据并保存到双口 RAM中,数据接收的同时进行CRC校验,接收完一块数据后,对接收到的CRC校验和与计算得出的CRC校验和进行比对,将比对结果保存在CRC读数据状态位CRCRD中,供处理器读取,与写操作类似,通过比较已读取的数据块数量和处理器的设置值来判断写操作是否完成,完成后返回IDLE2状态,否则返回READ_WAIT2状态。
[0047]本发明的显著效果是:本技术方案在FPGA中实现了基于APB总线的SD/MMC卡控制逻辑算法,任何DSP处理器都能通过该逻辑算法方便的挂接使用SD/MMC接口的大容量存储设备。
【附图说明】
[0048]图1是指令响应收发控制的逻辑关系图;
[0049]图2是数据传输控制的逻辑关系图。
【具体实施方式】
[0050]一种基于APB总线的SD/MMC卡控制方法,包括并行的指令响应收发控制步骤和数据传输控制步骤,具体为:
[0051]步骤一:指令响应收发控制
[0052]指令响应收发控制模块负责指令的发送和响应的接收。处理器将指令参数写入32位参数寄存器,然后将指令类型和指令控制信息写入指令寄存器(MMCCMD)。顶层控制模块检测到MMCCMD有写入操作时,产生一个PCLK时钟周期高脉冲信号(NEW_CMD),输入指令响应收发控制模块,触发指令响应收发状态机启动。
[0053]指令响应收发状态机是指令响应收发控制模块中最主要的部分。它依据指令类型将指令响应的整个收发过程分为6种状态(IDLE、WRITE_WR、WRITE_WO、DLY_WR、DLY_TO、READ_ffR)ο
[0054]在IDLE状态下,状态机根据处理器设置的指令控制信息判断该指令是否需要响应回复,并据此将状态机分为两条分支:
[0055]分支1:1DLE-〉WRITE_WR-) DLY_ffR-) READ_ffR-) IDLE ;
[0056]分支2:IDLE-) WRITE_W0-) DLY_ffO-) IDLE。
[0057]各状态作用如下所示:
[0058](I) IDLE状态:IDLE状态下除了完成指令的初始化工作以外,还需要根据处理器设置信息完成下一状态的跳转操作,若所发送的指令需要响应回复,状态机进入分支I (WRITE_WR状态);若不需要响应回复,状态机进入分支2 (WRITE_W0状态);
[0059]⑵WRITE_WR状态:WRITE_WR状
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1