mbedのプログラムをLPC1114FN28へ書き込む方法

mbed LPC1114FN28である。当方はNXPのMPUは使い慣れてない。生のMPUへmbedのプログラムを如何に書き込むかというのが第一関門である。
TSUBOIさんの”[lang:ja] mbed LPC1114での遊び方“によると、書き込む方法は以下のとおりらしい。

  1. シリアル経由のISP書き込み
  2. デバッガ経由のSWD書き込み

当方の環境ではシリアル経由のISP書き込みが簡単なようだ。

準備したもの

ブレッドボードで接続

以下のような感じで、ブレッドボードに回路を組んだ。
3.3Vのシリアルアダプタが必要とあるが、秋月のUSBシリアルモジュールは考慮されてて拙作のシリアルアダプタのような回路なら3.3V/5Vのジャンパをオープンにすれば、信号の電圧はターゲット電源から供給した電圧になるのだ。つまり外部電源を用意すれば使えるのである。

LPC1114FN28のテスト回路

LPC1114FN28のテスト回路

注意点として、書き込み回路は、拙作のシリアルアダプタのTX,RXをLPC1114FN28のRX(dp15), TX(dp16)と接続し、PIO0_1(dp24)を330Ωの抵抗経由でGNDに落とすこと必須条件だ。PIO0_1(dp24)をLOWにしてリセットするとISPモードになるのだ。

書き込み方法

最近はUbutuの環境が立ち上がってることがおおいので、Ubuntuで書き込み環境を用意した。
書き込みツールはlpc21ispだ。ソースをダウンロードしてコンパイルし利用した。

mbedのクラウド環境で以下のソースコンパイルしローカルにbinファイルダウンロードした。

#include "mbed.h"
// naked LPC1114 on breadboard, install LED pin28, pasive piezo-buzzer pin1
DigitalOut led1(LED1);  // LED ... P0_7 (pin 28)
DigitalOut led2(LED2);  //
Serial uart(dp16, dp15); // UART .. P1_7: TX (pin 16), P1_6: RX (pin 15)
PwmOut pwm(dp1);         // PWM ... P0_8: CT16B0_MAT0 (pin1); sorry, blocking SPI!

int main() {
  char c = '0';
  pwm.period(0.001);  // PWM period 1ms (1kHz)
  uart.baud(115200);  // Baud rate
  uart.puts("Start.\n\r");

  while(1) {    // repeat (period 1sec)
    led1 = 0;  // LED on
    led2 = 1;  // LED off
    pwm = 0.5;  // PWM duty cycle 50%, tone 1kHz
    wait(0.5);
    uart.putc(c++); if (c > '9') c = '0';  // Put Character & rotate 0,1,2,... 9
    led1 = 1;  // LED off
    led2 = 0;  // LED off
    pwm = 0;    // PWM stop, silent
    wait(0.5);
    uart.puts(" Hello world.\n\r");  // Put String "Hello..."
    }
}

binファイルをlpc21ispコマンドで書き込む。

$>lpc21isp -bin lpc1114uart_LPC1114.bin /dev/ttyUSB0 115200 48000

結果はこのとおり

テストプログラムの結果

テストプログラムの結果

LPC1114からシリアル経由で応答が返ってきた。
テストならLチカが定番だが、mbedは高度な上コミニュニティがあるので、シリアル・ハローである。
おっとソースをよく見ると、LEDではなく圧電スピーカーなんだ。まぁいいか。

おまけ

mbed FRDM-KL25Zに2連のピンソケットを半田付けした。
2連の外側のピンソケットにArduinoのシールドが刺さるのだ。

2連ピンソケットの半田付け

2連ピンソケットの半田付け

参考ページ