LPC ISP

お約束ですが、このページのいかなる記載においても著者は一切の責任をおいません。

三連休なのでトラ技2012年10月号についてきた、LPC1114FN28にプログラムを流し 込んでみる。トラ技にはWinの開発環境しかついていなくてLPCXpressoは最近Mac用の 環境も用意されたがLION以上なので、雪豹の私の環境では使えないためネットで いろいろ調べてみた。(2012/09/15)

こちらのページを 参考にYAGARTOのMacOS用のバイナリと、 lpc21ispの ソースを拾ってきて環境を用意した。lpc2lispは私の環境ではMakefileの "CFLAGS += -Wall -static"をコメントアウトする必要があった。 Macでは/usr/local/にはファイルを置かない事にしているのでMacPortsは使わず すべて自分のホーム以下に用意した。 YAGARTOのサンプルをダウンロードして、makefileにパスを直に追加してビルドしたら あっさりhexが出来上がった。
sh-3.2$ file *
cmsis:        directory
makefile:     ASCII English text, with CRLF line terminators
prj:          directory
src:          directory
test_ram.elf: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linke
d, not stripped
test_ram.hex: ASCII text, with CRLF line terminators
test_ram.map: ASCII assembler program text
3.3Vのチップなので、ストロベリーリナックスの2232HのモジュールでMacにつないで みる。接続はここを 参考にした。ISPはPIOO_1(24)になります。後日追記:1.92のソースを確認したとこ ろLPC1114は入っていました。(2013/07/28)

IMGP1300

トラ技の記事ではフラッシュの書き込み時にRESETとISPを手動で操作していますが、 FTでの接続ではDTR/RTSでプログラムから操作できます。lpc21isp(183)で書き込みを 試したが、以下のような状態でした。
sh-3.2$ lpc21isp -control test_ram.hex /dev/cu.usbserial-003014FDA 115200 12000
lpc21isp version 1.83
File test_ram.hex:
        loaded...
Start Address = 0x10000000
        converted to binary format...
        image size : 5208
Image size : 5208
Synchronizing (ESC to abort). OK
Read bootcode version: 1
7
Read part ID: unknown (0x1A40902B)
Internal error: wrong chip variant 0 (detected device 0)
既にlpc21ispにパッチを充てた人の ページ が見つかったので同じ事をしてみて、リトライ。
sh-3.2$ lpc21isp -control test_ram.hex /dev/cu.usbserial-003014FDA 115200 12000
lpc21isp version 1.83
File test_ram.hex:
        loaded...
Start Address = 0x10000000
        converted to binary format...
        image size : 5208
Image size : 5208
Synchronizing (ESC to abort). OK
Read bootcode version: 1
7
Read part ID: LPC1114FN.../102, 32 kiB ROM / 4 kiB SRAM (0x1A40902B)
Will start programming at Sector 1 if possible, and conclude with Sector 0 to en
sure that checksum is written last.
Erasing sector 0 first, to invalidate checksum. OK 
Program too large; running out of Flash sectors.
と残念な結果だったので、上のページのコードをコンパイルして試してみる。 後日追記:1.92で実行したところ問題なく焼く事が出来ました。パッチのパラメータが 間違えていたのかもしれません。(2013/07/28)
sh-3.2$ lpc21isp -control out/lpc1114_blink_led.hex /dev/cu.usbserial-003014FDA 115200 12000
lpc21isp version 1.83
File out/lpc1114_blink_led.hex:
        loaded...
Start Address = 0x000000C1
        converted to binary format...
        image size : 940
Image size : 940
Synchronizing (ESC to abort). OK
Read bootcode version: 1
7
Read part ID: LPC1114FN.../102, 32 kiB ROM / 4 kiB SRAM (0x1A40902B)
Will start programming at Sector 1 if possible, and conclude with Sector 0 to en
sure that checksum is written last.
Erasing sector 0 first, to invalidate checksum. OK 
Sector 0: ..........................
Download Finished... taking 1 seconds
Now launching the brand new code
書き込みに成功したようなので、一旦電源をOFF/ONしたらPIO1_8(17)で Lチカできました。lpc21ispからリセットしているはずなのですが、うまくいって いないようです。

ずっとチップが机の上に放置されていたので、重い腰を上げて、テスト用のボードを 作ってみました。(2013/07/28)

IMGP2254

Lチカやっても20mA以下なので、231の出力だけでも駆動できるのですが、いろいろ 付けたときに安心なように150mAのレギュレーター付けてあります。

またトラ技の2014年2月号に8ピンARMがおまけになっていたので買ってみた。 これに合わせてyagarto-4.7.1/lpc21isp_192だったのを gcc-arm-none-eabi-4_8-2013q4/lpc21isp_197に替えてみた。

LPC810には LPC810_CodeBaseというオープンソースがありUART/SPI/GPIOなどが サポートされているがいまのところI2Cのサポートがないようだ。

LPC810はISPかJTAGを2本にしたSWDを使用してして、書き込みができる。トラ技に付属 していた基板はSWDを使うようになっていて、lpc21ispでは書き込みが出来ない。 SWDのオープンソースを探してみたところswddudeというコードがgithubにあったが不明 なc++ライブラリを使っていて、ビルドは出来なかった。内部的にはlibftdiで作られて いるようだ。

LPCのライブラリをgccでコンパイルできるようにし たコードがあった。

swddudeのライブラリはsocialhacker.comにあったが、コンパイルできなさそうなので とりあえず必要なダミーを用意してコンパイルしてバイナリを作ってみたが、動いている 気配がない。。。

mbedのi2c slaveが試してみたくて、mbedを初めて使ってみた。ビルドしたファイルを ダウンロードしてlpc21ispで焼けるので、便利かも。 こちらを参考にして、 LPC1114で試したがi2cのslaveで1バイト目のアドレスにはackが返るが2バイト目の データ書き込みにackが返ってこない。なんでかな?(2016/02/26)

I2CSlave2

swddudeは使えるようになった。 swddudeをMac OS Xで使ってみた - Qiita



Copyright (C) 2012 Hiroki Mori All Rights Reserved.