Python intelhex 包

需求

拿到手一款NXP的LPC824-DIP開(kāi)發(fā)板瓦糕,好簡(jiǎn)單喂柒,與我之前的LPC812 Mini Kit一樣簡(jiǎn)單:板載USB/UART轉(zhuǎn)換IC辣卒,甚至使用了轉(zhuǎn)換IC內(nèi)部的LDO做供電拧晕,預(yù)留SWD引腳紊扬。

離開(kāi)NXP之后蜒茄,NXP/Freescale的工程和工具鏈就摸的少了。STM32F072的JLINK-OB不知道是否可以支持LPC824餐屎,或者拿個(gè)FRDM的板載CMSIS-DAP來(lái)試試看檀葛。

bin2hex轉(zhuǎn)換

不過(guò)這么簡(jiǎn)單的MCU,可以采用編譯下載和printf的方式腹缩。我目前用的最多的還是mbed在線編譯器屿聋,它僅支持bin格式。而NXP推薦的FlashMagic只支持intel hex格式藏鹊。而bin2hex的方法雖然有許多種润讥,但是都嫌麻煩。Keil推薦的bin2hex早就落伍了盘寡,gcc的objcopy還需要記錄一大堆參數(shù)象对。

Python intelhex包

忽然想起Python有一個(gè)intelhex包,重來(lái)沒(méi)有用過(guò)宴抚,使用pip安裝了一下:

pip install intelhex

轉(zhuǎn)換下載

安裝完畢后勒魔,在Python\Scripts下可以直接訪問(wèn)幾個(gè)工具腳本:

> dir c:\Python27\Scripts\*hex*.py
 驅(qū)動(dòng)器 C 中的卷是 HP_HDD
 卷的序列號(hào)是 48F7-515A

 c:\Python27\Scripts 的目錄

2017/09/28  14:20             3,825 bin2hex.py
2017/09/28  14:20             4,684 hex2bin.py
2017/09/28  14:20             4,549 hex2dump.py
2017/09/28  14:20             2,857 hexdiff.py
2017/09/28  14:20             3,681 hexinfo.py
2017/09/28  14:20             6,214 hexmerge.py
               6 個(gè)文件         25,810 字節(jié)
               0 個(gè)目錄 210,940,616,704 可用字節(jié)

我們把mbed產(chǎn)生的bin文件轉(zhuǎn)換成hex格式。

allankliu@ALLANKLIU-HP C:\Users\allankliu\Downloads
> bin2hex.py -h
Bin2Hex convertor utility.
Usage:
    python bin2hex.py [options] INFILE [OUTFILE]

Arguments:
    INFILE      name of bin file for processing.
                Use '-' for reading from stdin.

    OUTFILE     name of output file. If omitted then output
                will be writing to stdout.

Options:
    -h, --help              this help message.
    -v, --version           version info.
    --offset=N              offset for loading bin file (default: 0).


allankliu@ALLANKLIU-HP C:\Users\allankliu\Downloads
> bin2hex.py mbed_blinky_LPC_LPC824.bin mbed_blinky_LPC_LPC824.hex

allankliu@ALLANKLIU-HP C:\Users\allankliu\Downloads
> hexinfo.py mbed_blinky_LPC_LPC824.hex
- file: 'mbed_blinky_LPC_LPC824.hex'
  data:
  - { first: 0x00000000, last: 0x00002AFF, length: 0x00002B00 }

我們可以看一下轉(zhuǎn)換后的hex文件菇曲。

allankliu@ALLANKLIU-HP C:\Users\allankliu\Downloads
> hex2dump.py mbed_blinky_LPC_LPC824.hex
0000  00 20 00 10 DD 00 00 00 ED 00 00 00 E5 00 00 00  |. ..............|
0010  00 00 00 00 00 00 00 00 00 00 00 00 51 DD FF EF  |............Q...|
0020  00 00 00 00 00 00 00 00 00 00 00 00 E7 00 00 00  |................|
0030  00 00 00 00 00 00 00 00 E9 00 00 00 EB 00 00 00  |................|
0040  ED 00 00 00 ED 00 00 00 00 00 00 00 ED 00 00 00  |................|
0050  ED 00 00 00 ED 00 00 00 00 00 00 00 ED 00 00 00  |................|
0060  ED 00 00 00 ED 00 00 00 ED 00 00 00 ED 00 00 00  |................|
0070  ED 00 00 00 ED 00 00 00 ED 00 00 00 ED 00 00 00  |................|
0080  ED 00 00 00 ED 00 00 00 ED 00 00 00 ED 00 00 00  |................|
0090  ED 00 00 00 ED 00 00 00 ED 00 00 00 00 00 00 00  |................|
00A0  ED 00 00 00 ED 00 00 00 ED 00 00 00 ED 00 00 00  |................|
00B0  ED 00 00 00 ED 00 00 00 ED 00 00 00 ED 00 00 00  |................|
00C0  05 48 85 46 00 F0 12 FB 00 F0 EE F8 00 F0 86 F8  |.H.F............|
00D0  00 48 00 47 E5 02 00 00 00 20 00 10 04 48 80 47  |.H.G..... ...H.G|
00E0  04 48 00 47 FE E7 FE E7 FE E7 FE E7 FE E7 00 00  |.H.G............|
00F0  39 08 00 00 C1 00 00 00 F8 B5 17 46 0E 46 05 46  |9..........F.F.F|
0100  00 2B 07 D0 10 46 58 43 44 19 E4 1B 20 46 B0 47  |.+...FXCD... F.G|
0110  A5 42 FA D1 28 46 08 38 F8 BD 38 B5 05 46 68 46  |.B..(F.8..8..FhF|
0120  05 70 0C 46 08 68 00 23 01 22 69 46 01 F0 92 FC  |.p.F.h.#."iF....|
0130  00 28 02 D0 00 20 C0 43 38 BD E0 68 40 1C E0 60  |.(... .C8..h@..`|
0140  28 46 38 BD 30 B5 0B 46 01 46 00 20 20 22 01 24  |(F8.0..F.F.  ".$|
0150  09 E0 0D 46 D5 40 9D 42 05 D3 1D 46 95 40 49 1B  |...F.@.B...F.@I.|
0160  25 46 95 40 40 19 15 46 52 1E 00 2D F1 DC 30 BD  |%F.@@..FR..-..0.|
0170  03 46 0B 43 9B 07 03 D0 09 E0 08 C9 12 1F 08 C0  |.F.C............|
0180  04 2A FA D2 03 E0 0B 78 03 70 40 1C 49 1C 52 1E  |.*.....x.p@.I.R.|
0190  F9 D2 70 47 42 1C 01 78 40 1C 00 29 FB D1 80 1A  |..pGB..x@..)....|
01A0  70 47 10 B5 00 22 00 E0 52 1C 83 5C 8C 5C A3 42  |pG..."..R..\.\.B|
01B0  01 D1 00 2B F8 D1 D8 B2 E1 B2 40 1A 10 BD 30 B5  |...+......@...0.|
01C0  05 46 00 20 03 46 00 E0 5B 1C 93 42 05 D2 EC 5C  |.F. .F..[..B...\|
01D0  C8 5C 20 1A 01 D1 00 2C F6 D1 30 BD 70 B5 05 4C  |.\ ....,..0.p..L|
01E0  05 4D 03 E0 20 68 00 19 80 47 24 1D AC 42 F9 D1  |.M.. h...G$..B..|
01F0  70 BD 00 00 94 2A 00 00 98 2A 00 00 02 46 70 B5  |p....*...*...Fp.|
0200  4A 40 D3 0F DB 07 40 00 2D D0 4A 00 2A D0 01 0E  |J@....@.-.J.*...|
...
2900  6F 72 6B 73 70 61 63 65 2F 62 6D 5F 77 72 61 70  |orkspace/bm_wrap|
2910  2F 31 33 38 34 2F 6D 62 65 64 2D 6F 73 2F 74 61  |/1384/mbed-os/ta|
2920  72 67 65 74 73 2F 54 41 52 47 45 54 5F 4E 58 50  |rgets/TARGET_NXP|
2930  2F 54 41 52 47 45 54 5F 4C 50 43 38 32 58 2F 67  |/TARGET_LPC82X/g|
2940  70 69 6F 5F 61 70 69 2E 63 00 00 00 2F 68 6F 6D  |pio_api.c.../hom|
2950  65 2F 61 72 6D 2F 6D 62 65 64 5F 6A 65 6E 6B 69  |e/arm/mbed_jenki|
2960  6E 73 2F 77 6F 72 6B 73 70 61 63 65 2F 62 6D 5F  |ns/workspace/bm_|
2970  77 72 61 70 2F 31 33 38 34 2F 6D 62 65 64 2D 6F  |wrap/1384/mbed-o|
2980  73 2F 42 55 49 4C 44 2F 6D 62 65 64 2F 54 41 52  |s/BUILD/mbed/TAR|
2990  47 45 54 5F 4C 50 43 38 32 34 2F 54 41 52 47 45  |GET_LPC824/TARGE|
29A0  54 5F 4E 58 50 2F 54 41 52 47 45 54 5F 4C 50 43  |T_NXP/TARGET_LPC|
29B0  38 32 58 2F 67 70 69 6F 5F 6F 62 6A 65 63 74 2E  |82X/gpio_object.|
29C0  68 00 00 00 2F 68 6F 6D 65 2F 61 72 6D 2F 6D 62  |h.../home/arm/mb|
29D0  65 64 5F 6A 65 6E 6B 69 6E 73 2F 77 6F 72 6B 73  |ed_jenkins/works|
29E0  70 61 63 65 2F 62 6D 5F 77 72 61 70 2F 31 33 38  |pace/bm_wrap/138|
29F0  34 2F 6D 62 65 64 2D 6F 73 2F 74 61 72 67 65 74  |4/mbed-os/target|
2A00  73 2F 54 41 52 47 45 54 5F 4E 58 50 2F 54 41 52  |s/TARGET_NXP/TAR|
2A10  47 45 54 5F 4C 50 43 38 32 58 2F 70 69 6E 6D 61  |GET_LPC82X/pinma|
2A20  70 2E 63 00 2F 68 6F 6D 65 2F 61 72 6D 2F 6D 62  |p.c./home/arm/mb|
2A30  65 64 5F 6A 65 6E 6B 69 6E 73 2F 77 6F 72 6B 73  |ed_jenkins/works|
2A40  70 61 63 65 2F 62 6D 5F 77 72 61 70 2F 31 33 38  |pace/bm_wrap/138|
2A50  34 2F 6D 62 65 64 2D 6F 73 2F 70 6C 61 74 66 6F  |4/mbed-os/platfo|
2A60  72 6D 2F 6D 62 65 64 5F 63 72 69 74 69 63 61 6C  |rm/mbed_critical|
2A70  2E 63 00 00 98 2A 00 00 C0 00 00 10 68 00 00 00  |.c...*......h...|
2A80  4C 0E 00 00 00 2B 00 00 28 01 00 10 E8 01 00 00  |L....+..(.......|
2A90  5C 0E 00 00 D9 E3 FF FF 00 00 00 00 00 00 00 00  |\...............|
2AA0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
2AB0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
2AC0  00 00 00 00 80 C3 C9 01 00 87 93 03 00 00 00 00  |................|
2AD0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
2AE0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
2AF0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|

話說(shuō)回來(lái)冠绢,覺(jué)得HEX中帶有這么多的源碼字符串有些怪異,可能與mbed平臺(tái)內(nèi)調(diào)試需求有關(guān)聯(lián)常潮。但是最好有個(gè)編譯開(kāi)關(guān)能夠把這些沒(méi)有必要的調(diào)試信息給關(guān)閉弟胀。這在小資源MCU還蠻重要的。

下載測(cè)試

把HEX代碼下載后喊式,一開(kāi)始沒(méi)有任何動(dòng)靜孵户。想想可能是LED的GPIO配置不同,改動(dòng)代碼后岔留,重復(fù)了整合流程夏哭,綠色LED開(kāi)始閃爍,UART也有輸出了献联。好簡(jiǎn)單竖配!

#include "mbed.h"

DigitalOut myled(LED2); // Change LED1 to LED2 on LPC824-DIP board
Serial pc(D1, D2);

int main() {
    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
        pc.printf(".");
        printf("#");
    }
}

改進(jìn)余地

  • Python intelhex不僅提供了命令行工具軟件何址,更重要的是可以實(shí)現(xiàn)批量的程序化定制,比如根據(jù)MCU的UID進(jìn)行部分代碼的加密进胯。
  • LPC系列中用爪,8051/ARM7/Cortex-M3/M4/M0/M0+,無(wú)論哪種內(nèi)核胁镐,都可以直接使用串口的RTS等串口流控線來(lái)控制目標(biāo)MCU的RST/ISP引腳偎血,而且邏輯電平都是負(fù)電平。
  • Python pyserial可以很容易地操控流控引腳盯漂,繼而操控RST/ISP來(lái)控制MCU的工作模式烁巫,可以用于自動(dòng)讀取UID,計(jì)算密鑰宠能,將密鑰hex與原始hex進(jìn)行合并,燒入固件磁餐,啟動(dòng)CRP代碼保護(hù)违崇,直至復(fù)位。
  • 基于這些設(shè)計(jì)诊霹,可以實(shí)現(xiàn)主機(jī)端(包括PC/平板和手機(jī))動(dòng)態(tài)更新MCU固件羞延,在同一硬件上實(shí)現(xiàn)固件的動(dòng)態(tài)功能變化。不過(guò)嵌入式系統(tǒng)往往不具備通用性脾还,即時(shí)代碼更新缺乏業(yè)務(wù)支點(diǎn)和市場(chǎng)需求伴箩。不過(guò)我個(gè)人覺(jué)得可以先拿通用遙控器來(lái)玩玩、試試鄙漏。話說(shuō)嗤谚,好古老的需求。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怔蚌,一起剝皮案震驚了整個(gè)濱河市巩步,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桦踊,老刑警劉巖椅野,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異籍胯,居然都是意外死亡竟闪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門杖狼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炼蛤,“玉大人,你說(shuō)我怎么就攤上這事蝶涩【ㄅ龋” “怎么了赠涮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)暗挑。 經(jīng)常有香客問(wèn)我笋除,道長(zhǎng),這世上最難降的妖魔是什么炸裆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任垃它,我火速辦了婚禮,結(jié)果婚禮上烹看,老公的妹妹穿的比我還像新娘国拇。我一直安慰自己,他們只是感情好惯殊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布酱吝。 她就那樣靜靜地躺著,像睡著了一般土思。 火紅的嫁衣襯著肌膚如雪务热。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天己儒,我揣著相機(jī)與錄音崎岂,去河邊找鬼。 笑死闪湾,一個(gè)胖子當(dāng)著我的面吹牛冲甘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播途样,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼江醇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了何暇?” 一聲冷哼從身側(cè)響起嫁审,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赖晶,沒(méi)想到半個(gè)月后律适,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遏插,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年捂贿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胳嘲。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厂僧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出了牛,到底是詐尸還是另有隱情颜屠,我是刑警寧澤辰妙,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站甫窟,受9級(jí)特大地震影響密浑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粗井,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一尔破、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浇衬,春花似錦懒构、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至醉冤,卻和暖如春秩霍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冤灾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辕近,地道東北人韵吨。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像移宅,于是被迫代替她去往敵國(guó)和親归粉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容