SD在fat16读取数据

2025-04-01

C

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

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

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

fat16文件系统_文件系统FAT_fat16文件系统

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

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

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

下一篇:没有了
上一篇:使用busybox制作根文件系统
相关文章
返回顶部小火箭