因調(diào)整電壓導致Block67讀寫失敗怎么辦
2024-06-08 15:03:24
供稿:網(wǎng)友
最近有一些朋友因為調(diào)整電壓導致Block67讀取失敗,sensorstool不能再操作手機,出現(xiàn)錯誤“Error:Unable to read Eelite BlockID=67 info"而同時手機不能開機。這種情況,有的朋友沒有備份EEP,只能寫別人的EEP。很麻煩!其原因主要是當剛剛連接到手機,所有的數(shù)字還是0的時候,有的人按了write phone,導致Block67被全部置0。
這是我在第一次發(fā)表這篇文章時的觀點,因為今天看來,這是錯誤的。對此我非常慚愧,這是我在沒有充分證據(jù)的情況下發(fā)的,想當然而的觀點,所以特地寫了一篇修正版,以正視聽。
其實這個問題是因為sensorstool的Bug。我在《6688經(jīng)驗半月談》里曾經(jīng)說過EEPROM的數(shù)據(jù)結構和存儲。這里再說以下,在EEP里數(shù)據(jù)是索引存儲的,其索引的數(shù)據(jù)結構如下:
EEPROM Block Directory Record format:
Offset Size Des cription
------ ----- ----------------------------------------------
00 BYTE Record starting marker [00,F0,FC] 記錄標志為00,
F0或FC00= Unused block? 不用的Block
F0= Deleted block? 刪除的Block
FC= Used block? 當前有效的Block
01 BYTE Version. [00..05]
Always zero in LBA_FS & EE_FS blocks.
Only EELITE blocks that has 04 & 05.
02 Word Size
04 DWORD Linear address of data 此處為Flash地址
08 WORD ID 為平常說的BlockXX,如Block67
0A BYTE ??? [00,01,02]
Always zero in EEFULL & EELITE blocks.
Always 02 in LBA_FS & EE_FS blocks.
0B BYTE Record ending marker [00,F0,FC,FF]
FF= No more record
在6688中,Block67(43H)是和電壓相關的,也就是大家平時所說的電壓參數(shù)。同時也是Sensortool所修改的Block。它的大小是20個字節(jié)。具體含義如下:
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的縮寫,因為這些數(shù)據(jù)是和手機硬件相關的,所以Block67存儲在EELITE(C000H-FFFFH)中,大家可以打開看看。但是Sensortool有個問題,因為他每次寫入新的電壓參數(shù)時都是把原有Block索引的記錄標志字節(jié)(Record starting marker )由FC改為F0,既又正在使用改為刪除,而新建一條索引來把這個Block放在一個新位置。這樣索引(索引表都是放在后面,可參考半月談)是向上增加,而Block數(shù)據(jù)是向下增加的。那么總會有這種情況發(fā)生,就是最新的位置已到了索引表的位置,那么就會發(fā)生沖突。我猜測sensortool是先刪除記錄,再新建索引表,但這時已發(fā)現(xiàn)沒有空間來建立Block了,但他并不恢復刪除的記錄,所以所有的Block67的索引表都被標為F0(刪除),所以系統(tǒng)中沒有Block67的索引表,所有的工具在讀寫這個Block時都會發(fā)生錯誤,手機也會。我之前的錯誤是以為Block的所有字節(jié)都被置為0。
解決的辦法是非常的簡單的:
如果你備份了自己的EEP,那么只須重新寫入就可以了。所以我一直強調(diào)要備份EEP,最好是低版本的原始EEP,所謂不戰(zhàn)而屈人之兵。
如果你沒備份自己的EEP,你只需讀出EEP,然后找到某一條(因為有很多條)Block67的索引記錄,然后把它的頭和尾的錄標志字節(jié)(Record starting marker )由F0為FC即可。尋找的辦法是用HEX編輯器打開,如UltraEdit,然后查找430000F0,會找到很多條記錄,你因該修改找到的第一條的紀錄,也就是最新的紀錄(因為索引表是向上增長的),如F00114003EFBFF00430000F0,其中的3EFBFF是Block的實際地址(Flash地址,對應于文件地址是5FFB3E,F(xiàn)FFB3E-A00000)。你需要修改頭尾的F0為FC,即FC0114003EFBFF00430000FC就可以了。然后把它寫回到手機。
下面是實例圖:
此主題相關圖片如下:
寫了這么多是因為我喜歡知其然也知其所以然。
至于每個手機都有不同的電壓參數(shù)的問題,做過電子產(chǎn)品的朋友都知道,電子產(chǎn)品都會在某些部位有一個微調(diào)電阻、電容或其他,來根據(jù)某個批次的元器件特征來校準設備,因為所有的元器件都有一個誤差范圍,這根據(jù)不同的適用范圍而不同(比如軍品就誤差較小),價格也不同。而手機充電也是根據(jù)一個A/D轉換電路來控制充電的范圍,所需要的數(shù)字量就從這個Block讀取。記得一個朋友說過,在手機出廠前會用一個標準設備(類似電池)來測試這個數(shù)字量,并得到一個保守但安全的值。所以我們可以認為自己手機的電壓參數(shù)在出廠時基本是合適的,如果我們想最大可能的榨取電池的能力(仿佛是DIY的精神),可以在自己的參數(shù)上微調(diào),使之范圍略寬于標準的3.6V-4.2V,增強待機時間。
最后還是說不推薦使用別人的EEP和電壓參數(shù)。
圖片可到一下網(wǎng)址觀看。
http://www.6688ok.com/bbs/dispbbs.asp?boardID=203&RootID=100853&ID=100853