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


TFT-LCD Shieldの開発に当たって、ねむいさんもついにArduinoを購入しました!
最初はEtherpodのプラットフォームだけで動かすことしか考えてませんでしたが、
HP200LX持ってないのにmorphyone作ろうとして盛大にコけたどこぞのぺ○野郎のこと
が頭よぎったので、ちゃんとArduinoを理解してライブラリも作れるようになるために
購入しました…。まぁSTM32ですでにできたことをAVRに移すだけですから驚くほど
簡・・・た…

ごめんもう白旗上げていいかな…(※xmegaの二の舞)
ところでxmegaで思い出しましたがxmegaでFatFS(のMSPI)をDMA化出来たという話を
全く聞きません。情報もってる人がいたら教えてください…

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





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


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


↑即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の使用を前提にされていて、
ねむいさん的にも好都合です。手順に従い、程なくバイナリを生成出来ました。


バイナリの書き込みはもちろん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
みたく高速書き込み/ベリファイはまだ出来ませんが、そちらも使い込むに
つれ対応していきます。


↑LED点滅プログラムが動いてるところ。

↑JTAGkey2Clone+OpenOCD+Insightでのデバッグも自在です。

↑NxP提供のCMSISのExampleはLPC1768向けになっており、
 それをそのままビルドしているので,動作周波数はまだ100MHzです。


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


おまけ


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



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
の地雷を故意に仕込むことも可能なのでとてもお勧めですが絶対にやってはいけません!


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


なんと少し前にLPC1xxxシリーズもSWD接続・フラッシュ書き込み対応に
なっています!!

…でもまだちょっと不安定。さらなる改善を期待します。


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点滅のソースを…ご利用は自己責任で…


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

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

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

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


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


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



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


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


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

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




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

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


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



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

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



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

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



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


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

つずく

ペプシバオバブ

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



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


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


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



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

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



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


いつもの。

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



次にこちら。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)とされてますから同じ問題に直面されているようですね…。

20190726追:
9年の時を越えついに安定動作せしめる方法が判明しました!!!!!!!11!!1
3.3V系ならばLGDP4531のLCDに供給する電圧をシリコンダイオード
とかで0.6V分おとして2.7Vくらい、2.8V以下で駆動させればOKです!!!!
こんなん分かるか!!111!!!!
20190726追:

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


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


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


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


つづく

Go to top of page