部品入れから発掘したDIP28のArmマイコン:LPC1114FN28を久しぶりに動かした.
過去にやったことなどを思い出しながら作業.
これはその記録.
IchigoJamは11歳.そしてLPC1114FN28を発掘
あのIchigoJam
はもう11歳になったらしい.
さらにNXPのFRDM-MCXA153にも対応したというニュース!
それからさらに,先日ラボの引越しでDIP28ピンパッケージのArmマイコン:LPC114FN28が発掘されたばかり.
mbedがないから🦑できない
そんなこんなで懐かしいこのチップにファームを書き込んで,久しぶりにIchigoJamをさわってみようと思ったけど,もうmbed.orgのオンライン・コンパイラは使えなくなってしまったので,以前のように気軽にイカ醤油ポッポ焼きできなくなってしまった( i꒳i )
ちなみに「イカ醤油ポッポ焼き」の本名は「ISP = In System Programming」.LPC1114が持っているフラッシュ・メモリ書き込みの機能を指す言葉.
残された手段
もっとも簡単な方法
もちろんデバッグ・インターフェースを使って開発ツールから書き込むことはできる.たとえばmbed LPC1114FN28のような基板があれば,USBに接続して,ストレージデバイスとして現れたそれにドラッグ・アンド・ドロップすればOKなんだけど,これを読んで「久しぶりに自分もやってみよう」と考えた人がもし居たとしても,このmbedがなければ試せない.
(「もう買えないし」って書こうかと思って調べてみたら.. まだ買えるっぽい!(2025年4月5日現在))
でもISPを使えば当別なハードウェアは不要で,USB↔︎シリアル変換器さえあれば書き込みができる.FlashMagicやlpc21ispというこの機能をサポートしているアプリケーションがあった.
FlashMagic
当時よく使われた「FlashMagic」ってアプリがあったんだけど,もうとっくにメンテされてないみたいで,Mac用の最後のバージョンはダウンロードしてきても動かなかった (´・ω・`)
lpc21isp
そんなわけで最後の望み.lpc21ispを試す.こちらももう更新は止まってるみたい.でも昔のコードは少しの変更で問題なく動いた (ところでこのページ,なぜか自分のアイコンが出てるではないか.このころプルリク出したりしてたのを完全に忘れてた).
今回の変更はフォークしたリポジトリが自分のアカウントにそのまま残ってたので,その中に反映させておいた(ついでにプルリクも出しといた.どうなるかわからんけど).
このコードのビルドは,上記のリポジトリをクローンするかダウンロードしてmake clean; make
するだけ.なーんも面倒なことはない.
alice:~/dev/lpc21isp % make clean; make
rm -f adprog.o lpcprog.o lpcterm.o lpc21isp
gcc -Wall -D__APPLE__ -c -o adprog.o adprog.c
gcc -Wall -D__APPLE__ -c -o lpcprog.o lpcprog.c
gcc -Wall -D__APPLE__ -c -o lpcterm.o lpcterm.c
gcc -Wall -D__APPLE__ -o lpc21isp lpc21isp.c adprog.o lpcprog.o lpcterm.o
alice:~/dev/lpc21isp % ls
adprog.c lgpl-3.0.txt lpc21isp.h lpcprog.h lpcterm.o StdAfx.h
adprog.h lpc21isp lpcprog.c lpcprog.o Makefile
adprog.o lpc21isp.c lpcprog.dsp lpcterm.c Makefile.vc
gpl.txt lpc21isp.cbp lpcprog.dsw lpcterm.h README
ハードウェア
用意するもの
- ブレッドボード
- USB↔︎シリアル変換のケーブル.今回は部屋に転がってたコレを使う → FTDI C232HD-DDHSP-0
- ジャンパ線
- 抵抗数百Ω〜1kΩぐらいのを1個 (オプション)
- LED 1個 (オプション)
接続
MacとLPC1114の接続はブレッドボードとUSB↔︎シリアル変換のケーブル:FTDI C232HD-DDHSP-0を使うとこんな感じになる.
警告
USB↔︎シリアル変換のケーブルには3.3V対応品を使うこと.同様の製品で電源と信号に5Vが出るものがあります.信号は5Vでも構いませんが(LPC1114は5Vトレラント入力なので),電源に5Vを入れるとチップがダメになる可能性大です.
図にはいい感じに書くことができなかったので省略したけど,LPC1114の3.3V電源(pin21)とGND(pin22)は,ピンのすぐそばで100nF程度のコンデンサを入れておきましょう.
USB↔︎シリアル変換ケーブル信号は色分けされていて,それぞれに電源や信号が割り当てられています (下の図はデータシートから抜粋).
緑と灰色(図では黄土色)の線は,lpc21ispを使ってのフラッシュ・メモリへの書き込みを行うときだけに使うもの.
でもこの2本の線は絶対必要なわけではなくて,無くてもフラッシュの書き込みは可能です(後述).
LPC1114のISPモード
LPC1114FN28のpin23はリセット
.pin24はPIO0_1
というピンになっていて,このPIO0_1
は特別な機能を持っています.
リセットを解除(pin23がLOWからHIGHに変化)する時にPIO0_1
がLOWであると,LPC1114は内部ROMから立ち上がり「ISPモード」に入ります.これはシリアル・インターフェース経由で内部フラッシュメモリにアクセスするための特別なモード.
リセット
とPIO0_1
ピンにボタン・スイッチをつけておいて手動でこの手順を行ってもいいのですが,書き込みのたびに操作するのは面倒.なので書き込みソフトからこれをやってもらいます.
灰色の線はリセット(pin23)
,緑はPIO0_1(pin24)
に接続しておきます.
一旦フラッシュへの書き込みが済んだら,あとは電源の再投入やリセットのたびに内部フラッシュに書き込まれたコードが実行されるようになります.ただし電源投入直後やリセット解除時のPIO0_1
は,非接続状態かまたはHIGHになるようにしておく必要があります.
書き込む
LPC1114に書き込むIchigoJamのファームウェアはこのページから入手できます.
「ver1.4.3」のリンクをクリックするとichigojam-1.4.3.zip
ががダウンロードされます.
このzipを解凍すると「ichigojam-jp-ntsc-jpkbd.bin」や「ichigojam-jp-ntsc-uskbd.bin」のファイルが出てきます.たぶんどっちでも問題ないはずですが,私はもとからUSキーボード・ユーザだし,それっぽい名前のファイルがあるのでそれを書き込んでみます.
さっきmakeしたアプリケーションを下のようなコマンドで動かします.
./lpc21isp -control -bin /Users/tedd/Downloads/ichigojam-1.4.3/ichigojam-jp-ntsc-uskbd.bin /dev/tty.usbserial-FTUMFUSM 115200 48000
このコマンドは..
- 最初はもちろん,アプリケーションの名前.
lpc21isp
をビルドしたディレクトリ内でコマンドを打っているので,最初に./
をつけています.(カレント・ディレクトリにパスが通っていれば./
は必要ありません) - 次の-controlはリセットとISPモードに入れるためのピンの制御を行う指定
- 次の-binは,それに続く文字列が書き込むデータ・ファイルへのパスで,それがbinフォーマットであることを示す.このファイル・パスは手で打ち込む必要はなく,書き込みたいファイルをターミナルソフトのウィンドウにドラッグ・アンド・ドロップすれば入力できます
- その次は書き込むデバイスを接続したシリアルポートの指定.WindowsならCOM3のようなポートの指定になるけど,Macの場合は/dev/tty.usb*のようなスペシャル・ファイルとして見える.(これはあらかじめ
ls /dev/tty.usb*
のようなコマンドを実行して確認しておきます) - さらに次はボーレート設定.これは9600,19200,38400や57600でも構いません(LPC1114はISPの際のボーレートを自動認識する).でも書き込みは早く終わってくれる方がうれしいから一番高いボーレートを設定
- 最後はLPC1114のクロック周波数を指定
コマンド実行後に「Download Finished... taking 〇〇 seconds」のような表示が出れば完了です.下の画像は,lpc21ispのビルド→シリアルポートの確認,lpc21isp実行を行って完了した様子.
IchigoJamの動作確認
ターミナルソフトの設定
そのあとはターミナルソフトを開いて,先ほどのシリアルポートを指定して,ボーレートを115200に.さらにローカル・エコーを有効にして接続すれば,IchigoJamが使えます.
参考としてSerialTools.appとCoolTerm 2.3.0を使用した場合の設定を載せておきます.
SerialTools.appで使う
SerialTools.appはAppleのApp storeに登録されているアプリケーションなのでインストールが簡単です.
注意:
SerialTools.appを使うときには,フラッシュ書き込み時に使った緑と灰色の線を外しておきましょう.
接続したままだとリセットがかかったままの状態となって動きません.
緑と灰色の線はフラッシュ書き込みにだけ必要なものでした.なのでこれ以降は外したままでOKです.
上記のリンクからインストールしてアプリケーションを開くと次のようなウィンドウが開きます.2箇所を設定して(フラッシュ書き込み時に使った値と同じ)「Connect」ボタンを押します.
この状態では何も表示されませんが,reset
コマンドを打つとLPC1114にリセットがかかり,IchigoJamが再起動されます.
CoolTerm 2.3.0で使う
CoolTermはApp storeに登録されてないアプリケーションで,作者の配布ページからダウンロードしてきます.
このアプリケーションを最初に開くと警告メッセージが出て起動することができません.完了ボタンを押して一旦閉じます.
このあとで,Macの「システム設定.app」を開き,「プライバシーとセキュリティ」項目のアプリケーション実行許可を設定します(もしこの設定を行うことが不安な場合は,上記の別のアプリを使いましょう).
アプリケーション実行許可の設定後は,問題なく開くことができます.
開いたウィンドウ上部のOptionsボタンを押して,下図のように設定を行いましょう.
上図の下部にあるDTR Off
とRTS Off
のチェックは必須ではありませんが,両方ともデフォルト状態のOn
になっていると,リセット
とPIO0_1
がLOWのままになってしまいます.USB↔︎シリアル変換のケーブルを繋いだままにしているなら,この設定をしないと動きません.
動かしてみる
次のようなコードを動かせば,Hello, world!
を10回表示して終了します.
10 for i=0 to 9
20 print "Hello, world!"
30 next
無事に動いたら,めでたしめでたし( ´ ▽ ` )ノ
接続しておいたLEDは次のようなコードで点滅させることができます.
10 print "Hello, LED blinker!"
20 for i=0 to 10
30 led i%2
40 wait 6
50 next
このあとは..
次回以降はファームウェアの書き込みは必要ありません.そのため,ケーブルも4本だけ接続すればOKです.
これで簡単手軽なミニマムなIchigoJam環境の完成です.
そうそう.FRDM-MCXA153にポートされたIchigoJamも動かしてみたので,これもそのうち書いてみることにしよう😃
LPC1114FN28,10年の時を経て🦑 © 2024 by Tedd OKANO is licensed under CC BY 4.0