2009/10/21

Intel Hex File -- Part 1

這二天因為工作上的需要,所以在研究Intel Hex File 的格式:
這邊是我下載來看的PDF和wiki
http://pages.interlog.com/~speff/usefulinfo/Hexfrmt.pdf
http://en.wikipedia.org/wiki/Intel_HEX
以下是從PDF 中整理出來,不同bit support的record 類型:

  • Data Record (8-, 16-, or 32-bit formats)

  • End of File Record (8-, 16-, or 32-bit formats)

  • Extended Segment Address Record (16- or 32-bit formats)

  • Start Segment Address Record (16- or 32-bit formats)

  • Extended Linear Address Record (32-bit format only)

  • Start Linear Address Record (32-bit format only



先來談General Record Format:
這是個sample:
:01000000AA55

其中:
::record mark, 不管這本記錄的用途為何,都必定用這個符號開頭。
01:RECLEN, 用來指定後面的Data/Info 長度。上限值是FF,也就是後續的data 不得超過255的長度限制。
0000:OFFSET,只在data record中有用。如果這個field 是無效的話,必須指定"0000"才行。
00:RECTYP,也是就record type, 以用表記data 的類型。
AA:data, 如同前面reclen 所說的,長度上限為255。
55:CHKSUM,也就是check sum。把除了record mark以外的字元,二二相加後進行二的補數運算。
wiki 上的SAMPLE:03 + 00 + 30 + 00 + 02 + 33 + 7A = E2 => chksum=1E


類型的種類如下:
'00' Data Record:一般的資料
'01' End of File Record:檔案的結尾,有點像EOF。sample::00000001FF
'02' Extended Segment Address Record:請先參考PDF
'03' Start Segment Address Record:請先參考PDF
'04' Extended Linear Address Record:表示後面還有資料。就我參考openICE的做法,似乎是用在當OFFSET滿了(FFFF)的時候,用來告知說接續重新開始算位址用的。
'05' Start Linear Address Record:請先參考PDF

其實這次是為了讓openICE 能去大量寫入記憶體中的資料才去研究的,感覺蠻有趣的
目前我用到的record type只有00,01和04而已,02,03與05就等研究後再PO上來補充囉~
這次寫的py也是for 這個case only, 下次也要改成比較通用才是 :)

沒有留言: