一、前言
最近在一个工程中需要读取存放在SD卡中的图片数据,在格式化了SD卡之后,我把.bin
格式的图片数据使用读卡器移动到了SD卡中。然后将读取SD卡的程序的bit
流下载进了FPGA中,之前是可以正常读取数据的,可是这次我用ILA
监测读取的数据时,发现读取的数据全都是0,但是一些标志信号如读取开始、读取有效等都是正确的,说明读取动作是没有问题的。
于是我就思考为什么会出现这种情况?最后发现是代码中设置的要读取的文件的物理扇区地址不对,可能是因为格式化之后再次将图片数据拷贝到SD卡时,物理扇区地址发生了变化。使用FPGA读取SD卡中的数据时,必须设置正确的物理扇区地址,否则读取会出错,所以需要查看SD卡文件的正确的物理扇区地址,可以使用一个叫winhex
的软件。下面就简单的介绍一下如何使用该软件查看。
二、查看文件的物理扇区地址
工具—打开磁盘—选择SD卡所在的磁盘(如下面红框)—确定!!!
由下面两张图可以看出,引导扇区的逻辑扇区地址是0,物理扇区地址时8192;其他文件的物理扇区地址
=逻辑扇区地址+引导扇区的物理地址
。如98560=90368+8192
。
三、查看文件内容
双击.bin
文件,即可查看文件中的数据。
四、上板验证
上图是设置物理扇区地址的代码,在其他地方switch
被赋值成了2'b11’
,所以此处读取数据的起始物理扇区地址是98560,从下面的波形图中也可以看出起始地址就是98560。
读取出的第一个有效数据是6B4D(十六进制)
,这和第三部分红框里偏移地址为0和1处的数据是一致的。因为代码里一次读取16位数据,所以这里一次会读取出偏移地址为0和1两个地址处的数据。