米葫芦网

因调整电压导致Block67读写失败怎么办

热度:2142℃ 发布时间:2024-07-03 00:16:18
最近有一些朋友因为调整电压导致Block67读取失败,sensorstool不能再操作手机,出现错误“Error:Unable to read Eelite BlockID=67 info"而同时手机不能开机。这种情况,有的朋友没有备份EEP,只能写别人的EEP。很麻烦!其原因主要是当刚刚连接到手机,所有的数字还是0的时候,有的人按了write phone,导致Block67被全部置0。
这是我在第一次发表这篇文章时的观点,因为今天看来,这是错误的。对此我非常惭愧,这是我在没有充分证据的情况下发的,想当然而的观点,所以特地写了一篇修正版,以正视听。
其实这个问题是因为sensorstool的Bug。我在《6688经验半月谈》里曾经说过EEPROM的数据结构和存储。这里再说以下,在EEP里数据是索引存储的,其索引的数据结构如下:
EEPROM Block Directory Record format:
Offset Size  Des cription
------ ----- ----------------------------------------------
00BYTE  Record starting marker [00,F0,FC] 记录标志为00,
F0或FC00= Unused block?  不用的Block
F0= Deleted block? 删除的Block
FC= Used block? 当前有效的Block
01BYTE  Version. [00..05]
Always zero in LBA_FS & EE_FS blocks.
Only EELITE blocks that has 04 & 05.
02WORD  Size
04DWORD Linear 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
在6688中,Block67(43H)是和电压相关的,也就是大家平时所说的电压参数。同时也是Sensortool所修改的Block。它的大小是20个字节。具体含义如下:
Battery status (0043):
- 0000H : BattMin Data1
- 0002H : BattMin Data2
- 0004H : BattMax Data1
- 0006H : BattMax Data2
- 0008H : BattTemp Data1
- 000AH : BattTemp Data2
- 000CH : EnvTemp Data1
- 000EH : EnvTemp Data2
- 0010H : VCXOTemp Data1
- 0012H : VCXOTemp Data2
注:以上资料来自于RizaPN,这个我没有研究过。
而sensortool所使用的Blk文件就是Block的缩写,因为这些数据是和手机硬件相关的,所以Block67存储在EELITE(C000H-FFFFH)中,大家可以打开看看。但是Sensortool有个问题,因为他每次写入新的电压参数时都是把原有Block索引的记录标志字节(Record starting marker )由FC改为F0,既又正在使用改为删除,而新建一条索引来把这个Block放在一个新位置。这样索引(索引表都是放在后面,可参考半月谈)是向上增加,而Block数据是向下增加的。那么总会有这种情况发生,就是最新的位置已到了索引表的位置,那么就会发生冲突。我猜测sensortool是先删除记录,再新建索引表,但这时已发现没有空间来建立Block了,但他并不恢复删除的记录,所以所有的Block67的索引表都被标为F0(删除),所以系统中没有Block67的索引表,所有的工具在读写这个Block时都会发生错误,手机也会。我之前的错误是以为Block的所有字节都被置为0。
解决的办法是非常的简单的:
如果你备份了自己的EEP,那么只须重新写入就可以了。所以我一直强调要备份EEP,最好是低版本的原始EEP,所谓不战而屈人之兵。
如果你没备份自己的EEP,你只需读出EEP,然后找到某一条(因为有很多条)Block67的索引记录,然后把它的头和尾的录标志字节(Record starting marker )由F0为FC即可。寻找的办法是用HEX编辑器打开,如UltraEdit,然后查找430000F0,会找到很多条记录,你因该修改找到的第一条的纪录,也就是最新的纪录(因为索引表是向上增长的),如F00114003EFBFF00430000F0,其中的3EFBFF是Block的实际地址(Flash地址,对应于文件地址是5FFB3E,FFFB3E-A00000)。你需要修改头尾的F0为FC,即FC0114003EFBFF00430000FC就可以了。然后把它写回到手机。
下面是实例图:
此主题相关图片如下:
写了这么多是因为我喜欢知其然也知其所以然。
至于每个手机都有不同的电压参数的问题,做过电子产品的朋友都知道,电子产品都会在某些部位有一个微调电阻、电容或其他,来根据某个批次的元器件特征来校准设备,因为所有的元器件都有一个误差范围,这根据不同的适用范围而不同(比如军品就误差较小),价格也不同。而手机充电也是根据一个A/D转换电路来控制充电的范围,所需要的数字量就从这个Block读取。记得一个朋友说过,在手机出厂前会用一个标准设备(类似电池)来测试这个数字量,并得到一个保守但安全的值。所以我们可以认为自己手机的电压参数在出厂时基本是合适的,如果我们想最大可能的榨取电池的能力(仿佛是DIY的精神),可以在自己的参数上微调,使之范围略宽于标准的3.6V-4.2V,增强待机时间。
最后还是说不推荐使用别人的EEP和电压参数。
图片可到一下网址观看。
http://www.6688ok.com/bbs/dispbbs.asp?boardID=203&RootID=100853&ID=100853
网友评论
评论
发 布

更多软件教程
  • 软件教程推荐
更多+
Greenfoot设置中文的方法

Greenfoot设置中文的方法

Greenfoot是一款简单易用的Java开发环境,该软件界面清爽简约,既可以作为一个开发框使用,也能够作为集成开发环境使用,操作起来十分简单。这款软件支持多种语言,但是默认的语言是英文,因此将该软件下载到电脑上的时候,会发现软件的界面语言是英文版本的,这对于英语基础较差的朋友来说,使用这款软件就会...

07-05

Egret UI Editor修改快捷键的方法

Egret UI Editor修改快捷键的方法

Egret UI Editor是一款开源的2D游戏开发代码编辑软件,其主要功能是针对Egret项目中的Exml皮肤文件进行可视化编辑,功能十分强大。我们在使用这款软件的过程中,可以将一些常用操作设置快捷键,这样就可以简化编程,从而提高代码编辑的工作效率。但是这款软件在日常生活中使用得不多,并且专业性...

07-05

KittenCode新建项目的方法

KittenCode新建项目的方法

KittenCode是一款十分专业的编程软件,该软件给用户提供了可视化的操作界面,支持Python语言的编程开发以及第三方库管理,并且提供了很多实用的工具,功能十分强大。我们在使用这款软件进行编程开发的过程中,最基本、最常做的操作就是新建项目,因此我们很有必要掌握新建项目的方法。但是这款软件的专业性...

07-05

Thonny设置中文的方法

Thonny设置中文的方法

Thonny是一款十分专业的Python编辑软件,该软件界面清爽简单,给用户提供了丰富的编程工具,具备代码补全、语法错误显示等功能,非常的适合新手使用。该软件还支持多种语言,所以在下载这款软件的时候,有时候下载到电脑中的软件是英文版本的,这对于英语基础较差的小伙伴来说,使用这款软件就会变得十分困难,...

07-05

最新软件下载