6688经验半月谈

买了6688已经半个月多 。我买到小八的时候,正是6688一改以往的平静,进入一个风起云涌的时刻,或者说是末日的辉煌!(小八还是有“硬”伤的)
首先是6688系列大幅降价,高高在上的价格跌到了一个让普通大众(包括我)都可以接受的地步 。其次,SL456688i参考了国外的修改后,在自己的努力下,让这些修改可以应用在中文5508版下,然后更多的国外网站展现在大家的周围,一下眼界扩展到那么大,简直让人马上都难以适应 。看看以前的论坛,不由得感觉自己仿佛是井底之蛙 。
在这种环境下,以我的本性自然也坐不住了,于是参加到对小八的改造当中,在这个过程中,我看到了许多的国外网站,在感受技术上的差距的同时,也学到了很多的知识,并在实验当中得到宝贵的经验,下面,我就把这些奉献给大家(再不写这个就是学习报告了^_^),它主要来自于看国外高手的讨论,向SL456688i请教的和我自己摸索得来的,是从一个程序员的角度出发,并希望能起到抛砖引玉的作用 。
在正文开始之前,先说一下文件地址和Flash地址的关系 。所谓文件地址就是导出的FULLFW文件的地址,而Flash地址是西门子软件在Flash内部使用的地址,如函数调用和Block地址等都是用的Flash地址 。其表达式如下:
Flash地址 = 1000000H - FULLFW_SIZE文件地址
注:其中FULLFW_SIZE为Flash EEP的大小,6688为600000H 。十六进制一律在后面放H 。
一、关于EEP及相关部分 。
1、EEP的存储结构:
EEP是按块Block存储的 。这个大家应该都看到过一些,比如修改电压的Block67,和线路选择及飞机相关的Block71等 。而EEP由主要分为两部分:EEFULL和EELITE 。EEFULL主要是和机器软件的相关配置有关的内容,而EELITE更多的是和设备信息有关的内容(这些是我的理解) 。从EEP中寻找Block是通过索引的,这样做有很大的好处,会编程的人都知道,链表比数组有更大的灵活性 。EEP也是这样,如果Block的大小和结构发生变化,不会影响到其他的Block 。在EEP中有6个EEFILL区和一个EELITE区,每个是2000H字节 。开始地址分别是0000H,2000H到A000H 。而从C000H到FFFFH是EELITE 。每个区的索引都放在最后面,每条记录12个字节 。数据结构如下:
EEPROM Block Directory Record format:
OffsetSize Description
---------------------------------------------------------
00BYTE Record starting marker [00,F0,FC] 记录标志为00,F0或FC
00= Unused block? 不用的Block
F0= Deleted block?删除的Block
FC= Used block? 当前有效的Block
01BYTE Version. [00..05]
Always zero in LBA_FS & EE_FS blocks. EE_FS在Flash中
Only EELITE blocks that has 04 & 05.
02WORD Size
04DWORDLinear address of data 此处为Flash地址
08WORD ID 为平常说的BlockXX,如Block67
0ABYTE ??? [00,01,02]
Always zero in EEFULL & EELITE blocks.
Always 02 in LBA_FS & EE_FS blocks.
0BBYTE Record ending marker [00,F0,FC,FF]
FF= No more record
注:此资料来自于SL456688i
现举例如下:Block71
FC 01 C8 00 74 F9 FF 00 47 00 00 FC
FC 开始标志,当前有效
01 版本
C8 00文件大小00C8H = 200
74 F9 FF 00Block地址,为Flash地址00FFF974H,转换为文件地址为FFF974H - A00000H = 5FF974
47 00Block ID 0047H ,0047H = 71
00 在EELITE 中为 0

推荐阅读