mbedとかLPCXPresso1768版とか超楽しそうスね(涙目)

un
TFT-LCD Shieldの開発に当たって、ねむいさんもついにArduinoを購入しました!
最初はEtherpodのプラットフォームだけで動かすことしか考えてませんでしたが、
HP200LX持ってないのにmorphyone作ろうとして盛大にコけたどこぞのぺ○野郎のこと
が頭よぎったので、ちゃんとArduinoを理解してライブラリも作れるようになるために
購入しました…。まぁSTM32ですでにできたことをAVRに移すだけですから驚くほど簡た…
un
ごめんもう白旗上げていいかな…(※xmegaの二の舞)
ところでxmegaで思い出しましたがxmegaでFatFS(のMSPI)をDMA化出来たという話を
全く聞きません。情報もってる人がいたら教えてください…

20120907追:
xmegaでFatFsのDMA化できるじゃない!





さて、前フリはこれくらいにしといて本題に入りますが、Cortex-M3の系統のARMマイコン、
LPC1768を使用したハイエンドかつ安価な評価ボードがいくつか出ています。mbedや
LPCXpresso(LPC1768版)等がそれに当たりますが、ねむいさんはそれのどれにも手をつけず、
taobaoで液晶買った時についでに中華LPC1768ボードを買っていたのでした!!
↑のLPCXpresso1768版出るなんて知ってたら買ってなかったのですが…くやしい…でも…
過ぎたことは仕方ないので私も通電してみることにしました。

un
↑KeilのMCB1700互換なミニボードだそうです。周辺が全くない代わりにほぼすべての
 IOが外部に引き出されています。

un
↑即LPC1769に交換ッッ!!1!LPC1768を凌駕する120MHzで動きますッ!
 恐らく私が日本国内で初めてLPC1769を動かした女になるでしょう(多分)
R&D dailyの綿谷氏がとうの昔にされていましたorz生意気言ってごめんなさいッ
マイクロマウスの開発されている方たちはなんとうか本当に格が違いますね…

さて、基本の'き'であるLED点滅から始めてみたいと思いますが、上述のとおりMCB1700互換
なので、NxPのサイトにある、
"LPC17xx CMSIS-Compliant Standard Peripheral Firmware Driver Library (GNU, Keil, IAR)"
というExample付きのCMSISライブラリがそっくりそのまま使えます。

GNU用のExampleはこれまたCodeSourceryの使用を前提にされていて、ねむいさん的にも
好都合です。手順に従い、程なくバイナリを生成出来ました。
un

バイナリの書き込みはもちろんJTAGKey2Clone+OpenOCDから行います。LPC17xx系統の
対応状況は現在JTAG接続のみです。NxP製のARMマイコン特有のCheckSumValidation
に注意してスクリプトファイルを作り、JTAG接続にて書き込みました。書き込みの過程はこんな感じです。

> "C:/Devz/AVR/WinAVR/utils/bin/make.exe" program
openocd -f C:/Devz/ARM/OCD/daemon.cfg -f C:/Devz/ARM/OCD/tcl/interface/jtagkey2.cfg -f C:/Devz/ARM/OCD/tcl/target/lpc1769_rclk_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.5.0-dev-00450-g450aaad (2010-07-22-09:39)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.berlios.de/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter_nsrst_delay: 200
jtag_ntrst_delay: 200
none srst_pulls_trst
500 kHz
Info : device: 6 "2232H"
Info : deviceID: 67358712
Info : SerialNumber: 22222222A
Info : Description: Amontec JTAGkey-2 A
Info : max TCK change to: 30000 kHz
Info : clock speed 500 kHz
Info : JTAG tap: lpc1769.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : lpc1769.cpu: hardware has 6 breakpoints, 4 watchpoints
RCLK - adaptive
Info : JTAG tap: lpc1769.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x1fff0080 msp: 0x10001ffc
flash 'lpc2000' found at 0x00000000
auto erase enabled
wrote 8192 bytes from file main.elf in 1.328142s (6.023 KiB/s)
verified 4968 bytes in 0.531257s (9.132 KiB/s)
requesting target halt and executing a soft reset
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x01000000 pc: 0x000000e0 msp: 0x10007fe0
shutdown command invoked

現状LPC17xx系のアーキテクチャのすべてを理解はしていないのでLPC2388みたく高速
書き込み/ベリファイはまだ出来ませんが、そちらも使い込むにつれ対応していきます。

un
↑LED点滅プログラムが動いてるところ。
un
↑JTAGkey2Clone+OpenOCD+Insightでのデバッグも自在です。
un
↑NxP提供のCMSISのExampleはLPC1768向けになっており、それをそのままビルドしている
 ので,動作周波数はまだ100MHzです。


まぁつかみはこんな感じでしょうか。私が行った最初のとっかかりのプログラムを自分用環境
に移植したものをこちらに。OpenOCDのスクリプトファイルはこちらに置いておきます。
ご利用は自己責任で〜


おまけ
un
un
じっと見てたら気づいたけど何かに似てる…



LPCXpresso(LPC1114)はぢめました

20120130追:
OpenOCDで書き込みとデバッグできるようになったから熟読すべし



なんてうかうかしてるうちにXpressoのLPC1768版登場ですって奥さん!ねむいさんは
中華製1768ボードを買ってしまいましたので今すげぇ涙目です!!!
(でもいいんだ、こっちの方が自由度あるし!!全然負け惜しみじゃないし)

さて、LPC1768の件も語ることが多いので次回にゆだねるとして、今回は巷で流行りの
LPCXPressoを使用してみました。今回はLPC1114版の方を使用します。
まずは環境作りなんですが、いつもの通りCodeRedが提供しているEclipseベースのIDE
ガン無視でコマンドラインからのビルド環境を構築しました。構築にあたりtodotani氏
Lynx-EyED氏microBuilder.euほかのページを参考にさせてもらいました。

構築と言ってもやってることはLPC2388やSTM32でやってたことと全く同一で、リンカ
スクリプトとスタートアップコードをLPC1114用にこさえるだけです。Cortex-M0も
CMSISライブラリが提供されていてSTM32のものと似たような構成にすれば間違いなく
正しく初期化し、動作するものを作ることができます。
私はさらにこれに加えてNxP製のARMマイコンに特有のCRPのセクションを追加しました。
(まだありますけど後述)普段は使用しないのですが万が一のこと考えてです。
CRP無効にしていますがもちろん他のプロテクションレベルにもできます。
親切心を装って"とりあえずこのプログラム書き込んで試してみて"なんてCRPLevel3
の地雷を故意に仕込むことも可能なのでとてもお勧めですが絶対にやってはいけません!

un
んでもってLPCXpressoのIDEに同梱されていたLED点滅のサンプルをビルドし、書き込み
ます。書き込みの際にはLPCLinkではなくてSTM8S-DiscoveryのST-LINK部分を改造した
Versaloonを使用してみました。

un
なんと少し前にLPC1xxxシリーズもSWD接続・フラッシュ書き込み対応になっています!!
un
…でもまだちょっと不安定。さらなる改善を期待します。


LPC2388で経験されている方も多いでしょうが、大切なことなので2度言いますが
NxP製ARMマイコン書き込みの際に注意しなければならないのは電源投入->リセット後必ず
実行されるビルドインされたブートローダによるVectorCheckSumチェックです。
これはどういうものかというと特定のアドレスまでの(大抵はVector領域)のチェックサムを
とった値とさらに別の特定のアドレスの値をたして0に(2の補数をとる)ならなかった場合、
フラッシュ上のユーザプログラムを実行せず強制的にISPのアドレスにすっ飛ぶという仕組み。
(これにCRPも絡みますが細かいことは各自UserManualで確認のこと)

OpenOCD等でLPC系のARMマイコンのcfgファイルに"calc_checksum"と言う単語があるの
はそのためです。calc_checksumを有効にしているとフラッシュの書き込みアルゴリズム
の中でVector領域のチェックサムの2の補数を取った数がLPC2388なら0x00000014に書き
込まれます。これによりユーザプログラムが実行できるわけですが、今度は0x00000014に
違う値が書き込まれていることになってしまうため、べリファイが通りません…
…OpenOCDの仕様上どちら立たずなのでしょか…
JTAGkey2Cloneの時も述べましたが、どうせほとんど変更とか無いですからスタート
アップにあらかじめ自分で計算して書き込んでおけばcalc_checksum無しでもダイジョブで、
かつOpenOCDからベリファイも使用できるようになりますすみません脱線しました。


話を戻すと、上記のVector領域のチェックサムの2の補数を置くべき場所はLPC1114
では0x0000001cになります。ここにあらかじめ計算しておいた値を書いておけば良いです。
LPCExpressoにビルドインされているLPC-Linkフラッシュライタは自前で計算&書き込み
できます。VersaloonもVSProg上では"-A"のオプションを付けることにより対応可能になり
ますがOpenOCDで使うときの為スタートアップコードに書き込んでおきました。
SimonQian氏のサイトを見てると、もうそろそろOpenOCD0.5.x系にも対応するよ〜な記述が
みられますね…。自分の使いやすい環境で開発するのが一番なので今後の対応を
期待しています!

てわけで基本のLED点滅のソースを…ご利用は自己責任で…
un

次はLPC1769でもやってみましょか…

いないさんのおしりに顔をうずめてくんかくんかしたい

※今日の日記は7月上旬くらいまでの内容です

(いないさんの)ぱんつだけカフェ…ぱんつだけカフェ…ぐふふ…
……おお失礼、ここ最近会社近くのカプセルホテルで寝泊まりするような生活になって
から意識が夢うつつな状況が多くなって…(注:6月末〜7月上旬の頃の話です(重文))


最初はTFT液晶モジュール使ってなんか作るのが目的のはずでしたが今やいろんな種類
のモジュールを手にいれて動かすこと''だけ''が目的になってしまっています…。
でも8~16bitバスorSPI制御タイプのモジュールはあらかたやりつくしたのでそろそろ次
の段階に進もう か な と思っています(←同じこと言ってばっかですがー)


さて今回も、前回taobaoやaitendoで購入した液晶モジュールの火入れをやってきたい
と思います。まずは国内でも売られているのでご存知の方も多いでしょうけど3.5inch,
QVGAな少し大きめのモジュールを…。


un
コントローラICはSSD2119。8,16bitバス&SPI&(改造でRGB)も制御に使用できます。

un
いつものごとくSTM32で…powerMCU製のTFT液晶モジュール基板はコネクタに出ている足
配置が2.8,3.2,3.5"とすべて共通で、後はプログラムをこさえるだけなので楽です。
…と思いきや3.5"のモジュールだけタッチパネルのPENIRQポート番号が違ってました!!
いやぁ慣れって怖いですねぇ…(しれっと)

un
てわけでタッチパネル制御も…コンパイルオプションでタテヨコ対応です。STM32ライ
ブラリのバージョンも上がったことだしそろそろSTM32/LPC2388用の液晶モジュール
制御プログラムも更新しましょうかね。

液晶モジュール&SSD2119のデータシートを眺めているとこのモデルは上記CPUバス・SPI
バスインターフェースの他にもSH2Aで使えるRGBインターフェースも使用できるようです。
ただし基板には足が出ていないので自分で残りの足が出るように改造する必要があり
ますね。まぁこちらは追々と…。



un
次に3.0inchでWQVGA(240x400)の縦長なLCDモジュールです。これはモジュールのデー
タシートを貰うことができませんでしたが、ネット上には同じ型種のモデルが存在し
ピン配置も容易に推測できます。IM0,IM1が外部に引き出されており、8bit,16bit,
18bitCPUバスで制御可能です。コントローラはR61509Vだそうです。得体が知れないの
でタッチパネルが無い安い方を購入しましたが案の定バリバリのユーズド品でした…。

16:9のWQVGAな画面を利用して某シングルCDのジャケットを…ドンピシャの画像…

un
今の若い子って(まぁ私もわかいですけお)シングルCDとか知ってるのかしら…あ、
…失礼、さぁ次、次…(使ってるうちに反射板が剥がれました。なんじゃこりゃorz)



最後にaitendoさんで20%引きセールやってた頃に購入した0.94inch,96x64ピクセルの
OLEDモジュールALO-095BWNN-J9を。こちらはキャリーボードとセットも販売されて
いて、なぜかセットで購入した方がOLEDモジュール単体で買うより非常に格安でお得と
なっています(2010/07/05現在)
…???何で??値段設定間違えてる??それともセットのはなんかの不具合品??

まぁいいや、STM32でとにかく動かしてみました。現在Lynx-EyED氏も活用されていますね。
このモジュールは8bitCPUバスでも行けますがピクセル数が少ないのでSPIの方が
繋げる線も少なく楽でしょう。

un
un
ちっさ!めっちゃちっさ!…いつも3.2inchとか弄ってるのでやたら小さいです。

それとLynx-EyED氏も経験されてしまってるようですが、私もOLEDは焼きつくという事実を
すっかり忘れてしまっていて、冒頭のいないさんの臀部の絵を表示したままうっかり
放置して焼きつかせてしまいました!!!みんなも気をつけよう!



…とまあ液晶モジュールはこのくらいにして次回は塩漬けにしていた各種評価ボードを
消化していこうと思います。


まずはCortex-M0なLPC1114のボード…

つずく

ペプシバオバブ

20101228追:
MCUバス接続タイプのTFTLCDモジュールを動かしたい奴は必ず読め!!11!



※内容的には4月下旬の頃ものです。古いです。

un
ぉ…結構いけるじゃん!
何時も二度と飲みたくないような味だったのにこれはイケるんじゃないでしょうか!?
コンビニにも今も置いてます♥


とりあえず生存確認の為に月一くらいは更新したかった今日この頃(駄目だったけど)。
春先にtaobao経由で安価な電子デバイスをたんまり購入しました。主な目的はaitendo
でも未だ手に入らない3.2inchの液晶モジュールだったわけですが壊したれたのと
全く同一の物が運よく見つかったおかげで復活しました。


un
●牙復ッ活ッ!刃●復ッ活ッ
考えて数揃えて買うと輸送量+手数料合わせても国内で少量買うより滅茶苦茶安く
つきますね…感動的だな。

ついでに目を引いた幾つかの液晶モジュール(そうだよまただよ)も買ったのですが、
これには罠が待ち受けていました…。


un
先ずはこれ。上で述べたものとは別の種類のさらに安価な3.2inchのTP付きな液晶モジ
ュールで、交渉のさいにモジュールコントローラICをILI9320と指定して購入しました。
しかし…実際に届いたブツはILI9320用の初期化コードではどうしても動かず、コントローラ
のIDを読みだしたりして(JTAGkey2+OpenOCD+insightのデバッグがすごく役に立った)
調べた結果、R61505UというILI9320と一部動作互換のICであることが分かり、モロに
足止めを食らってしまいました…。
一瞬フェイクつかまされたかとビビってしまいましたが、初期化手順を正しく行うとしっ
かり動いてくれて使えることがわかったので…まぁいい経験になりました。
20100817追:
3.0インチ以上は16bitバス制御しかできないモジュールが多いのですが、なんとこいつには
バス幅を切り換える抵抗が存在していました!!一気に使える液晶モジュールに!!
ちなみにaitendoの3.2inchQVGAの奴は出来ないです

un
いつもの。
un
んでもってタッチパネル(触摸屏)付きなのでBlueScreenの凡例をお手本にさせてもらっ
てタッチスクリーンセンサADS7843を使用したタッチパネル入力化にもやっとこ対応。


un
次にこちら。QVGAなLCDモジュールで国内でも手に入りやすく扱いやすいものは8/16bitの
CPUバスな物しか選択肢が有りません。こちらはそれに加え、なんとSPI/RGBインターフ
ェースによる制御も可能な一品です!いろいろできそうだと勇んで6個くらい購入してし
まいました!しかし…
実際に使用してみてわかったのですが、動作が安定しません…具体的にどういうことか
というと電源投入して約5秒以内に初期化動作に入らないとコントローラIC(LGDP4531)がや
たらと過熱しだして暴走状態になり、何やっても画面が真っ白のままとなってしまいます。
そしてその状態に一度はいるとモジュール内の残存電圧が抜けきるまで電源落としてほ
っとかないと電源再投入後また即暴走の憂き目に…。

私にも落ち度があるのかと↓の項目いろいろ試してみましたが改善しませんでした…。
未使用ピンを全部GND直結->×
未使用ピンを全部VCC直結->×
スタンバイモードになってなくてもとりあえず強制解除操作->×
RESET端子にRESETICを付けてPOR出来るようにしてオープンドレインで制御->x
マイコンのVCCを3.3Vから2.8Vに落とす->×
MicroChipが配布しているグラフィックライブラリのLGDP4531用初期化コード->x(オイ)

同モジュールが乗った出来合いの基板も購入したのですが結果は同じでした。つまり
モジュールそのものに問題があるっぽいです…。(初期化手順が不完全なだけか
もしれませんが、これ以上は情報が少なくて手出しができません)このモジュールを使用して
いる他の方も(Unstable)とされてますから同じ問題に直面されているようですね…。

まぁ一応電源投入してすぐに初期化動作を行うということを守れば言うこと聞いてくれる
ので、自分の中でだけテストするのであれば問題ないのですが…現時点ではこれ使って
売り物製作るのは無理っぽorz 以下にいくつかのモードで動かした画面をば…。

un
↑STM32F107VCT6でソフトウエアSPIモード
READして帰ってくるデータのバイトオーダーがデータシートの記述と違うんだが
…おいおい

un
↑STM32F107VCT6で16-bit,i8080cpuバスモード。出来合いボードの方。
ゆっこちゃんかわかわ

un
↑LPC2388で8-bit,i8080cpuバスモード,伝説のデス○リOP動画再生。
LGDP4531はさきに紹介したR61505Uと同じくILI932xと一部動作互換です。
動作不安定なトコ以外は。なんとかならないだろうか…。


つづく

Go to top of page