原创 NIOS2下的SDHC调试

2010-7-21 21:49 3480 8 8 分类: FPGA/CPLD

NIOS2下的SDHC调试


         本想自己做个简单易用的SPI控制器IPcore挂在NIOS2处理器上,整理半天却发现组件库里有3wire SPI外设,看看软件说明书配置一下也是很easy的,于是放弃了自己DIY组件的打算。


         这两天调试了一下,之前用SF-EP1C板调试过2G以下的SD卡。这下面对SDHC卡,由于之前的经验,配合官方又臭又长的2.0的规格书(话说回来,最终帮大忙的还是这个spec,还是很享受那句话“忠于原文”),今天把SDHC的底层驱动函数稍微都整理好了,过阵子可以交给同事继续软件开发工作了。


         这个SDHC的调试过程还有那么些讲究,这里特权同学也啰嗦一下,也许能给读者您带来一点灵感。


1.  通常在调试情况下,如果发给SDHC卡发送CMD0命令 ,SDHC一般都会回到IDLE。但是特权发现有些时候不可以,那么这时候要是不重新上下电,很可能你会耗费大量时间郁闷在某阶段调试程序怎么老是不通。所以特权同学刚开始调试时的做法很简单,给FPGA的配置芯片(同时烧录FPGA配置数据和软件程序的存储器)烧录软件调试对应的硬件FPGA配置文件以及一个对与SDHC接口的SPI总线不做任何处理(初始化为高电平)的软件程序。然后每次运行调试软件时重新上一次电。这样保证万无一失,绝不会死在SDHC不回IDLE的窘境下。


2.  说点实在的,上电初始化的过程依次需要发送以下指令和回复:


CMD0—R1                 sdhc_write_cmd(0,0);—0x01


CMD8—R7                 sdhc_write_cmd(8,0x1aa);—0x01000001aa


CMD58—R3               sdhc_write_cmd(58,0);—0x0100ff8000


ACMD41—R1            sdhc_write_cmd(55,0);--0x01


                                       sdhc_write_cmd(41,0x40000000);--0x00


CMD58—R3               sdhc_write_cmd(58,0);—0x01c0ff8000


         其中,例如sdhc_write_cmd(58,0,0x95); 58表示index,0表示argument。具体涵义准备深究的人肯定都明白了。


 


         最后,发两个图片作证,哈哈!


         读取DBR扇区数据:



 


往某一扇区写入数据:




 



         说实话,特权同学并不愿意很深入去做软件。不过做一些底层的驱动工作,完成一些基本的时序接口的设计也算是硬件工程师分内的工作。一点不懂软件的硬件工程师不是一个合格的硬件工程师,至少他将来很难成为一个称职的系统工程师。所以,在年轻的时候,苦活脏活累活都是应该好好去做的……


 


 

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条