MPx220使用2GMiniSD卡问题的总结

roxscorpio

普通会员
2006-01-03
545
0
0
关于mpx220使用2G卡的问题,在本论坛已经有人做过了尝试。[其中一个就是我]得到了不怎么满意的结果。基本有几种看法。


1、完全不能使用2G,由硬件设计造成。
2、完全不能使用2G,由软件原因造成。
3、分成两个区以后可以使用超过1G部分。
4、没有必要使用2G的卡[此说法不予分析,毕竟还是有人可能用到的]。

下面简要分析一下以上各种说法。


一、硬件设计问题
有人提出了,mpx220的处理器有10根地址线,所以只支持2^10=1024MB的空间,此问题系硬件设计问题。
这种说法中错了两个地方
1、对于SD卡,不可能有10根地址线,大家看一下SD卡,只有9根引脚。减去2根电源线[VCC和GND],恐怕还得减掉一根同步信号线,剩下6根。所以不可能用到10根地址线,肯定是地址复用,这个很早就有了,现在大量设备为了减少引脚数,也都在使用这个技术。
2、即便是10根地址线,不进行地址复用,也不是1024MB,这是最严重的一个错误。存储卡和硬盘一样,以扇区作为最小存取单位,为了避免重新设计文件系统软件,所以每个扇区都是512Bytes。而地址也是以扇区作为单位的,就是说如果是0-1两个地址,则存储量是1K=512Bytes*2。因此,如果有10根地址线,在不复用的情况下可以处理的存储区域是2*10*512Bytes=512KBytes。
因此此种说法不可信。

二、分区可以使用超过1G部分
因为无法存取超过1G的部分是由于无法找到扇区所致,所以分区不能解决问题。在以下部分将详细说明。

三、软件问题
对于操作系统而言,管理存储设备的方法如下图:

应用程序
------------------------------------------------
文件系统API
------------------------------------------------
硬件驱动[包括磁头调度和读写控制]
------------------------------------------------
硬件

除非使用异常的方法,不然是不可能越层操作的,但是异常的方法可能导致操作系统的禁止。所以可以认为所有的文件操作均由以上层次处理。

对于mpx220可以识别2G卡,这个一点都不惊人,因为这个信息是写在MBR的最后66Bytes的前64Bytes的某个16Bytes中的,只要读出来就可以了。这是属于文件系统API初始化的内容,就是读出文件系统的大小,类型,位置等基本信息。便于选择合适的文件系统管理程序来处理。
但是无法读写超过1G的部分,问题是出在文件系统API、硬件驱动或硬件部分。
如果是出在硬件部分,因为卡本身并没有问题,所以只可能是读卡器。如果读卡器本身不支持超过1G的部分,那么会出现舍弃了某个地址位的情况,并且读卡器并不能为此丢弃返回错误的信息。因为管理1G空间需要21位地址位,管理2G需要22位。那么就是说最高一位被舍弃了。[暂且不考虑一个存储器可不可能是21位。]出现的情况就是往0x200001扇区写入信息,结果被写到了0x000001扇区。[第一个扇区是分区和引导信息,不拿来做例子。]结果就是写多了以后,数据就会被破坏了。但是实际上并没有出现这个情况,实际是提示无法找到指定的扇区。并且一个地址存储器,不可能是21位的,这个学过数电的人应该知道,存储器做成矩阵比较方便。也就是x*8/x*16[依位长定]大小的比较合理。
再就是文件系统API或者硬件驱动的问题,这两类问题属于软件问题。
因而我对mpx220不能使用超过1G部分的看法是,MS的文件系统造成了这样的问题。
来设想一下存储卡的工作方式。
首先、操作系统中的文件系统API准备写入数据。其将数据分割为512bytes的段,并填充满最后一段。
之后、将一段数据连同扇区地址位写入读卡器指定的寄存器。
再之后、执行写操作。
再再之后、等待DMA完成的相应。

如果之间的某一步出现了异常,比如扇区地址位和数据写入寄存器的时候由于某些优化是对于不超过0x200000个扇区而做的,那么就有可能出现无法写入的情况。并且为了这个优化的稳定性,在超过时做出提示。

当前的解决方法,等wm5,看能不能被解决。


本人很多个人观点,不同意的请不要拍我!
[s:15]