//NC1020闪存分配表

  NC1020有512K闪存,闪存以 4K 为 1 族

  我个人认为,NC1020以 4K 为 1 族 是不科学的,因为总计才 512K 的闪存,每 族就 4K,显然闪存的利用率是很低的

我举个例子,一个 才 200 字节 的文本,下载到 NC1020上,也要占据 4K 的字节,也就是说,不管你的文件有多小,最小

也要占据 4K 的闪存.

  下面我再说说 系统占据闪存的情况:

 

内核:  总计占据                            16 + 16 + 96 + 8 = 136K

      00 页码的 8000-BFFF                  16K

      01-03 页码的 4000-BFFF               3 * 32 = 96K

      C000-DFFF                            8K

      0F 页码的 8000-BFFF                  16K

 

资料存储: 最小占据   4 + 20 + 4 + 4 + 4 = 36K

名片:             4K 闪存                   

行程:             20K 闪存            

重要事项:         4K 闪存       

记事:             4K 闪存  

笔记便笺:         4K 闪存   

 

下面总计:      4 * 8 = 32K

闪存分配表:       4K

各种文件目录列表: 4K

BIN文件列表:     4K

BAS文件列表:     4K

SKI文件列表:     4K

TXT文件列表:     4K

有声读物列表:    4K

字典数据列表:    4K   

 

  所以经过我的计算

  NC1020 实际可利用闪存大小  = 512 - 136 - 36 - 32/2(因为有时候用户并没有下载全部类型文件) = 324K (左右)

 

  下面我们说说NC1020闪存分配表,这个名字是我自己取的,也不管对还是错,反正可以大概描述就可以了,闪存分配表如下所示:

注意,闪存分配表的位置不是固定的,下面只是我机子上某时刻闪存分配表的位置.

  为了方便系统管理 闪存,知道闪存的利用情况,方便系统分配闪存,NC1020的闪存里有一个表,从这个表就可以知道NC1020

全部闪存的分配情况,比如 哪个页码已经被利用了,是什么文件等,下面我们就来分析一下:

  首先大家看到的是这样的数据:

 7000: 57 51 58 46 6C 61 73 68

 7008: 53 58 AA FF 80 00 FF FF

 这些数据在每个表都是一样的,可能 是 标志,大家可以不管.

但是我们一般就是通过查找这16个字节来定位该表的位置,因为该表的位置是经常变的,所以我们要找到这张表

目前只能通过查找的方法,但是,实际上系统不是通过查找方法找到该表的,具体什么方法,目前我也不明确.

 

然后就是这样的数据:

  7010: FF 5F FF 01 FF 5F FF 01

  7018: FF 5F FF 01 FF 5F FF 01

  ...

  7088:FF 5F FF 01 FF 5F FF 01

  ...

 

  这里系统是以 4K为 1族,那么在闪存分配表中,是以 4 个字节代表 1族的,即是这样的:

  7010-7013: FF 5F FF 01    表示00 页码 4000-4FFF

  7014-7017: FF 5F FF 01    表示00 页码 5000-5FFF

  ....

  7090-7093: ?? ?? ?? ??   表示 04 页码 4000-4FFF

  ....

  7208-720B: FF 5F FF 01   表示0F 页码  A000-AFFF

  720C-720F: FF 5F FF 01   表示 0F 页码 B000-BFFF

 

  在分配表里,这四个字节的内容是有意义的,具体如下:

  FF 5F FF 01: 表示该 4K 闪存位置被 内核 占用

  FF 5F FF 03: 表示该 4K 闪存位置被 闪存分配表 占用

  FF FF FF FF: 表示该 4K 闪存位置 没有被占用,即是空闲 的闪存

  00 5E 00 06: 表示该 4K 闪存位置被 根目录表 占用

  XX 5E 00 04: 表示该 4K 闪存位置被  子目录表 占用

 

  XX 5E YY C2: 表示 该 4N K (N=1,2,3,...)闪存被一般文件占用,包括 BIN文件,BAS,SKI等

  XX 5E YY 18: 表示 该 4N K (N=1,2,3,...)闪存被 重要事项 占用

  XX 5E YY 0C: 表示 该 4N K (N=1,2,3,...)闪存被 记事 占用

  XX 5E YY 10: 表示 该 4N K (N=1,2,3,...)闪存被 笔记便笺 占用

  XX 5E YY 0A: 表示 该 4N K (N=1,2,3,...)闪存被 行程 占用

  XX 5E YY 08: 表示 该 4N K (N=1,2,3,...)闪存被 名片 占用

 

  这里 参数 YY 表示文件的分块数,每块是4K,因为若文件为 16K,那么需要 16个字节来标志,但由于文件在 闪存中的

存储不一定是线形的,所以需要 YY 来标志,YY从 00 开始,然后是 01,02,03,04等,我们看下图:

   这里我知道 XX 5E YY 0A,表示 被 行程 占用,我们通过 资料管理 得知,行程 占 5%,所以是 5 * 4 = 20K,那么这里就需要YY

了,我们看 最开始 06 5E 00 0A,代表文件最开始的 4K,然后就是 06 5E 01 0A,代表下一个 4K,依次类推.

 

  这里有还有个参数XX,作用我们先不说,我们还是先分析下 根目录表 的结构,如图:

  根目录表一般是在04 页码的 地址 5000开始,从偏移#$20开始就是正式的内容

  根目录下有子目录,例如 应用程序,个人文档等,通过根目录,我们可以找到 子目录在闪存中的位置,子目录的信息等

我们就以上图的总目录表来举例:

  5020: C0 说明子目录有效, 00 说明该子目录已经无效

  5021: FF 说明该子目录有效  F7 说明该子目录为系统目录,不可以删除,比如 个人文档 目录

  5022-5031:  子目录名字   在上图中,子目录名 为 "个人文档",最大子目录名 为8个汉字,如果少于8个汉字,后面补 20

  5032: 子目录建立的 年   79: 2002年    7A: 2003年 ,依次类推

  5033: 子目录建立的 月   00: 1月   01: 2月 ....

  5034: 子目录建立的 日   00: 1日   01: 2日 ....

  5035-5037: FF FF FF   没有发现有什么作用,可能是扩展功能用的

  5038-503A: 一共 3个字节, 是标志子目录的大小的,一般就是 00 10 00,如果是8K,就是 00 20 00

  503B: 这里就是最重要的了,就是 上面的参数   XX

  这里我重点讲下 这里的 XX,通过XX,我们就能通过 闪存分配表 找到该子目录在 闪存中的位置

  由于 :

  XX 5E 00 04: 表示该 4K 闪存位置被  子目录表 占用

  在上图中,XX= 01 那么我们就只要在 闪存分配表里 找 01 5E 00 04 就可以了,如下图:

  我们在地址 7090 发现了,计算一下,就知道是在 04页码的地址 4000-4FFF

 

  我们再来分析下 子目录表的 结构,如下图:

  这里我们以 应用程序 这个子目录来分析,通过 这个子目录,我们可以知道如下信息:

  1.BIN 文件的大小

  2.文件建立 年月日

  3.文件在闪存中的 位置

  4.文件名字

  B020-B021: C8 DF 代表该BIN文件有效  08 DF 代表该 BIN文件已经无效

  B022-B031: BIN文件名,最大支持 6个汉字,后面一定要加 .bin

  B032:  BIN文件建立 年份  79: 2002, 7A: 2003, 7B: 2004.....

  B033:  BIN文件建立 月    00: 1月  01: 2月......

  B034:  BIN文件建立 日    00: 1日  01: 2日.......

  B035-B037: FF FF FF     不知道有什么用

  B038-B03A: BIN文件大小,这里注意的是 这里不是 BIN实际大小,而是 4K 的整数倍

             00 10: 4K

             00 20: 8K

             但是如果是 01 20,系统就认为是 12K哦

  B03B: XX 的值,这里是 04,那么我们只要在闪存分配表里 找  04 5E 00 C2,就能找到 该 BIN文件在闪存中位置

 我们计算一下,就知道该 BIN的位置了,大家还要注意这时的 YY 的值,是不是 00 01 02 03 04 05

那么说明该 BIN 有 6* 4K= 24K