読者です 読者をやめる 読者になる 読者になる

Lynx-EyEDの電音鍵盤 新館

広帯域制御屋の駄文とか

LPC1114のDIPを極秘裏に入手

悪い人がオランダから密輸してきたLPC1114FN28/102がやってきました。
f:id:Lynx-EyED:20120330220546j:image
ES品だそうです。うひょひょ

ピンアサインは以下のとおりです。

f:id:Lynx-EyED:20120401200908p:image
LPC1114F/301と比較すると

  • DIPで28pin
  • SPIが1つになった
  • RAMが4kに減った
  • AVDD,AGNDとアナログ電源が分離できるようになった
  • WAKEUP端子が追加された(通常はプルアップ) すみません、間違いでした。48pinにもWAKEUPあります

が大きな相違点ではないかと思います。Flashは32kと変わりません。

■eXodusinoブートローダの対応
せっかくなので、eXodusinoのブートローダを移植してみました。RAMが4kに減ったものの、リンカスクリプトを修正して移植に成功しました。
ブートローダも含めこちらにアップしました。
http://github.com/lynxeyed-atsu/eXodusino/

ブートローダはプロジェクトフォルダ直下の

Bootloader_DIP28_.axf

をLPCXpressoボードなどSWDが使えるハードで書き込んで使用して下さい。
なお、LPCXpresso 4.2以降のIDEを使用して下さい
このブートローダを一旦書き込んでしまえば、Flash MagicやLPCXpressoを使わなくてもLPC1114FN28/102マイコンのシリアル端子*1でプログラムの書き込みが出来ます。透過モードのXBeeやUSB-シリアルケーブルで書き込みが出来ます。
f:id:Lynx-EyED:20120331163149j:image

なお、テスト用のバイナリを

Release/exodusino_sample1_DIP_28_.bin

に用意しました。
バイナリ書き込みにはTeraTermなどのシリアルコンソールを使います。
具体的な方法はこちらを参照して下さい。
書き込みに成功すると、ターミナルエミュレータへ1秒ごとにカウントアップを送信します。

■eXodusinoとして使う場合の設定
ここからはeXodusinoのユーザアプリケーションの開発するにあたっての注意点です。

eXodusinoライブラリはLPC1114F/301,LPC1114L/302のみに対応しているため、RAMの少ないLPC1114FN28/102に対応するには設定をし直す必要があります。
eXodusinoブートローダはフラッシュメモリの始めの4kByte、RAMの32byteを占有してしまいます。この領域を潰さないようにバイナリを書き込む必要があります。*2
通常はリンカスクリプトをガリガリ書き換えるのですが、LPCXpresso IDEの力を借りるとちょっとした設定だけで済みます。

◇MCU Settings
LPCXpresso IDEの左側、

 Project Explorer→exodusinoフォルダを右クリック→
Property→C/C++ Build → MCU Settings → LPC1114FN/102

を選択。
f:id:Lynx-EyED:20120401204256p:image

◇リンカスクリプトの設定
次に、RAMが4kBなので、[eXosusinoプロジェクトトップ]/Release/eXodusino_Release_mem.ldを以下の図のように書き換えます。LPC1114F/301のRAMの部分2行分をコメントアウトして、LPC1114FN28/102の部分の2行分のコメントアウトを外せばいいだけです。
f:id:Lynx-EyED:20120401204257p:image

◇クロックの設定
最後に、eXodusinoは12MHzの外部クロックでの動作が前提となっています。内蔵クロックで動かしたい場合は、[eXosusinoプロジェクトトップ]/src/core/system_LPC11xx.cppの128,134行目をコメントアウト、129,135行目のコメントアウトを外します。
f:id:Lynx-EyED:20120401205307p:image


これで、Project->Cleanすると、一旦クリーンした後にバイナリを作ってくれるはず。
exodusino.binをシリアルコンソール越しに書き込んで成功。
f:id:Lynx-EyED:20120401205308p:image

*1:9600baud,8N1で通信します

*2:ブート領域が潰れるようなコードを書いてしまっても、ブートローダは消えません。書き込んだバイナリが正しく動作しないだけです