SD卡初步调试
0赞还是计划不如变化快,本想着简单的在软件平台上先实现SD卡的初步调试。郁闷的是IAR for ARM那 会死活装不上,最怕折腾人的事,惹不起咱还躲不起吗。于是狠狠心软件平台咱就不试了,况且前人写的程序满天飞,一搜一箩筐,没什么挑战性,挑几个顺眼的静 心研究一下也就差不多了。
我的Verilog工程启动 了,在潜心研究SD和SPI协议后,初步调试是 希望通过串口把读出的SD数据上传。于是搬了个串口模块,精心包装定制一番;再写个和SD卡通信的SPI协议控制模块,能收 能发全双工,速率12.5Mb,最大速度的一半。SD模块里除了SPI,当然还得用几个又臭又长的状态机来控制SD的上电初始化以及扇 区读取控制以及以后的简单文件系统的控制。一上来不理清思路状态机写得还挺让人恶心的,想起那会的SDRAM也差不多的样 子,这也只能说是verilog的局限的,灵活性差了点(软硬各有利弊)。对于这样的外设控制,有时还真不一定非得是可编程器件管 用。
初步测试模块划分:
忘提一下,SD接收来的数据要送给串 口模块发出去,这期间的数据交换就都交给FIFO来处理了,还是蛮管用的。
昨晚其实就用EP1C最小系统板子搭个 简单的SD控制电路调试了,郁闷的是没板载串口折腾半天数据发不出来,索性睡个大觉今天的新板子也到了(为逻辑 分析仪量身打造的EP1C),一中午时间立马把板子焊上。
如此一番,调试起来还真是事半功倍。不过还是出了一些问题,目前能够读出物理0扇区的内容,用Winhex比对无误。但 是除了0扇区以外再要读取别的扇区,送完CMD17和扇区号状态机 就等8’hfe等死了,不知道为什么,网上一搜有一样问题的,只是没看到问题答案。不过这期间对整个SD卡的扇区结构什么的还是有更深入认识,问题出现了终究是要被解决的,重要的不是问题本身,是这个寻找 答案的过程!呵呵,继续努力……
后记:问题解决,其实是因为CMD后面跟的arg地址是字节地址,而之前写入地址时特权同学一直把这个地址假想成是扇区数了。如果设置每次读512B数据,那么这个地址只能是以扇区为 单位,即512B的 倍数,如果不是,结果只能是等不到读数据的其实数据8’hfe了。