求助sd卡 sdhc卡 sdxc卡控制器

SDHC控制器代码移植日记一(SD_CRC_7)
题记:是个不可多得的开源好网站,虽然很多时候并不是download下来的代码就直接能用,但是能够多参考前人的努力成果,并且消化后转化为自己的东西能很大程度上加速工程项目的开发。从他人的代码里也能够学到很多设计的精髓,也很有助于自身水平的提高,并且这个提高是立竿见影的。特权同学最近在移植一个,解读他人代码的过程是很痛苦的,但是从这几天解读的过程中感觉收获颇丰,能够在这个过程中提升自己,就凭这一点就足以让我鼓起勇气坚持下去。
&&&&&&&& 未来一段时间的博文里会慢慢的来分析这些代码,可能不会上传整理过的源码(大家可以到opencores下载源码),但是会从整体功能、接口时序等方面入手来分析这份代码。感兴趣的朋友可以从今天这篇最简单的SD_CRC_7模块解读开始,和特权同学一起进入SDHC控制器的代码移植之旅。
2.SD_CRC_7模块
2.1 功能原理图
2.2 接口定义与说明:
&&&& //系统信号,时钟和复位
input CLK;&&& //输入时钟信号
input RST;&&&& //CRC7模块复位信号,高有效&&&&&&&&&&&&&&&&&&&&&&
&&&& //功能实现信号&&&&&&&&&&&&&&
input BITVAL;&&&&&& //CRC7下一个输入bit
input E&&&&&&& //CRC7校验功能使能信号
output reg [6:0] CRC;& //输出的校验结果
2.3 接口功能描述
&&&&&&&& BITVAL为图2的data_in信号,CRC为图2的data_out信号。当Enable信号有效(高电平)后,每个时钟的上升沿锁存一次BITVAL数据,40个时钟周期后,Enable信号撤销(低电平),此时的CRC[6:0]值即40bit数据对应的CRC7校验值。
关注微信公众号鼍皇量皇璺鲁曼鼍曼|鼍量―鼍immSD#控制器的;mm;m一=-m,pm―●置●■置量量曼曼量虽罾鼍量―;SDCLK;StX:Lrd空制;命令回复控制;寄存器组;AHB;slaveCltC7CMDSD;接口数据控制;32比特移位寄存器;FIFO(32字节)CRCl6?4总线lDAT;发黼收控制l;图3.1SD卡控制器模块划分;Figure3-1SDcardc
鼍皇量皇璺鲁曼鼍曼|鼍量―鼍immSD#控制器的设计
m一=-m,pm―●置●■置量量曼曼量虽罾鼍量―■―量■■―■―I
SDCLK
StX:Lrd空制
命令回复控制
slaveCltC7CMDSD
接口数据控制
32比特移位寄存器
FIFO(32字节)CRCl6?4总线lDAT
发黼收控制l
图3.1SD卡控制器模块划分
Figure3-1SDcardcontrollermodulepartition
SD卡控制器与SD卡之间命令和回复通讯的实现需要建立一个命令发送和回复接收模块及相应的7比特CRC生成单元,该模块控制SD总线上CMD线上的传输。
对于数据的传输,同样需要建立数据收发模块和16比特CRC生成单元来将数据打包成SD规范要求的格式,该模块将控制SD总线上4根DAT线上的传输。
寄存器组中则包含了CPU可访问的所有寄存器,CPU通过AHB接口访问其中的寄存器,配置和控制SD卡控制器,实现与SD卡之间的通信。
由于系统内核速度远高于SD卡速度,控制器内部设计一个FIFO做为缓冲将有助于实现数据高速、连续地传输。通常HFO越大将带来越高的系统效率,但也将占用更多的芯片面积。折中考虑速度和面积,本SD卡控制器中使用了32字节的FIFO[161。该FIFO同样挂于AHB总线,CPU和DMA控制器可对其直接进行读写。
下文将对各模块实现方法进行详细说明。
3.3.1AHBSIave接口
AI-IBMaster通过该接El模块实现对SD卡控制器内的寄存器和FIFO的访问。在AHBSlave中存在两个HREADY信号,HREADYO为AHBSlave的输出信号,表示该slave当前是否准备好进行数据传输;HREADYI为AHBSlave的输入信号,表示当前AHB总线上其他slave是否处于ready状态【17】。
由AHB规范可知,对于一个AHBslave来说,只有输入HTRANS[1]和
北京I.业大学工宁坝士宁位论文
HREADYI同时为高才表示当前的传输是有效的。在每个HCLK上升沿,若HTRANS[1]和HREADYI同时为高则应采样HADDR、HWRITE和HSIZE信号。采样后的HADDR信号经过译码生成各寄存器的选通信号,HWRITE信号则指示当前的操作为读还是写。若为读操作,则相应寄存器的值被放到HRDATA数据线上,该数据在下个HCLK上升沿被AHBMaster采样;若为写操作,还应结合HADDR和HSIZE生成相应的字节使能信号,在下个HCLK的上升沿,将HWDATA中字节使能的数据写至被选通的寄存器。
该模块对AHBMaster发起的传输总是处于ready状态,因此模块输出的HREADYO信号是锁定为l的,也无须支持SPLIT/RETRY传输,模块的接口中也没有HRESP信号。
模块的接口如图3.2所示。
AHB接口模块hrdatahtranS
h霄r.1te
hwdatahreadyo
hreadyi
图3-2Aim接口信号
Figure3-2AHBinterfacesignaR
3.3.2SDCLK控制模块
SD卡规范中要求SD卡在identification阶段时钟频率不得超过400KHz,而在数据传输阶段时钟频率最高可达50MHz,因此SD卡控制器输出的SDCLK频率必须是可控的。由于系统AHB的时钟频率通常远高于SD卡工作的时钟频率,因此可将AHB时钟分频的来实现对SDCLK频率的控制。
除控制SDCLK频率外,该模块还必须能在适当的时候将SDCLK输出锁定为高电平或低电平,并在恰当的时候解除锁定。如在发送数据时如果CPU向FIFO中填充数据的速度不够快导致FIFO被读空,若继续输出SDCLK时钟脉冲将导致SD卡采到错误的数据,此时SDCLK控制模块会将SDCLK输出锁定在高电平或低电平使传输暂停,直到CPU向FIFO中填入新数据后再输出SDCLK时钟
NL曹.量―|寡鼍曼置皇量皇量曼皇量量曼曹―量罾量■量量■量鼍■■―罾量薯皇―罾■鲁置―置一SD}控制器的设计
脉冲,使传输继续进行。
模块接口如图3-3所示。
rst_n
SDCLK
clk_div
clkmode
sdclk_pause控制模块
图3-3SDCLK控制模块接口
Figure3―3SDCLKcontrolmoduleinterface
fsa.Kdiv为分频系数,输出sdclk时钟频率fSDCLK=facLK/(2(clk_div+1)),其中AHB总线的时钟频率;clkmode可配置SDCLK输出三种模式:输出时钟脉冲、锁定为高电平或锁定为低电平;sdclkpause有效时SDCLK将暂停输出时钟脉冲,待sdclkpause撤消后继续时钟脉冲输出。
由于SD总线上的传输以SDCLK做为时钟信号,因此命令回复控制状态机和数据控制状态机的状态翻转也以应与SDCLK同步。但直接使用SDCLK做为命令回复控制状态机和数据控制状态机的时钟输入带来的问题是整个控制器内部出现两个时钟,这将给后期的综合和时序分析带来不便¨引。这里使用clk―en信号来解决该问题,cll【%在每个SDCLK周期(2(clk
转使能信号。clk∞时序如图3.4所示。个周期)内保持态机的状态翻
m厂]厂]厂]厂]厂]厂]厂]厂]厂]厂]厂]厂]
.――....――....――,―..―......。........――................;..―....――.....:...―.――.―――.―――――、――――..―――.―――――――――――――――.――――――――――――――..―........一【――....――...―――..一
厂――――――――]础1岫…
州Lout:广――――――――]广―――――――――――――]
图3.4clk―en时序
Figure3-4clk―.cntiming厂]
北京T业大学T学硕士学位论文
该模块时钟分频控制原理的Verilog描述如下【19】【20】:
fix―clkl=clk―mode一2"000;//锁定SDCLK为低电平
assignfix―clkh=clk―mode一2"001;//锁定SDCLK为高电平
assignclk―osci=clk―mode一2"010;//输出SDCLK时钟脉冲
assignsdclk_cyc=clk―cnt一{dk_div,lbl};//SDCLK达到一个周期assign
//到达半个周期和一个周期时SDCLK翻转
assignsdclk―rcv=clk―osci&((clk_cnt一{I"00,clk_div})l
//SDCLK分频计数器
always@(posedgeclkorneg仪Igerst_n)
if(!rst._n)
clkcnt<._12’dO;
elsesdclkcyc);if(sdclkcyc&clkosci)
clkcnt<=12’dO:
elseif(cIkosci)
clkcnt<_clkcnt+l屯l:
//SDCLK输出控制
always@(posedgeclkor
if(!rstm
sdclk<{I"01;
elseif(fixclklIfixcu【h)negedgerst_n)
sdclk<=fixclkh;
elseif(sdclk_rev&!sdclk_pause)
sdclk<=一sdclk:
∥输出clk锄信号
always@(posedgeclkor
if(!rstn)
clkell<=1tbO:
elsenegedgerst_n)if(!sdclk&sdclk―rev&!sdclk__pause)
clk―en<-I"01;
clken<=l,bo:
3.3.3命令和回复控制模块
命令和回复控制模块控制CMD线上命令发送和回复接收,其状态机如图3.5所示。命令发送和回复接收共用一个移位寄存器。发送命令时,先将命令加载到该移位寄存器中,然后移位输出至CMD线。接收回复时,CMD线上的回复移入移位寄存器,软件通过读该移位寄存器来得到回复内容。
SD乍控制器的设计
发送命令并接收回复的状态流程f211如下:
图3.5命令控制状态转移图
Figure3-5Commandcontrolstatetransferdiagram
(1)IDLE状态:系统复位后状态机处于IDLE状态,软件写CMDIDX
寄存器后,进入TXCMD状态,开始发送命令内容
TX_CMD状态:将命令开始位、index和argument按SDCLK移位输出至CMD线上,同时CRC7计算电路计算己发送命令内容的CRC值。发送完毕后进入TXCRC状态。
(2)TX―CRC状态:将7比特CRC值按从高位到低位的顺序移位输出至
CMD线,并在CRC发送完毕后继续发送l比特结束位。结束位发送后,若该命令不带回复,则进入WAIT8CYC状态;若带回复,则进入WAITRSP状态。
(”WAIT―RSP状态:控制器监测CMD线上的电平变化,若检测到回复
开始位(2比特O),则进入RXRSP状态;若在指定的时间内未检测到回复开始位,则返回IDLE状态,并生成一个回复超时的错误中断。
三亿文库包含各类专业文献、文学作品欣赏、应用写作文书、外语学习资料、幼儿教育、小学教育、专业论文、基于AHB总线的SDSDHCMMC控制器设计及验证_图文05等内容。 
 如果 WLAN 芯片是基于 AHB 总线进行设计的, 则可以在原来的基础上进行扩展, 只需将 CPU 挂接在 AHB 总线上,便可实现对芯片上各模块的控制。3.2 系统验证 ...  AHB 主 /从 设备接口 ,本文提出了一种新的基于 ARM 的 Soc 通用平台设计...如果总线上存在多个主模块 ,就需要仲裁器来决定如何控制各种主模块对总线的访问...  在系统级芯片设计中,AMBA 总线已经得到广泛的应用,...同时发出地址 A13 和相应控制信号.AHB-Slave 接口...在基于 ARM 处理器内核的 SoC 设计中,已经成为广泛...  AHB 总线通过 DMA 和 DSP,允许在总线上存在一个或多个主控制器。虽然 APB ...本文提出了一种新的基于 ARM 的 Soc 通用平 台设计寄存器总线标准接口, 这种...  基于Verilog HDL语言的CAN总线控制器设计及验证_专业资料 暂无评价|0人阅读|0次下载 基于Verilog HDL语言的CAN总线控制器设计及验证_专业资料。龙源期刊网 http://...  基于AHB总线的SDSDHCMMC控... 70页 5财富值 2011...旨在控制入气中二氧化碳、甲烷和其 他造成“温室效应...(4)依据资料,小芳完成如下实验方案设计: 实验方案 ...  编号: 毕业设计(论文)任务书 课 题: 基于 CAN 总线的汽车 车窗控制 学专 院: 业: 信息与通信学院 电子信息工程 温家欢
信息与通信学院 黎洪松 ...  辽 宁 工 业大 学 工业控制网络 课程设计(论文) 题目: 基于CAN总线3自由度机械手控制器的设计 院(系): (签字) 起止时间:- 本科生...  VerilogHDL代码_AHB总线_master部分_计算机硬件及网络_IT/计算机_专业资料。AHB;总线;主机;代码。 对VerilogHDL时序逻辑电路建模和理解总线控制状态机...

我要回帖

更多关于 microsdhc存储卡 的文章

 

随机推荐