错误观点:认为芯片厂家按1G = 1000MB, 1MB = 1000KB
正确观点:实际上,芯片厂家和Windows一样,都是按照1G=1024MB, 1MB=1024KB
如何计算闪存的容量?要了解这个问题,我要先介绍一下闪存的实际结构,一个闪存的内部有多个块(Block)组成,每个块有是由多个页组成,为什么会这样?我们知道,在电脑中处理的都是二进制数据,只有0和1组成,同样,电脑要保存数据也是用二进制格式,在通常的SDRAM中,最小的访问单元是一个字节,而且可以写入任何的数据。但是闪存因为结构和工艺的原因,最小的访问单元是页,而且不能写入任意的数据,只能把1写成0,而不能把0写成1,所以,在写闪存之前,都要先进行擦除操作,也就是先把闪存里面的内容全部变为1,然后再进行写操作,把应该为0的位写入。擦除操作的最小单位是块,即每次最少都要擦除一个块。
以1GB的闪存K9K8G08为例子:

如果想进一步了解,可以下载数据手册:
http://www.samsung.com/Products/ ... 9xxg08uxa_rev11.pdf
1Page = 2KB
1Block = 64 Page
K9K8G08一共有8192个Block,那么它的总容量就是:
8192 x 64 x 2KB = 1048576 KB
1048576 / (1024 *1024) = 1GB
正好是1GB!!!那为什么所有的闪存设备实际都没有1GB?? 原因有以下几个:
1. 坏块(Bad Block)
因为生产工艺的问题,要保证所有存储单元都没有损坏,芯片厂家的报废率是相当大的,所以闪存的生产厂家通常只会把良率控制在一个可以接受的范围内,通常是2%,也就是说,对于K9K8G08,共有8192个Block,星空体育平台只保证最少有8032个Block是可用的,你们手上的闪存可能有0—160个坏块(0--20MB),而这只是芯片出厂时的规格,随着使用时间的增加,坏块可能不断地增加。

2. 固件占用
现在的MP3大都要使用一部分空间来保存固件/字库,通常在4MB—16MB之间。
3. 为坏块替换而保留的空间
正因为坏块的存在,而且有可能在使用中增加,所以系统需要预留一些块用来替换已经损坏的块,通常是没128MB保留6个块。
所以,1GB的闪存你看到998MB,表明系统+坏块占用1024-998 = 26MB,如果只有970MB,嘿嘿,1024-970 = 54MB,如果更少,惨了,可能碰上了二手回收闪存.......