转特权:NIOS2下的SDHC调试

 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扇区数据:

 

 

往某一扇区写入数据:

 

 

 

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

转载于:https://www.cnblogs.com/GL-BBL/archive/2012/08/18/2645651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值