Lynx-EyEDの電音鍵盤 新館

制御とか数学とか駄文とか

Arduino API互換環境eX(ryまとめ その2

Arduino API互換環境eXodusinoをLPC1114 DIPで使うまとめ - Lynx-EyEDの電音鍵盤 新館
の応用編です。2点だけ追記が有ります。これはeXodusinoを使う上で必須ではありませんのでみなさま各自で取捨選択をお願い致します。

以下の2点です

  1. LPC1114 DIPへの書き込み方法 - eXodusブートローダ -
  2. LPC1114に外部クロック(12MHz)を接続して使いたい場合



1. LPC1114 DIPへの書き込み方法 - eXodusブートローダ -
デバッグ作業でLPC-Linkを使わない場合、USB-UARTデバイス経由でFlashMagicから書き込みが行えます。Linux系であればLPC21ISPもあります。
Flash Magic - Welcome
LPCマイコンはUARTでの書き込みに対応したブートローダを標準で内蔵しており、ホストと通信しながらボーレートを自動判別します。とても便利な機構なのですが、XBeeなどの固定ボーレート機器での無線書き込みが出来ません。

■まずブートローダをLPC-Linkで書き込む
そこで固定ボーレートで書き込むブートローダを用意しました。
シリアルコンソールで書き込みとデバッグを1つのウィンドウで行うことができます。
[eXodusinoプロジェクトフォルダ]/Bootloaders/Bootloaders_DIP_28.axfがLPC1114 DIPタイプのブートローダです。(9600baud固定)
f:id:Lynx-EyED:20120903011659p:plain
LPC-Linkでこのブートローダを一旦書き込んでしまえば次回からは、XBee + LPC1114 DIPや、USB-UART + LPC1114 DIPといった構成で書き込みが出来ます。これにより、書き込みとデバッグがTeraTermウインドウ1つ (Mac/LinuxならMinicom or Cutecom)でできます。

なおブートローダがflash領域の先頭4kBを占有します。ここでブートローダがはじめの4kBを陣取ってしまうので、ユーザープログラムを4kB分後ろにシフトしてあげなければなりません。つまりプログラムの配置アドレスが変わりますのでリンカスクリプトの変更が生じます。
f:id:Lynx-EyED:20120901152810p:plain
プロジェクトトップを右クリック→ Properties
f:id:Lynx-EyED:20120903013226p:plain
[C/C++ Build]の項目を選択 → [Manage Configurations...] → [LPC1114FN28_102_DIP28_bootloader]を選択 → [Set Active] → [OK] → [Apply] → [OK]
これで、Project → Clean と Project → Build Allすると、[eXodusinoプロジェクトフォルダ]/LPC1114FN28_102_DIP28_bootloader/eXodusino.binというファイルが生成される。


ブートローダ経由でコンパイルしたバイナリを書き込む
前手順を踏むと、LPC-Linkは今後不要になります。このバイナリをシリアルコンソール経由で書き込みます。
シリアルコンソールとは9600baud 8bit,ノンパリティ,ストップビット 1で接続してください。
1番目の例ではCuteCom2番目はTeraTermを使っています。どちらもLPC1114に対して行う作業は同じです。

(1) LPC1114をリセットします。
(2) 1秒以内にシリアルコンソールの画面でキーボードの[z]を押します。
するとこんな画面が出てくるはず(CuteCom)
f:id:Lynx-EyED:20120903111018p:plain
あるいはこんな画面(TeraTerm)
f:id:Lynx-EyED:20120903115119p:plain

Welcome to eXodusino! (LPC1114FN28/102)
http://lynxeyed.hatenablog.com/

eXodus Bootloader Start....

(3) ここで先ほどLPCXpresso IDEでコンパイルしたバイナリファイルを書き込む

  • CuteComの場合 [Send File] → [eXodusinoプロジェクトフォルダ]/LPC1114FN28_102_DIP28_bootloader/eXodusino.bin を指定
  • TeraTermの場合 [ファイル(F)] → [ファイル送信(S)...]でバイナリを選択できます。[eXodusinoプロジェクトフォルダ]/LPC1114FN28_102_DIP28_bootloader/eXodusino.bin を選択し一番下のオプションメニューの[バイナリ(B)]に必ずチェックを入れます

f:id:Lynx-EyED:20120903120136p:plain
その後しばらく書き込みを待ちます。256バイト書き込むごとに[o]の文字が羅列されていきます。もしこれが[x]と表示された場合、書き込みが失敗しています。書き込んだファイルが正しいか確認して下さい。

(4) 書き込みに成功すると、LPC1114は自動でリブートします。リブート中はシリアルコンソールから[z]を入力ししますと、またブートローダモードになってしまいますので、入力しないでください。



2. LPC1114に外部クロック(12MHz)を接続して使いたい場合
Arduino API互換環境eXodusinoをLPC1114 DIPで使うまとめ - Lynx-EyEDの電音鍵盤 新館
のエントリではデフォルトで内蔵クロックを使用するというものでした。外部クロックを必要とする場合も多いと思われますので、ここに記述しておきます。なおここでは外部クロックは12MHzを使うものとします。LPC1114内部で4逓倍しますので内部では48MHzで動作する事になります。*1

f:id:Lynx-EyED:20120901152810p:plain
プロジェクトトップを右クリック→ Properties

f:id:Lynx-EyED:20120903113858p:plain
[C/C++ Build]を展開し → [Settings] → [MCU C++ Compiler]を展開 → [Preprocessor] → [NO_EXTCLK]を選択して、削除アイコンをクリックし、 [OK]
これで、Project → Clean および Project → Build Allすれば、外部クロックを使用するバイナリを生成できるようになります。

*1:もし異なるクロックを使用したい場合は、ユーザーマニュアルを参照しながら[eXodusinoプロジェクトフォルダ]/src/core/system_LPC11xx.cppを変更してください