mbed NXP LPC1768 (On site Development)

IMAGE11.GIF - 980BYTES  概要
IMAGE11.GIF - 980BYTES  ちっとした確認(順次更新)
IMAGE11.GIF - 980BYTES   ハードウェア
IMAGE11.GIF - 980BYTES  ソフトウェア 
IMAGE11.GIF - 980BYTES  ソフトウェアソースコード
IMAGE11.GIF - 980BYTES  参考文献
IMAGE12.GIF - 2,801BYTES

変更履歴
2010年3月6日 新規作成
2010年3月7日 追加
2010年3月27,28日 サンプルソフトウェア追加
2010年4月4日 プログラム追加
2010年4月18日 構成変更
2010年5月30日 追加
2010年9月11日 新ページに移行
LPC1768に関係する内容は
再構築してこちらにまとめました


Webで検索して出てくる写真と若干違う
RESETボタン等を含め、一部初期のボードと違う様子
表をみるとすっきりしているが・・・ 裏は、思ったより部品が並ぶ
回路図には表記されていないが左の大きなICは、
CPUとUSBのI/Fを制御している?
USBから見えるメモリはDataFlashで構成されていると思われる
クリックすると判明しているICを表示
SD Cardを使い始めました。LANとUSBも接続しましたが、USBは未だ動作チェックをしていません。









LPC1768 ----- 概要
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

<初めに>

秋月電子通商から「mbed NXP LPC1768評価キット」が発売されたのを知り、少し調べたら色々とユニークな点がありました。
早速、本日(3月6日)午後に、雨の秋葉原に行って購入してきました。
当初、店には在庫が無く、4時頃まで待てば次のロットが到着するとのことだったので予約して時間つぶししながら何とか入手して帰ってきました。
購入動機は下記のように、いくつかあります。


使い始めて30分くらいで写真を撮りながら、最初のプログラムをコンパイルして動作させることが出来ました。
IOポート情報を何も持たずに(ハードウェアマニュアルを読まずに、レジスタの名前さえ知らずに)プログラムを書き、スタートアップルーチンも気にせずにバイナリーファイルをUSB経由でMBEDと表示されるメモリに書き込めば、RESETボタンによってプログラムが起動します。

尚、秋月の紹介では、

とありますが、誤記と思われます。



<本来の目的>

PICによるデータロガーをいくつか製作してきましたが、次の目標は車載タイプの走行データロガーの予定でした。
車両情報は、CAN経由で入手し、GPS等の情報も含めて走行状況を総合的に分析できるように考えていました。
PIC24ファミリーではCANとUSBの両インターフェースを持つCPUがなく、次の候補として、
   PIC32MX575F512H
を使おうかと思案していたところでした。
100PinのICを素人が手作りで扱うのはかなり負担が大きく、躊躇していたところなのですが、少しこのCPUの使用を優先して、製作進行中のロガーは少し開発速度を落とします。











LPC1768 ----- ちょっとした確認
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

2010年5月30日

<基板製作>
久々の更新。
mbed用の基板作りを思い立ち、EAGLE CADを久しぶりにいじりまわしていた為、思ったより時間が経ってしまった。
昨日、基板発注が完了したので、再びソフトウェア作成に戻る。
ちなみに、回路構成は下記のようになる。

装備した入出力は、

となる。
それぞれの機能は、mbedのオンサイト上とFreeRTOS上での簡単な動作確認が、手配線で作成した回路でほぼ完了している。
基板完成後に、制御ソフトウェアは順次発表していく予定です。但し、CAN機能はまだ何も確認出来ていません。



<モニタープログラム>
現在のmbedがどのようなシステムクロックで動いているのか?
メモリ内容を確認をしたいが・・・
入力ポートの状況は?
などを確認で来るように、モニタープログラムを作成して、このページで紹介しています

結果としては、mbedは96MHzで動作している。
ハードウェアは何も接続せずに、USB経由の仮想シリアルドライバーをインストールすれば動作させることが出来るので、
Hello World!の確認が終わった後に試してみてください。



<mbed回路構成>
mbedの情報公開は不充分であり、回路図も全部が公開されていない。
ここで一部情報が、
You've inspired me to do an un-official official one:
というコメントと合わせて、mbed運営スタッフのSimon Ford氏によって公開されています。
私が、この情報を元に基板を観察してみると、ご丁寧に「mbed Interface」と追加工までして品番を隠したチップは、

の事実から、

が載っていると推測します。断定はしませんが、ほぼ間違いないと思われる。
また、基板裏にある金メッキパッドがPin20,24,?,56,60,64に接続されており、LPC2148のJTAG信号のピン配置と合致している。
このパッド経由で製造時に、magic chip内にファームウェアを書き込んでいると思われる。

PIN Signal
20 TRST
24 RTCK
52 TMS
56 TCK
60 TDI
64 TDO

LPC2148がUSB経由でホストと交信し、LPC2148に接続されたATMEL社45DB161Dの16Mbits DataFlashメモリ内にPCからダウンロードされたBINファイルをセーブする。
そのBINファイルは、LPC2148がLPC1768のJTAG信号を操作して1768内のFlash書込みを行い、その後RESET端子をアサートしてプログラムを走らせる。
LPC1768はUART0を使って、LPC2148とシリアル交信を行い、このデータの流れはLPC2148内でUSBインターフェース経由に変更されPC側との通信が行われる。
これが、USB仮想シリアルの実態と思われる。
オンサイト上でのソフト開発は、UART0を使用した仮想シリアルとして隠ぺいされたままでも使えるが、オフサイトでFreeRTOS上の開発をする際には、このインターフェースを使えない状態となっている。
少なくとも、この部分をもう少し解析しないと前に進めないのだが・・・




2010年4月18日
従来は、ハードウェアとソフトウェアを別々に記述していましたが、今回から動作させたソフトウェアをハードウェア条件も含め、一括してメモすることにしました。
従って、古い情報はそのままですが、今後の更新はここを中心にメモを残します。

<ハードウェアの接続変更>
mbedの40ピンは、自由度がありそうですが色々と接続を追加すると、悩み始めます。今回は、今後の展開も含め大幅に接続を変えました。
新しい接続は、ここを参照願います

この接続を確認する意味で、GPSロガーのプログラムを作成し、ここに格納しました。英語での説明はここを参照願います

<GPSロガーの概要>
PIC24USBを使ったGPS Handy Data Loggerの応用で、それ自体に目新しい部分はないのですが、FreeRTOSを使わずにmbedのオンサイトでの開発のために制限事項が多くあります。
特に今回のプログラムでは、RTOSを使用していないためにGPSデータの取りこぼしや1秒間に処理できる内容が限られてしまっています。

mbedのオンサイト開発では公開されていない情報が多くて、用意されているライブラリーだけで実現出来る事は、非常に敷居が低くすぐに達成できるのですが、少し欲張ると壁に当たります。
今回も、GPSのデータを受信してSDカードに保存するだけでは、とりかかって1時間もしないで動作させることが出来ました。
しかし、GPSのデータをRMCだけでなく他のデータも受信しようとすると、時間的な制約が出てきてしまいます。LCDに表示する内容も現時点では限られており、何処まで対応できるかを順次確かめて行かなければなりません。
特に、今回問題になったのはファイル書込みを始める際に、fopen関数を呼び出して書込みを開始するときにGPSデータを取りこぼしています。
























LPC1768 ----- ハードウェア
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

<購入日(3月6日)>

何もせずに、USBケーブルでPCへ接続した。

<購入翌日の日曜日>

評価ボードと回路図を比較してみると、あまりにも回路図への記載情報が少ないことが判る。
何を考えてこれしか情報を開示しないのか不明だが、少なくとも回路図は[mbed NXP LPC1768]の商品の全体像を表していない。
PCからUSBメモリとして見えるのは、基板裏側にあるATMEL社45DB161Dの16Mbits DataFlashメモリの内容と思われる。
USB経由で新しいBinファイルをMBEDのディスクに書き込んでいる状況でも、ユーザープログラムは実行を続けている状況から察するに、裏の左側のCPU?でUSBメモリをコントロールし、RESETボタンをトリガーとして、CPUのフラッシュにローディングされるのではないだろうか?
この件に関しては、もう少し情報を入手してから結論としたい。

いずれにしても、情報の開示を期待したい。

さて本日は、LCD表示のトライアルとしてここを参照して結線を行う。解説も含め、ここを参照のこと。
使用したLCDは、40文字x2行のジャンク品で電源は5Vへ接続しています。

<その後>
下記を追加しました。現在は、FreeRTOSのオフライン開発をしていますので、mbedでのソフトウェア開発はしていません。並行して進めることにしました(2010年4月)。

RTC用にバッテリーバックアップを始めました
接続は、簡単でmbedの3PIN(VB)と1PIN(GND)間に3Vを供給します。
バッテリバックアップ電圧は、仕様書には下記のように記されています。

参考資料
LPC1769/68/67/66/65/64  Product data sheet Rev. 03.02— 22 December 2009

  PIN       Remark  Min[V]   Typ[V]   Max[V] 
 Vi(VBAT)   input voltage on pin VBAT  2.1 3.3 3.6

最終的には、ボタン電池を使う予定ですが、現時点では単三電池を二本直列で暫定対応しています。

<追加ハードウェア>
SD CardとLANに関しては、こちらをご覧ください。
オンサイト開発とオフサイト開発とで、同じハードウェアを使用しています。
オンサイトは、ハードの設定等をライブラリーを使って実施しているので、動作しない原因を切り分けるのに便利です。
オンサイトで動作しない場合には、ハードウェアを中心に疑い、問題が解決後にオフサイトでソフトウェア関連の問題を潰していくと効率が良いです。













LPC1768 ----- ソフトウェア
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

<開発の前に>

最大の特徴は、インターネット経由でmbedのサイトにログインして、そのままWeb上で開発を実行する点でしょう。
USBを接続すると評価ボードは、USBメモリーとして認識されます。
私のWindows XPでは下記のようになりました。メモリサイズは2MBあるようです。

USBメモリ内のBMED.HTMのファイルをクリックすると、mbedのサイトに接続されます。ここで、Sign-upするとコンパイラと必要な場所が確保されます。
一度、Sign-upが完了した後は、MBED.HTMのクリックで自動的にログインが完了し、下記のような内容が現れるようになります。

①MY Home、②My Notebook、③Compiler の3つのエリアがアクセス可能になります。
①は、本人のプロファイルを紹介するWebページとなります。
②は、自分の開発内容をノートに書きとめ、みなさんに公開するページとです。
③は、ソフトウェア開発を行う場所です。

<開発の実際>

1)初めてのプログラム
先ずは、出来上がっているプログラムをローディングして動作させてみます。
LPC1678用のデモプログラムは、[HelloWorld_LPC1768.bin]がWebからダウンロード出来ます。
これは、バイナリー形式のファイルですが、これをMBEGのUSBメモリに格納してRESETボタンを押すとLEDが点滅して動作します。

次に、③の画面に移行して、プログラムを作成してみました。初めて作ったプログラムが下記のLED4個を制御するプログラムです。

Web上での操作のために、エディタは[Copy][Paste]操作がマウスでは出来ずに、[Ctrl+C][Ctrl+V]のキー操作を必要とします。日頃から慣れてないと少し煩わしいと感じるかもしれません。
は、マウス操作で可能になりました。使い勝手が大変良くなりました。 (2010年5月30日)
コンパイラが[Success!]で完了するとバイナリーファイルをダウンロードする動作に入ります。これをファイルとして保存し、USBメモリに書き込めば動作確認ができます。

書いてしまえば以上ですが、もう一度この方式に優れている点を整理してみましょう。
① 自分の持っているパーソナルコンピュータの仕様や性能に依存する部分が少ない
② インターネットのブラウザさえ動作すれば、OSには依存しません
③ 事前の準備は、評価ボードの購入とSign-upのみ
④ CD-ROMやWEBからの開発環境のダウンロードやセットアップは不要。従ってメモリやHDD容量を気にする必要はありません
⑤ CPUのハードウェアに関する知識や経験が無くてもC++のライブラリー等で、即プログラム作成に専念できる(但し、将来に亘って不要か否かは?)
⑥ 何処からでも、評価ボードさえあればログインして開発可能(ソースファイル等はクラウド側)


確かに、初日半日でここまで出来れば・・・・・

2)二日目→LCD表示
LCDとのインターフェイス結線後に、下記のプログラムを作成し動作確認を実施した。

上記プログラムは、TextLCDのLibraryを参照しています。
そのLibraryは下記のように、Importします。

動作結果は、下記のようになります。

<サンプルプログラム>

1)LCD表示(ピン配置変更)

LPC1768は100ピンのCPUで、機能として使えるピンは80ピン近くになりますが、mbedとして実装された状態では使えるピンが全部で32ピンしかありません。
何を接続するかによって、上手く配置を考えないといけません。私の場合には、このようなピン配置を想定しました。
そこで、LCD表示プログラムのピン配置も上記”2)二日目→LCD表示”と違う仕様にしました。

サンプルプログラムは、mbedの"My Home"内の”Recent Program"にセーブしてあります。





2)USB経由の仮想シリアル

mbedに実装されているUSBインターフェイスは、私のPC(Windows XP)上で、二つの機能を持たせることが出来ます。

①ディスクドライブ(USBメモリ)
②COMポート

これを実現するためには、ここの"Windows Serial Port Driver"をインストールする必要があります
USB経由の仮想シリアルポートを設定すると、ハイパーターミナルやTeraTermを立ち上げてシリアル通信ラインを利用するユーザープログラムを書くことができます。
またデフォルト設定で、printf()関数の出力がこのシリアルポートに接続されます。
従って、mbedの基板に何も接続しなくてもUSBケーブルをPCへ接続すれば、ソフトウェアの書込み機能とprintf()を使ったデバックが始められることになります。





3)リアルタイムクロック(RTC)制御


RTCを使用する場合には、VB(pin3)にバッテリを接続します。
電源電圧は、最大3.6V となっています。注意してください。
この準備ができれば、ソフトウェア自体はmbedのライブラリ利用で非常に簡単です。

サンプルプログラムは、mbedの"My Home"内の”Recent Program"にセーブしてあります。
プログラム自体は単純ですが、RTCの初期化は必要時のみです。
上記サンプルでは、TIME_KEEP_AS_ISを未定義した状態で、初期設定をするように動作します。
電源をOFFにして、バッテリバックアップが上手く行くこと確認してハードウェアの状態を確認してください。

もうひとつのサンプルプログラムは、仮想シリアルを利用してリアルタイムで時刻合わせを行い、その結果をLCDに表示するものです。
ここを参照してください。






4)ファイル操作(LocalFileSystem

mbedをUSB経由でPCへ接続すると、ディスクドライブ(USBメモリ)として認識されます。
容量は先に述べたように約2MBで、基板裏側に実装されている外付けメモリ内容が見えています。
しかし、mbed上のCPUであるLPC1768からはどうすれば、このメモリ領域を使用できるのでしょうか?
答えは、ここで使用方法が解説されていますが、LPC1768側からはこのメモリを外部ファイルシステムとして認識させています。
従って、SDカードのようなインターフェイスを用意しなくてもファイルが保存できます。
注意点も書かれていますが、初めて実行すると慌てる事なので、ここでポイントを記します。

  注意

私の作ったサンプルプログラムは、ここにあります。
このプログラムには、簡易データロガーとしてアナログ信号5チャンネルを一秒毎に計測し、ファイルとして保存する仕様になっています。
更に、先に説明したLCD制御やRTC制御も組み合わせており、デバッグ機能として仮想シリアル経由で進捗状況をPC画面に表示するようにしています。
RTCモジュールを動作可能にしておけば、下記のメリットが生まれます。

  準備

  メリット

残念なのは、ファイル自体のタイムスタンプはRTCを実装しても、2008/01/01 12:00 のままです。
ファイル操作のライブラリソースファイルに現時点ではアクセス出来ないので、改善は今後の課題として残ります。





5)ファイル操作(LocalFileSystem)


SD Cardの制御プログラムは、このソフトウェア(SDCardTest)を使用します。
当初は、Cookbookにあるこのプログラムを使用して上手く動作しませんでした。
SD Cardの制御が出来るようになったことで、本来したいこと(データロガー)に対して大分近づいたことになります。

これを契機に、My Notebookでテストプログラムを紹介し始めました。

簡単にここでもまとめて置くと・・・

私は、2GBのMicro-SD(Kingstone)を使用しています。FAT32対応も出来るのでしょうが、現時点では4GBのカードは使用出来ていません。





<他の方のプログラム動作チェック>

1)HTTPサーバー

私は、LAN制御のプログラムには何の見識も無く、何処から取りかかればよいのか判らず色々なフォーラムを覗いてみました。
そこで行きついたのが、このIlya I氏のMy Homeページでした。
その中で、紹介されているpub_iva2K_ethsntpのプログラムを利用すると、様々な機能が実現出来ます。
本日(2010年4月4日時点)、プログラムをダウンロードして動作チェックを始めたばかりなので、充分理解していないのですが、

今回、私が立ち上げた際の仮想COMラインでのデバッグ情報とWEBページを下記に紹介します。




私の場合には、先にデバッグ済のSD Cardインターフェイスを利用しました。
2GBのメモリ内に、必要なファイルを格納して立ち上げた結果が上記の画面です。

私が利用したsntp.iniを下記に示します。

# Sample SNTP Configuration file (Section names and variables are case-sensitive)
# original : http://mbed.org/users/iva2k/notebook/sntp-client/

[Servers]
pool.ntp.org
north-america.pool.ntp.org
time-a.nist.gov
time-b.nist.gov

[Global]
RtcUtc=1

Timezone=+9.0
# in hours

UpdateDelay=600
RecvTimeout=5
# in seconds




















LPC1768 -----  ソフトウェアソースコード
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

サンプルプログラム
http://mbed.org/users/kenjiArai/




















LPC1768 -----  参考文献
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

NXP
http://www.nxp.com/


LPC1768
http://www.nxp.com/#/pip/pip=[pip=LPC1769_68_67_66_65_64_4]|pp=[t=pip,i=LPC1769_68_67_66_65_64_4]

ARM
http://www.arm.com/

mbed
http://mbed.org/

mbed NXP LPC1768
http://mbed.org/nxp/lpc1768/









































download.html

特にmbedに関しては、まだよく解っていないのですが、下記の資料の[Easy (E)mbed]に由来があるように思えます。
http://www.circuitcellar.com/archives/viewable/Cantrell-227.pdf


picture1
picture2
picture3
picture4
pin