2016年10月26日水曜日

Raspberry Pi + LPC1114FN28

Raspberry Pi 2 Model BとLPC1114FN28をつないでみました。

存在感を放つLPC1114FN28 :-)

■追記 11月13日■

デスクトップで使っている場合には問題なかったのですが、ssh経由でターミナルからログインしてつかっているとシリアルターミナルが /dev/ttyAM0 が有効になってしまうためlpc21ispが動いてくれません。そのための手順を加筆しました。

■追記ここまで■


ユニバーサル基板だと面倒なのでElecrowに基板発注したんですが、いやー、スルーホール部品多いとめんどくさいです。ほんの1-2年前まで「表面実装ばかりになってこれからどうすれば良いのかorz」なんて言ってたのにね。

…今、これを書いていて、「ブレッドボードでいいじゃん」と気が付きましたがorz

でも、このぐらいの基板なら一発で動いちゃいますから、今時のCADとかPCB業者って凄いですね。ああ塩化第二鉄のニオイが懐かしい。インスタントレタリングとかレトラテープでパターンを書いたもんさ(遠い目

さて。

RPi + LPC1114でググってみるとRPiにつないだUSBシリアルなどから書き込みをしたり、shellでRESET/ISPを操作している例が多いのですが、最新版のlpc21ispにはgpioでRESET/ISPを制御する機能があるので、これを使わない手はありません。

LPC1114FN28のDP23とRPiのDP24, DP24とGPIO23, DP16とRxD, DP15とTxDを接続します。あとは電源VccとGnd、何もないと寂しいのでDP14に赤色LEDと抵抗(とりあえず1kΩ)をつなぎます。

書き込みには前述の通りlpc21ispを使います。ただ、apt-getで入れるとgpiorst / gpioispのコントロール機能が有効にならないのでgithubから落としてビルドします。

と言っても、
cd
git clone https://github.com/capiman/lpc21isp.git
cd lpc21isp
make
sudo cp lpc21isp /usr/local/bin
sudo chown root:root /usr/local/bin/lpc21isp
だけです。

なお、sshからログインしてターミナルで使っている場合には、以下の手順でシリアルコンソールを無効にする必要があります。

  1. /boot/cmdline.txtを開いて console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 を削除
  2. rebootし、再度sshでログインした後、
    sudo systemctl stop serial-getty@ttyAMA0.service
    で、コンソールを停止にする

2.については再起動するたびに実行する必要があります。serviceをdisableすれば毎回実行しなくて良いのですが、sshもVNCも接続できなくなってしまいました(キーボード/マウス/ディスプレイを接続して再度enableして復活)。シリアルコンソールを停止する手順は以上です。

GPIO23とGPIO24を出力として有効にします。
sudo echo 23 > /sys/class/gpio/export
sudo echo 24 > /sys/class/gpio/export
sudo echo out > /sys/class/gpio/gpio23/direction
sudo echo out > /sys/class/gpio/gpio24/direction
書き込むプログラムはmbedのオンラインコンパイラで用意します。mbed_blinkyで、

DigitalOut myled(dp14);

のところをLEDをつないだIOに変更します。targetをLPC1114FN28にしてコンパイルするとmbed_blinky_LPC1114.binが~Downloadsディレクトリ下に落ちます。

お待たせしました。

pi@raspberrypi:~/Downloads $ sudo lpc21isp -gpiorst24 -gpioisp23 -controlinv -bin mbed_blinky_LPC1114.bin /dev/ttyAMA0 115200 48000
であとは勝手にRESETとISPが操作されて
lpc21isp version 1.97
File mbed_blinky_LPC1114.bin:
loaded...
image size : 10540
Image size : 10540
Synchronizing (ESC to abort). OK
Read bootcode version: 1
7
Read part ID: LPC1114.../102, 32 kiB FLASH / 4 kiB SRAM (0x1A40902B)
Will start programming at Sector 1 if possible, and conclude with Sector 0 to ensure that checksum is written last.
Erasing sector 0 first, to invalidate checksum. OK
Sector 1: ...........................|.........................|.........................|.........................
Sector 2: ...........................|.........................|.........
Sector 0: ..........................|.........................|.........................|.........................
Download Finished... taking 2 seconds
Now launching the brand new code
pi@raspberrypi:~/Downloads $ 

これでめでたくLPC1114FN28のDP14につないだLEDが点滅します。

やったね♡

lpc21ispの作者およびgpiorst/gpioispの機能を提供してくださった方々に感謝申し上げます。ああ、今晩はぐっすり眠れそうだw

■追記 2017年1月10日■

Raspberry Pi 3Bだとlpc21isp(シリアルポート)が動作しないことがあります。OSのバージョンなどによって異なるようですが、上記の手順で動作しない場合には/boot/config.txtの末尾に以下の行を追加してみてください
dtoverlay=pi3-miniuart-bt

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。