一种基于FPGA的eMMC主控制器的制作方法

文档序号:20915730发布日期:2020-05-29 13:29阅读:567来源:国知局
一种基于FPGA的eMMC主控制器的制作方法

本发明属于电子信息领域,具体涉及一种基于fpga的emmc主控制器。



背景技术:

随着电子信息技术的高速发展,人们对智能手机、平板电脑等消费电子产品和移动多媒体设备的需求快速增长,引发了对高速大容量数据存储的需求越来越大。智能终端和移动多媒体设备对文档、图片、音频、视频等数据存储要求越来越高。而在电子产品中传统使用的nandflash芯片具有兼容性差、操作复杂度高、管理难度大、传输速度慢的缺点,emmc作为一种内嵌式存储芯片,以其接口简单、存储容量大、传输速度快和集成度高的优势,使得它在智能消费电子产品以及移动多媒体设备中广泛应用。

现有的emmc主控制器一般都是arm处理器或者单片机进行控制,只需要调用硬件厂商底层函数进行控制就可以进行对emmc读写,但是这种cpu控制的方法缺点在于速度低,并且随着cpu内部的多任务执行,emmc的读写速度会越来越低。



技术实现要素:

本发明的目的在于提供一种基于fpga的emmc主控制器,该模块对emmc协议进行精简,对ip模块的接口简洁化设计,实现对emmc进行数据读写和擦除控制。

实现本发明目的的技术解决方案为:一种基于fpga的emmc主控制器,包括emmc顶层模块、emmc控制模块、emmc初始化模块、emmc读写模块、emmc缓存模块、emmc擦除模块、cmd发送模块和cmd响应模块,emmc顶层模块分别与emmc控制模块、emmc初始化模块、emmc读写模块、emmc缓存模块及emmc擦除模块连接进行数据通信;emmc读写模块分别与emmc控制模块、emmc缓存模块连接进行数据通信;emmc擦除模块与emmc控制模块进行数据通信。

本发明与现有技术相比,其显著优点在于:1)简化用户接口,提供数据流操作;2)占用fpga逻辑资源极少,容易移植,时序上容易收敛。

附图说明

图1为本发明所述的基于fpga的emmc主控制器实现框图。

图2为本发明emmc初始化流程图。

图3为本发明emmc数据读流程图。

图4为本发明emmc数据写流程图。

具体实施方式

下面结合附图对本发明作进一步详细描述。

结合图1,本发明所述的一种基于fpga的emmc主控制器,按照emmc(embeddedmultimediacard)协议标准规范,在xilinx7系列fpga(fieldprogramablegatearray)中进行逻辑编程,包括emmc顶层模块、emmc控制模块、emmc初始化模块、emmc读写模块、emmc缓存模块、emmc擦除模块、cmd发送模块和cmd响应模块,emmc顶层模块分别与emmc控制模块、emmc初始化模块、emmc读写模块、emmc缓存模块及emmc擦除模块连接进行数据通信;emmc读写模块分别与emmc控制模块、emmc缓存模块连接进行数据通信;emmc擦除模块与emmc控制模块进行数据通信。

emmc顶层模块功能是封装emmc初始化模块、emmc读写模块、emmc缓存模块、emmc擦除模块、cmd发送模块和cmd响应模块,提供简易指令操作给用户使用,并且提供数据流输入和输出接口。

emmc控制模块用于完成emmc底层控制功能,包括读写、系统控制交互。

emmc初始化模块功能是系统上电后,在emmc进行正常读写之前,必须按照emmc协议规范规定的步骤完成初始化,初始化模块的主要功能是完成对emmc芯片的基本配置工作,比如芯片复位、工作电压匹配、相对地址rca分配、工作时钟切换以及数据总线位宽设置等。

emmc初始化模块包括cmd发送模块和cmd响应模块;系统上电后,在emmc进行正常读写之前,必须按照emmc协议规范规定的步骤完成初始化。本文设计的emmc主控制器的初始化模块的主要功能是控制和引导emmc设备完成初始化操作,其初始化流程图如图2所示。

初始化模块完成的主要功能是emmc芯片的基本配置操作,比如芯片复位、工作电压匹配、相对地址rca分配、工作时钟切换以及数据总线位宽设置等。本发明设计的初始化模块其工作流程如下所示:

(1)emmc复位转换到idle状态采用软件复位,主机通过控制器的初始化模块发送命令cmd0进行复位。emmc复位之后,所有的寄存器都复位成默认值,此时clk需要设置成0~400khz范围,而本发明设计的初始化时钟输出的是400khz,满足设计需求。

(2)在idle状态,该模块向emmc设备发送命令cmd1进行双电压和扇区模式匹配,如果emmc的响应寄存器ocr的busy位响应为0,因此设备上电复位没有成功,须要重新发送cmd1命令,直到接收到的busy位为1且电压范围和扇区模式匹配,则emmc进入ready状态。

(3)在ready状态,初始化模块通过发送命令cmd2请求读取emmc设备cid的内部信息;如果命令发送成功并且得到了cid寄存器的内容(其中响应r2是136bit),emmc则进入identification状态,否则emmc状态将维持在ready状态不变。

(4)初始化流程进入identification状态之后,发送命令cmd3,对emmc芯片进行相对地址rca分配(其典型值是0x0001),对于emmc阵列需要分配相互独立的相对地址,原因在于emmc阵列是依靠不同的相对地址来区分的。完成相对地址分配之后,emmc进入stand-by状态,另外需要注意当emmc一旦进入stand-by状态就不再响应命令cmd1、cmd2和cmd3。

(5)在stand-by状态,首先发送命令cmd9,获取emmc设备的csd寄存器的值,可以得到诸如数据块长度、芯片存储容量、支持的最大时钟速率等。然后,再发送设备选定命令cmd7,命令cmd7通过参数中包含设备已经分配的相对地址rca来选定设备,对于多片共享同一命令总线cmd的emmc芯片,每次只能选定其中一片。但本文设计的emmc阵列控制器命令总线cmd是分开连接的,所以可以同时选定所有的emmc,如此一来emmc阵列就可以同时工作,可以大大提高数据吞吐量。此时emmc设备进入transfer状态。

(6)在transfer状态,初始化模块首先发送命令cmd6,其中命令中包含切换工作速率的参数,将emmc从初始化的低速模式切换到正常工作的高速模式。时钟模式切换以后,此模块需要再次发送cmd6命令,其中命令中包含的参数是数据位宽切换和时钟单双沿模式的选择,emmc设备复位之后默认状态是一位数据位宽和时钟单沿模式。在该控制器设计中,数据位宽设定的是8位,时钟模式使用的是单沿模式。其中,这两次cmd6命令顺序可调换。此时,emmc停留在transfer状态,初始化工作全部完成,并生成初始化完成标志,通知用户层可以进行数据读写以及时钟模块可以将时钟切换到高速时钟。emmc控制器的初始化模块完成了emmc复杂的基本配置和操作流程,简化了上层用户的操作。如果emmc在数据传输过程或其他过程出现不可预见的错误,可以利用硬件复位使其重新进入初始化流程,这样就可以使emmc结束错误过程,再次进入正常工作状态。

emmc读写模块主要作用是在对emmc进行读写操作时,根据数据传输流程发送相应的读写操作命令以及响应的相应处理。

emmc读写模块主要作用是在对emmc进行读写操作时,根据数据传输流程发送相应的读写操作命令以及响应的相应处理。此外,主控制模块还会和数据处理、命令接口模块进行数据通信。数据读和数据写详细设计如下:

(1)数据读分为单块读和多块读,emmc数据读流程图如图3所示;单块读操作开始时,主机通过emmc控制器的主控制模块首先发送命令cmd16设置块长度,其中默认块长度为512b;然后发送单块读命令cmd17(包含单块读起始地址参数)后,根据数据单块读时序,如果超过ncr个时钟周期未检测到r1响应则认为响应超时超时,需要重新发送命令cmd17,此外响应错误也需要重发命令。读取的单块数据在数据处理模块做crc检验时,然后把比对结果传送给主控制模块,如果crc检验一致则单块读完成,不然需要再次发送命令cmd17再次进行单块读,直到读取crc检验一致。在进行多块读过程时,首先发送cmd16命令进行块长配置,然后发送cmd23命令配置多块读块数,接着发送多块读命令cmd18,如果响应正常则进行单块读,否则重新发送cmd18命令。同单块读一样,如果crc校验不一致则需要重新开始读过程,否则发送cmd13命令查询busy位是否为高,如果为高就一直等待并轮询发送命令cmd13继续查询设备状态,直到检测到busy位为低则单块读完成,此时读块数累加,然后重复此过程,直到读取块数和设定块数一致,则多块读完成。

(2)数据写分为单块写和多块写,emmc数据写流程图如图4所示。单块写操作开始时,主控制模块首先发送cmd16命令设置块长度,然后发送单块写命令cmd24(包含单块写起始地址参数),但只要命令cmd24响应错误或超时就需要再次发送。写入emmc的单块数据包含有crc校验,在emmc内部也会对数据进行校验并将校验结果反馈给控制器,如果crc校验不一致则需要重新开始写过程,否则通过发送命令cmd13查询设备状态,如果busy位为高则需要轮询发送cmd13查询,直到busy位为低则单块写完成。多块写操作开始时,主控制模块首先发送命令cmd16设置块长度,然后通过命令cmd23设置多块写块数。这些基本设置完成之后,主控制模块发送命令cmd25进行多块写,同单块写一样如果响应r1错误或超时,则需要重新开始多块写过程。接着,将单块数据写入emmc,写入emmc的数据附带的crc检验结果会自动和其内部计算的crc检验结果进行比对,并将校验比对结果通过dat0(正确状态值为010,错误状态值为101)反馈给控制器,如果接收到的状态值错误则需要重发多块多命令,否则控制器通过发送命令cmd13查询emmc设备busy位是否为高,如果为高则需要继续等待并接着发送cmd13命令查询其状态,直到busy位为低则表明单块写完成,然后写块数进行累加,最后重复以上过程,直到设定写块数和块数累加值一样,则多块写完成。

emmc缓存模块主要功能是和用户数据流进行时钟和位宽转换,并通过逻辑功能电路控制读写方向和读写字节数量。

emmc擦除模块功能是emmc数据擦除和垃圾数据收集,需要用户输入擦除起始和结尾地址,在擦除emmc时,根据emmc标准的擦除流程发出相应的命令进行擦除,擦除完成时模块会给出标记,由于emmc芯片写入时候会覆盖原来数据,所以擦除模块不是必须使用的。

cmd发送模块根据cmd命令发送时序将cmd命令发送给emmc芯片,模块接收到cmd命令后,生成对应的crc校验值,根据cmd发送时序输出到cmd线上,模块处理完成后输出发送完成标志,命令响应类型和响应长度。

cmd响应模块接收emmc芯片发出cmd命令的响应数据,模块根据响应类型和长度,生成响应数据的crc值,验证crc值是否正确,最后给出响应数据和crc校验是否正确的信号。

本发明基于fpga具有稳定性好、灵活性高、系统集成密度高、研发和时间成本低、处理速度快等优势;要比传统的cpu控制传输速度更快,并且通用性更好。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1