SD在fat16读取数据

本文介绍了如何使用SPI模式与SD卡交互,完成FAT16文件系统的读取。首先介绍了SD卡初始化过程,然后详细讲解了如何读取第一扇区获取引导扇区地址,并解析引导扇区获取FAT表、FDT等关键信息。通过搜索FDT找到指定文件,最后根据簇号和簇转换公式读取文件数据。
摘要由CSDN通过智能技术生成
C

 

前段时间用FPGA上的NIOS写了个贪吃蛇的程序,由于上次在论坛上写了好久,结果保存的时候提示我说提交错误,后来就贴了几张图片上去了,这几天弄了个俄罗斯方块的程序和SD卡读txt文件的程序,在这里和大家交流一下。

大家都知道SD卡有两种模式,SD总线模式和SPI总线模式,由于以前用过SPI总线,在这里就利用SPI总线来完成SD卡的读取。

大家知道在SD卡上电的时候会自动进入SD总线模式,这时要进入SPI模式首先要给SD卡发送74个时钟完成同步,然后发送CMD0命令,这时候返回的应该是0x01,如果是相机上的SD卡不用发送CMD1,CMD1是对另外一种类型卡需要的。然后接着给SD卡发送CMD55+ACMD41,必须注意的是在发ACMD41之前必须发送CMD55,因为CMD55表示下一个命令时ACMD命令,这个时候不一定马上返回0x00,如果返回是0x01,则不断循环发送CMD55和ACMD41直到接收到0x00,这个时候表明初始化已经完成了,就可以开始进行数据的读写了,由于我这里只是读数据,所以就没有关于写方面的操作。

网上有很多关于fat16文件系统中读写的说明,我也参照了一下,结果发现大部分网站上都是一样的,并且按照它上面的方法读不出来,真是坑爹,到处抄别人的程序结果还抄错了,希望以后这些作者不要害人了。

关于fat16方面的知识这里就不说了,我只说在我SD卡读取中是怎么读出我的数据的,首先读取第一扇区的数据,这里的第一扇区是物理上的第一扇区,用winhex打开硬盘时应该选择物理方式打开,这样子看到的就是物理地址上的内容。

读出来的数据应该是最后两个字节为55,AA,然后读取偏移量为0x01c6开始的四个字节,这里需要注意的是先读出来的数据是低位的,这四个字节表示的是引导扇区的扇区地址,然后给SD卡发送命令读取引导扇区的512个字节,这里需要注意的是在2G以内的SD中,用SD卡发送命令时发送的应该是扇区号*512(我设置的块的长度是512),因为SD卡中发送的地址是实际的地址不是扇区号,引导扇区中有很多的信息,有每个簇多少个扇区,每个FAT表多少个扇区等等,大家可以参照fat16格式,上面都有,这里面有一些重要信息,在我的程序里面都有,下面贴一段程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值