11Uxxやその他LPCマイコンを外部クリスタル無しの内蔵オシレータを利用しmbedライブラリを利用したオンラインコンパイラ作成のバイナリを使う方法

LPCマイコンにおいて、USB I/Fが付いている場合でも内蔵オシレータを利用した外付けXtal無しでブートし、オンラインコンパイラでコンパイルしたバイナリを焼く方法を纏めて起きます。

下準備

オンラインコンパイラで好きにプロジェクトを作る 注:mbedライブラリはインポートしない

  1. オンラインコンパイラで左上のNewからNewProgramを選択,TemplateはEmptyProgramで
    200px
  2. 新しいプログラム名を入れる
  3. ターゲットボードは使うマイコンと同じ種類のものが乗っているボードを選択
  4. 作ったプログラムネームの上にカーソルを移動し右クリックからコンテキストメニューを開き、From Import Wizardを選択し左クリック
    200px
  5. 左上のSearch 横の検索欄にmbed-srcと入力しSearchをクリック
    200px
  6. 出てきた検索結果からmbed-srcのAuthor mbed officialのmbed-srcを選択する
    200px
  7. 右上のImportをクリックし自分が作ったプログラムへImportする。
    200px
    200px
  8. mbe-src/cmsis/TARGET_NXP/利用するマイコンと同じ名前or種類のフォルダ/system_LPCxxxx.c をクリックする
    200px
  9. ソースコード中から以下の内容を探す

#define SYSPLLCLKSEL_Val      0x00000001

10.上記の数値が0の場合は外部クロックを使わず内部クロックを利用するのがデフォルトであり、通常のオンラインコンパイラで作られたバイナリがそのまま動くと思われるので、以下の内容はすっ飛ばしFlash転送の項へ飛ぶ。そうでない場合は数値の最後の桁(一番右)を0にする。

//   <o.0..1> System PLL Clock Source Select (SYSPLLCLKSEL)
//        <0=> IRC Oscillator
//        <1=> Crystal Oscillator (SYSOSC)
//        <3=> RTC Oscillator (32 kHz)

上記は、0であれば内蔵のクロック、1では外部クロック、3ではRTCのクロックを使える設定になる。3がない場合もあり。いずれにせよこの数値を0にすることで内蔵クロックを利用し、外部水晶の接続が必要なくなる。
11.USBのI/Fが付いているマイコンの場合は以下の場所をコードから探す。

#define USBPLLCLKSEL_Val      0x00000001

これも上記と同じで以下の内容になっている。

//
//     <o.0..1> USB PLL Clock Source Select (USBPLLCLKSEL.SEL)
//                     <i> USB PLL clock source must be switched to System Oscillator for correct USB operation
//                   <0=> IRC Oscillator
//                   <1=> System Oscillator

0であれば内蔵クロック、1であれば外部クロック。今回は内蔵を利用するので数値を0にする。
12.後は好きにプログラムを書いてコンパイルしたら、出来上がったバイナリを好きな場所に保存する。

この方法以外にも普通にプログラムを作る方法で、mbedライブラリが自動的に入るblinkeyで作った後にmbedライブラリを消してから、mbed-srcをimportする方法とかもあります。いずれにせよ、必要なのはmbedライブラリのsystem_LPCxxxx.cを編集出来るようにmbed-srcを使うのがポイントです。

Flashへの転送の仕方(LPCXPressoをここでは利用する。その他の場合は利用するソフトウェアとI/Fの通りに)

LPCLINK2をPCに接続する。JPはどちらも刺さない(電源出す必要があればそこはお任せ)。
CLIを立ち上げる
以下のコマンドを実施(Link2にデータ転送しデバッガにする。)

dfu-util -d 0x1fc9:0x000c -c 0 -i 0 -t 2048 -R -D /あなたが右記のフォルダをおいているパス/lpcxpresso/bin/LPC432x_Redlink_V4_56.bin.hdr

次にバイナリを転送する。(この場合は11u68系を転送している。他の場合は後述)

/あなたが右記のフォルダをおいているパス/lpcxpresso/bin/crt_emu_cm_redlink -flash-load-exec "/保存したバイナリのパス/保存したバイナリの名前" -g -2 -vendor=NXP -pLPC11E68 -flash-driver=/あなたが右記のフォルダをおいているパス/lpcxpresso/bin/Flash/LPC11U6x_256K.cfx

これで転送完了。動作確認はLinux 3.13.0-46-generic #79-Ubuntu SMP Tue Mar 10 20:06:50 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
オンラインコンパイラを利用し、外部クリスタルを接続しないLPCマイコンのmbedライブラリを利用する方法でした。
LPCXPressoボードによっては、外部クリスタルが接続されていてもライブラリ的には使わない設定になっていたり、接続されていないものもありますので、そのままオンラインコンパイラで作成したバイナリを転送するだけで使えるものもあります。
この手法は、mbedボードで作成したオンラインコンパイラのプログラムを手軽に再利用する為のものです。マイコンをピッチ変換基板やその他に乗せてなるべく外部回路を少なくした状態でも使えます。もちろん、外部クリスタルではなく内蔵オシレータですから精度他の制約はあります。
バイナリ転送においてlpcxpresso/bin/Flash/ のフォルダ内に各種マイコンへプログラムを転送するFlashアルゴリズムが保存されていますので、利用するマイコンと合わせたものをお使いください。
また転送オプションの -pLPC11E68 についてはご利用するマイコンと同じものを記載してください。
CLIが苦手な人は普通にLPCXPressoからバイナリを指定しターゲットマイコンに転送する手法ももちろん使えます。どちらを使うかはお好みでどうぞ。


この手法ですと、外部クリスタルを使用せず内部オシレータを利用し更に高性能なオンラインコンパイラで最適化されたバイナリを手軽に使えると思います。mbedボードで開発が終わって実装する際にピッチ変換基板等を利用しお好みの実装をする場合において、作成したバイナリを手軽に転送する事と回路を簡略化する事が出来ると思いますのでぜひお試し下さい。

この記事は2015 mbed Advent Calendar の記事です 次はjksoftさんです.お願いします♪


1 comment on 11Uxxやその他LPCマイコンを外部クリスタル無しの内蔵オシレータを利用しmbedライブラリを利用したオンラインコンパイラ作成のバイナリを使う方法:

22 Feb 2017

すいません。

LPC1114のクロック源を外部クロック(クリスタル)にしつつ、mbed.hのライブラリでプログラミングをしたいのですが、 メインプログラムってどこに書けばいいのでしょうか?

main.cppを新たに作成してmbed.hをインクルードすればいいのでしょうか?

Please log in to post comments.