LPC4330を使ってみる2 -OpenOCDでSPIFI-SPIROMに書き込む-

先日秋月さんからもLPC4330-XplorerLPC1830-Xplorerが販売されたわけですが、
ななんとデバッガハードウエアのULINK-MEもついて6200円ですって!本体+DHLの
送料合わせて1万ちかく払って半分壊れたのよこされた私はなんだったのか!?あと
たった2週間ちょっとまてばULINK-MEゲッツ出来たじゃないか!と悔やんでも仕方が
ないのでホビイストとしては手元にあるものを100%活用していこうと思います。特に大将
からご指名受けてしまい放り投げることもできないのですがFatFs実装はあつをさん
おねがいいたします(パタ


さて、LPC4330-Xplorer上ではSPIFIというインターフェースでマルチチャネルI/O対応
のSPI-ROMとLPC4330とが繋がっています。
LPC4330は起動オプションによりこのSPIFI-SPIROMから直接起動&プログラム実行&
リニアな参照ができるというなかなかニクい機能があるわけですが、内蔵フラッシュを
持たないLPC43xx・LPC18xxはどうにかしてこいつにプログラムを書き込まなければ
なりません。有効と思われる方法は以下の2通り。
1.付属のULINK-MEを繋げてKEILのIDEを使ってプログラムをSPIFI-SPIROMに書き込む。
 ↑ULINK-MEもってないので却下。
2.DFUブートローダー経由でSPIFI-SPIROMに書き込む
 ↑情報が出そろってませんがいずれ試します…。
  RAM上には流せられるのは確認しました。


OpenOCDは実はSPIFI-SPIROMの書き込みにすでに対応していましたもちろん公式
にはコミットはされていないので自分でパッチ当て+再ビルド必須ですが、私の試行した
限りではいい結果を得られたので上述の確実な2通りに"もう一つ"追加したいと思います。

20120927追:
公式のコミットにも上がりました!


今回はこのOpenOCDを使った方法をご紹介します。


●その前にGCCでコマンドラインビルド可能なLチカるプログラムをこさえる
前回の時点ですでにOpenOCDにつなげて最初に書き込まれていたSPIROMの内容
のバックアップは取っていましたが自分でこさえたのをやっぱり書き込みたいよねと
いうことでいつもののLPC4330版を見据えたベース作りを行います。

LPC4330のSRAM+SPIFIの構成は以下の図のようになっています。

LPC4330コアの最大周波数204MHzでアクセスできるLocalSRAMは合計で200kByte
ありますがご覧のとおりアドレスは連続になってはおらず、128kByte・72kByte分で
ぶつ切りとされています(AHBRAMは構成的に64kByte分すべて連続アクセス可能です)。

SPIFIから実行した場合,104(MHz)/2(Byte)の読み取り速度のボトルネックがあります
ので見かけの動作速度は超大雑把に見積もって30MHz以下になっちゃいますが、ひと
まず一番単純な構成でプログラムも組み易いEXECUTE FROM SPIFIなメモリプラン
を構成しLチカプロジェクトを組みました。

…やっぱLocalSRAMはSH2Aみたく1MByteくらいほしかったなーと感じますね。これ
100PinのチップですからSRAMもSDRAMも外に引き出すのがまた面倒ですし。実際に
204MHzの動作速度を生かしつつ何か作ろうと思ったらプログラムは128kByte以内に
必ず納めてフォントやテーブルなどの比較的低速でもよい大容量データは全部SPIFI
にうっちゃる等の工夫が要求されるでしょう。

SPFI-SPIROM上動作版のリンカスクリプトの冒頭はこんな感じになってます。


●OpenOCDで繋げて書き込む
現在のOpenOCD0.7.0では公式のソースにSPI-ROMとNxP固有のSPIFIドライバのパッチ
をあてて再ビルドする必要があります。私のぶろぐ上で提供しているOpenOCDのWin32bit
版バイナリ
はこのパッチを適用しています。(下述の書き込みスクリプトも同梱してます)

今回使用するデバッガハードウエアはJTAGKey2Cloneとします。後述しますがLPC4330
のエラッタにより外部リセットの直接操作が非常に重要となるのでリセット(SRST)が使える
ブツが必須です。
それとお気の毒ですがULINK-MEはOpenOCDにハードウエアレベルで対応していない
ので、一切使えません(ファームを書き換えた初代ULINKだけ可能です)!


さて、いよいよSPIFI-SPIROMにプログラムを書き込みます。SPIROMの消去を含む操作を
するためにはFlashのプロテクト解除を必ず行う必要がありました。これを省くと書き込み時に
エラーを返されて失敗します。

↑20130814追:少し前のコミットで修正されました。

↓書き込み時のメッセージは以下のようになります。
 書き込み直後にSRSTを直接操作して外部リセットを2度かけています。
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/ftdi/jtagkey2.cfg -f target/lpc4330_xplorer_spifi.cfg -c "mt_flash_bin main.bin 0x14000000"
Open On-Chip Debugger 0.7.0-dev-00001-ga4830e7-dirty (2012-09-24-10:03)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m3 reset_config sysresetreq
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
adapter speed: 2000 kHz
Info : clock speed 2000 kHz
Info : JTAG tap: lpc4330.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4330.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Info : lpc4330.m4: hardware has 6 breakpoints, 4 watchpoints
Info : lpc4330.m0: hardware has 2 breakpoints, 1 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x10000428 msp: 0x10091fe8
background polling: on
TAP: lpc4330.m4 (enabled)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x10000428 msp: 0x10091fe8
Info : Found flash device 'sp s25fl032' (ID 0x00150201)
cleared protection for sectors 0 through 63 on flash bank 0
auto erase enabled
wrote 65536 bytes from file main.bin in 1.062507s (60.235 KiB/s)
shutdown command invoked
Polling target failed, GDB will be halted. Polling again in 100ms


なんでわざわざSRSTを直接いじっているかというとLPC4330-Xplorerに乗っかってる
チップのリビジョンは内蔵されたSPIFI-ROMドライバがPOR後の外部リセットした後の初期化
で必ずコケて次の外部リセットで正常に動くというイミフなerrataに起因してます。
こいつのせいで今までうまくいった正攻法が全く通じずワークアラウンド満載な
書き込みスクリプトにせざるを得ませんでした。
まぁ結果的に安定したからOKということにしましょう。因みSRSTを繋げてなくてもSWD
接続のversaloonやSTLink/V2で書くことはできますが、この場合いちいち主電源を入り
切りする必要が生じ面倒です。

また、デバッグ中に変なステートに落ち込んでJTAGのアクセスが一切不能に陥ることも
あります。この場合はディップスイッチでブート方法を別の経路にして電源を入れ直すと
ひとまずJTAGで繋がるようになるので落ち着いてSPIFI-SPIROMの内容を全消去して
ください(その後はブート方法をもとに戻すのを忘れずに)。


●OpenOCD+Insightでデバッグ

最後の仕上げにOpenOCD+Insightでソースコードデバッグできる環境も作りました。
こちらもワークアラウンド満載でgdbにattachしたときにsoft_reset_haltをかけてプログ
ラムの先頭で停止するようなトラップを仕掛けてます。

SPIFI-SPIROM上のプログラムを直接参照できるのでとてもありがたいですね♥
もちろんいつものIOViewでGPIOのビットの状態も一目でわかります♥
ちなみにGPIOの初期設定の時にInputBufferを有効にしておかないとピンの状態が一切
読めませんのでご注意ください!(普通のプログラムでも引っかかりやすいポイントです)


●SPIFI-SPIROMからブートしてSRAM上で実行してみる

SPIFIから実行すると大幅にパフォーマンスが下がってしまうので実際に使えるレベル
で試用するならばLocalSRAMからプログラムを実行する必要があります。SRAMの構成上
プログラムと初期設定値があるデータと合わせて128kByte以内に収めないといけない
制約が出来てしまいます。したがって大容量のフォントorデータテーブル等はSPIFI
におきっぱにしておくべきです。

今回はPCと連携せずにスタンドアロンで起動し、SRAM上で実行できる環境を拵えます。
原理としてはきわめて原始的なブートローダをSPIFIに仕込む形になりますが、大まかに
いうと以下の流れで行います。

1.SPIFIのアドレス(0x14000000)からブート

2.Reset_Handlerに飛ぶ(けどアドレスはまだSPIFI上の0x1400****)

3.".text"〜".data"の領域までLocalSRAM(0x1000000)にコピー

4.PCをSRAM上に指定してジャンプ

5.BSS領域をゼロクリア・各種クロック・I/O設定

6.main()に飛ぶ



"4."の部分がミソなわけですが実際のアセンブラのコードを見てもらうと…

一見無意味なことしてるように見えますがその場(SPIFI上)でジャンプすると着地点が
LocalSRAM上になりそのままSRAM上で何事もなくプログラムを継続できる仕組みに
なるわけです。
もうお気づきの方いると思いますが大昔AT91R40807でやってたことと全く同じですね。

また、上記のからくりを実行するためにはbin形式でSPIFI-SPIROMに書いてやる必要が
あります。LMA/VMAの情報を保持しているelf・ihex形式だと失敗しますのでご注意を。



ということでLPC4330-Xplorerもこちらこちらに準拠したビルド・デバッグ環境をこしらえ
ました。あとはどんどん上位層のプログラムを作りこんでいくだけです!


20121003追:
GCCビルド可能なLED点滅(シングルコア動作)プログラム公開します。

LPC4330はぢめました -まだLチカもできない-


積み基板どころか"詰み"基板になるのが分かっていながら人はなぜ、何故、同じ過ちを
繰り返してしまうのだろうか?



…しかしねむいさんはLPC1788にMCI版FatFsを移植を行ったので十分挑戦権があると
自負しています!日本のアマチュアでは今度こそ一番乗りで(あつさんがすでに触ってました…)LPC4330
搭載されたLPC4330-Xplorerの使用感を報告させて頂きたいと思います!!
この基板インド製だそうですがもう時代は中華大陸飛び越えてインドですよインド!


さて、この基板はNxP社肝入りのCortex-M4F+CortexM0のデュアルコアが搭載された
最新のマイコンLPC4330が搭載されています。最大動作周波数はCortex-M系最高速の
204MHzに上り(M4,M0コアの両方とも)、クアッドSPIが使えるインターフェース"SPIFI"も
搭載されています。


USB-HSのPHYもLPC4330内に搭載しており(USB0のみ)、外付けHS-PHYも必要ありません!
もちろんねむいさんのいつものに必要なMCIインターフェースもあります!


んでもって基板の構成ですがSTM32F4Discovery宜しく音アプリを強く意識した構成と
なっていてAudio-CodecやEthernet-PHYも実装されています。さらに基板上にMicroSD
カードコネクタやSPIFI用のシリアルROMも乗っていてFatFsの移植も少しは楽になり
そうですね♥



さぁケーブル繋いで通電だー!と思ったのですが良く見るとコネクタがなんだか変…






写真分かりづらいですが無理やりねじこんだように金具の上側が微妙に曲がってます…



そして付属ケーブルの口見たらこんなになってやがりました…
注:最初からこんなになってました。ねむいさん壊してないですよぅ!
  もちろん刺さりませんorz



もうナン持ってイェェと叫びたくなるのを我慢してさらに基板をよく見ると
手半田で修正した跡がありDIPスイッチが溶けてLEDが焦げてました…
もうダブルオドロキですよねほんと印度クオリティすごいってまたひt


インドのNGXから直接購入したので修理交換の手間と金が非常にかかってしまうと感じ、
結局自分でコネクタ・LED他の付け替え修理を行いました。
LPC4330-Xplorerに実装されたmicroUSB-Bコネクタとほぼ似た形状の奴をtaobaoで購入
しており、スムーズに付け替えは完了しました。ちなみに秋月さんちで売ってるタイプの奴
はコネクタを挿す向きとピンの並びが逆のため付け替えができません!ご注意ください。


LEDの交換ついでに3.3VのLDOもMLCCが使用可能なZLDO1117に換装しておきました。
最初に付属していたUSBMicro-Bのケーブルは捨てて手持ちのを使います。

後はチュートリアルに従いVcomのドライバ入れて基本操作を確認しました。

NGXのチュートリアルにはUSB0サイドのUSBHIDデバイスは挿したらすぐに動くように
見られますがまずUSB1サイドをPCに刺し、その次にUSB0サイドをPCに刺し、最後に
SW2を押すとUSB0サイドのHIDデバイスとして認識されるようになります。



またSW2を押した後は仮想COMポート上で上画像のように各種チェックルーチンが
走るようになっています。


同時にEtherNetもアクセス可能です(192.1681.1.123固定なのでご注意下さい)
LEDの操作がブラウザ上から可能になっています。



最後にJTAGで繋いでみてOpenOCDからどう見えるか確かめてみました。
LPC4330-XplorerのJTAGコネクタがちいさ過ぎてTI-StellarisのICDI付属のケーブル
しかピッチが合うのなかったので、JTAGkey2Cloneの代わりに急遽これを使いました。

↓で繋いだ状態はこんな感じに…
openocd -s C:/Devz/ARM/OCD/tcl -f interface/ftdi/luminary-icdi.cfg -f target/lpc4350.cfg
Open On-Chip Debugger 0.7.0-dev-00001-ga4830e7-dirty (2012-09-10-17:57)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 500 kHz
cortex_m3 reset_config sysresetreq
Info : clock speed 500 kHz
Info : JTAG tap: lpc4350.m4 tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4350.m0 tap/device found: 0x0ba01477 (mfg: 0x23b, part: 0xba01, ver: 0x0)
Info : lpc4350.m4: hardware has 6 breakpoints, 4 watchpoints
Info : lpc4350.m0: hardware has 2 breakpoints, 1 watchpoints

確かにCortex-M4とCortex-M0のふたつのコアが見えてますね〜

ほんとに触っただけというかそれ以前のやっと修理したばっか状態なのでLチカ
すらも進んでませんが、豊富なサンプルをベースにいつものを作っていきます。

GPSを試用する7

20140328追:
最強のGNSSモジュールGms-g9をゲットせよ!



PA6Cのバグフィクスされたカスタムファームウェアが出回り始めたので私も更新してみました。
失敗すると即お陀仏になるので今までのもので問題ない人にはお勧めしませんが…
検索エンジンで"pa6c 5173"って呪文唱えたら幸せになれるかもしれませんよぅ
20121012追:
"AXN*.**"のうち"AXN"の文字列に続く"*.**"の数字が上がるメジャーバージョン
アップまではむやみやたらに手出さない方がいいです。




ファーム変更前。デフォルトのボーレートは9600bpsでした。

ファームを変えるとデフォルトのボーレートが38400bpsになります。
ファームウエアのファイル名にボーレートを示唆する数字が明記されてますので間違える
ことはないと思いますが…。
また、MT3339Tool等でAGPSを設定する時は設定完了後強制的にデフォルトの38400bps
になるのでボーレートの再設定は必ずするようご注意ください!

そんでもってちょうどいい機会なのでSTM32Primer2を使ったGPSロガーのファームウェア
も更新してみました。
追加したのはGPSロガーのタスクが起動したときに強制的に9600bpsに変更するのとPA6C
固有コマンドのAIC(Active Interference Cancellation)を投げるようにしました。私が使い
込んだ限りでは、ボーレート以外に基本設定の変更は変わってないので他の所は一切
触らないようにしています。

いっそ38400bpsに変えちゃってもいいかなと考えていましたがGT-723FやUP-501の差し替え
の利便性も考えて今まで通りの9600bpsでやり取りするようにしました。ちなみにG-TOP
提供のMT3339 Toolではボーレートの変更ができないので有志の作成したMTK系の
ツールからの変更や私のようにマイコンの制御の最初でコマンドを直接送るようにしましょう。
また、せっかく変更してもバックアップ電源を供給してないと主電源を落とした時に設定が
初期に戻ってしまいますのでご注意を(UP-501も同じ)。



↑というわけでGPSモジュールのファームもSTM32のファームも新しくしたGPSロガーを
 実際に使用してみました。橿原神宮駅からスタートして橿原神宮内をぐるりと廻った
 軌跡です。当日は薄曇りで時間は16時より。QZ-Visionで確認するとちょうど真上に
 みちびきがある状態でした。

カシミール3Dのキャプチャ画面に変更予定です。

因みに古いファームと実測比較しなかったので何が改善されたか正直よくわかりません
でしたごめんなさいorz(だって戻せないんだもん)おまけにGoogleEarthだと橿原神宮の周り
は解像度低くて何がなんだかorz 何やりたかったんだか私。

まぁMTK系のGPSチップのファームウエアはAXN*.**の"*.**"で大幅変更がかかるので
現在出回ってるのはカスタマイズ設定をデフォルト値にした+α程度だと思いますよぅ…


11月半ばまでトレランのような激しい運動できないのですがウォーキングは出来るだけ
続けてます。以前は通り過ぎるだけだった東海自然歩道沿線にあるお寺をゆっくり
歩いてめぐっています。
あ、4方向+1スイッチに付けてる丸いのは誤操作防止のガードリングでペットボトルの
飲み口を加工してやっけつで作りました。


はてさて、201209中旬現在でも一般レベルでみちびき(QZSS)を手軽に使用できるモジ
ュールはPA6C以外に解が無いのですが、u-boxからは今年四月にQZSS+GLONASS対応
のアンテナ無しユニットが出てきました。パッチアンテナ付きのが出るのも時間の問題
でしょうね。私の興味はGPS用のヘリカルホイップにも向き始めたのでその間にPA6H
にも手を出すことになるかもしれません。

20120918追:
BeachBoysの名曲「Sumahama」の"スマハマ"は須磨海岸のことだったことが判明したので
ウォーキングがてら行ってきました。ねむいさんずっとマイク(ラヴ)さんがスハマ(sand beach)
と勘違いしていたものと思い込んでました作曲したラヴ先生ごめんなさいっ!


♪スマハマ そこは恋する人たちが 手に手を取って歩いた 綺麗白い浜


♪いついつママ スマハマにいつまた行くの 過ぎた愛を探しにいく海の彼方 スマハマ


♪スマハマ 秋に木(き)の葉が散るように 寂しく哀しい恋の歌 スマハマの国から


そんな感じで須磨海浜公園の海水浴場の海岸線をなぞるように歩いてきました。
山陽須磨駅付近の込み入った住宅街ではやはりちょっと精度が落ちましたね〜。
いつの日かGPS補強信号も獲れるモジュールが出来、QZSSも更に軌道に投入される
ようになったらこのへんどこまで改善できるのでしょうか期待です。

LPC1114を使ってみる3

こちらこちらの記事に続いて通算3つ目のLPC1114についての記事です。

前回述べたとおり秋月さんよりLPC1114のDIP版が180円で販売されて私も購入しました。
"どうせLチカ(LED点滅の意)で終わらすんだろ"とお思いの方が大多数とは思います。
その通り私はDIP版LPC1114をLチカせしめてこの記事を書くためだけに購入しました!
と、すべてに対する防御壁作ったところで今日の本題に入ります…。


●DIP版LPC1114のいいところ
1.ブレッドボードに最適なDIP28Pinなのはいいのですが600mil幅という無駄な広さ
 
 IOとかSRAM削ってる(後述)くせにこの広さって…"ほらDIPにするとこんな
 無駄にでかくなっちゃうんだよみんな面実装の奴使おうね★"というメッ
 セージなのでしょうか…

2.SRAMの容量がTQFP48Pin(面実装品)の物から半分に削られた
 "TQFPパッケージは8kByteも使えるよみんな面実装の奴使おうね★"という
 メッセージなのでしょうか…

3.I/OピンがTQFP48Pin(面実装品)の物からいくつか削られた
 "TQFPパッケージはもう少しI/Oピンが使えるよみんな面実装の奴使おうね★"
 というメッs もうええっちゅうに

LPCXpressoに乗っているLPC1114と違う点は上記DIP版はPowerProfileが追加された
第二世代のLPC1100Lにカテゴライズされる製品となってます。現在はLPC1100XLまで
ラインナップされています。


●Lチカる
基本的にLPC1114のソースコードがそのまま転用できますが、上述のとおりSRAMが
4Kbyteしかないのでスタックの値は要調整です。私の公開してるプログラムはMARYにも
対応してる(内部RCをPLLのソースとする)ので取り合えず定義をこちらにしてやればVCC・
GND・SWDIO・SWDCLKのたったの4本でOpenOCDから書き込み・デバッグできます。
(なぜかリンカスクリプトファイルを全くいじらず8kByteのままでもふつーに動きました…
STM32F107みたく隠しでSRAMあるのか!?)

が、

OpenOCDで繋がるってことはソースコード一行も書かなくてもGPIOくらいは動かせられる
(=Lチカれる)ってことで早速やってみました。ブレッドボードすら使いません!1!

…ねむいさんただTCLの"スクリプト"組んだだけだからねCの"ソースコード"は一行も書
いてないy止めろ石投げるな



●LPC1114(DIP版)にプログラムを書き込む
…さて、今度こそ真面目にソースコードビルドして出来たプログラムを書き込みます。
書き込む方法は何通りもあります。UARTブートローダー(ISP)を利用する場合はFlashMagic
使って書き込む・ChaN氏のLPCSP使って書き込むという方法が、さらにSWD接続においては
LPCXpressoを使用して書き込みを行う詳しい方法がLynx-EyEDあつ氏から紹介されています

私が紹介するのはおなじみのOpenOCDからSWD接続のVersaloonやSTLink/V2を使って
書き込みを行う方法です。OpenOCD0.6.0ではCortex-M0並びに一部のSWD接続可能な
デバッガハードウエアのサポートが進められています。
Versaloon使って書き込む方法はこちらこちらを参考にしてください。
DIP版のはSRAMが4kByteしかないのでLPC1114ではなくLPC11U14(←SRAMが4kByte)
と思って書き込みしてやるとうまくいきます。

↑Versaloonで使う場合はlpc11u14_swd_flash.cfgを指定すれば終わりです。


次に、デバッガハードウエアとしてSTLink/V2を使う方法ですがこちらも手順は確立
されていてVersaloon並みに簡単に書き込み・デバッグが可能です。
今回はSTM32F0Discoveryにビルドインされた物をSTLink/V2として使用します。おそ
らくCQ出版系の雑誌記事では営業的な理由で絶対にお目にかかれない内容なので
私が紹介してる方法は貴重なものになるかと思います。



↑外部にSWD線・電源線を引き出す準備です。


lpc11u14_stlink_flash.cfgを選択。
20130501追:
時代は変わり、STLink/v2以外にもベンダ提供APIが使えるデバッガが出来てきましたので
現在はlpc11u14_hla_flash.cfgに変更しております。
-f lpc11u14_stlink_flash.cfg から

-f interface/stlink-v2.cfg
-f target/lpc11u14_hla_flash.cfg

と読み替えてください。

20140829追:
さらに時代は変わりました。
HLA系のデバッガアダプタの使用例はこちらをご覧ください。

ねむいさんのぶろぐで公開しているOpenOCDバイナリはすでにこのコンフィグファイル
は含まれております。また、今回のDIP版LPC1114やLPC11U14等の少SRAMの品種の
書き込みに対応するためにlpc2000.cへのパッチは必須となりますが、ねむいさんの
OpenOCDバイナリはパッチ済ですので安心してお使いください。

20130314改変:
OpenOCDからSTLink/V2を叩く時のデバイスドライバはSTマイクロ提供の物
そのまま利用可能です。逆に以前使用していたLibUSB(libusb0.1系)は廃止し
使用不可能なのでご注意を!



↓にSTLink/V2で書き込んだときに表示されるメッセージを置きます。
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f target/lpc11u14_stlinkv2_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.6.0-rc1-dev-00015-g47728f9-dirty (2012-08-29-17:12)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
1000 kHz
none separate
250 kHz
Info : clock speed 250 kHz
Info : lpc11u14.cpu: hardware has 4 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x1fff0040 msp: 0x10000ffc
auto erase enabled
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000b4
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000b4
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x81000000 pc: 0x10000004 msp: 0x100000b4
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000b4
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x81000000 pc: 0x10000004 msp: 0x100000b4
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000b4
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x81000000 pc: 0x10000004 msp: 0x100000b4
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000b4
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x81000000 pc: 0x10000004 msp: 0x100000b4
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000b4
wrote 4096 bytes from file main.elf in 0.468753s (8.533 KiB/s)
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x100000e2 msp: 0x10000ffc
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x100000e2 msp: 0x10000ffc
verified 1580 bytes in 0.062500s (24.688 KiB/s)
shutdown command invoked


フラッシュメモリの容量が32kB程度なので速度もそれほど必要ないかと思います。

異なる会社間のツールが使用できるのか!?
そもそも出来たばかりの未知のチップに書き込みができるのか!?
否、出来る、出来るのだ!集中線のフォーカスが明後日の方向いてるけど!

20130427追:
↓うまく書き込みができない場合の確認事項↓

1.そんな結線で大丈夫か
  ->もう一度ターゲットとSTLink/V2のSWD信号がちゃんと繋がってるか確認!
   そんな基本的なこと間違うわけないだろって奴に限って間違ってます!

2.そんなDiscoveryのジャンパ設定で大丈夫か
  ->STM32L/F4/F0DiscoveryにビルドインされたSTLink/V2はデフォルトでは
   STM32側に繋がってます。ジャンパを必ず外しましょう。
   STLink/V2はマルチドロップSWDに対応していないため通信がこけます。

3.そんなVtgtで大丈夫か(←これで引っかかる人多し!)
  ->V17以降のSTLink/V2のファームはvtgtをきっちり合わせないと撥ねられて
   書き込みが失敗します。かならず接続しましょう。
   STM32L/F4/F0DiscoveryにビルドインされたSTLink/V2ではVtgtからAD入力
   に繋がる抵抗が未実装なので回路図をよく見て100ohmも必ず実装しましょう。


おなじみInsightを使用したデバッグ画面。I/OもIOViewも楽々操作です♥


上記の操作をすぐに試すことができるLPC1114DIP版向けのプロジェクトファイルはこちらです
ビルド手順はこちらを、デバッグ手順はこちらを参照してください。


●大事なことなので何度でも言います
最後に注意点ですが(これも過去に何度も何度も言及していますが)LPC1114を初めて使う
際は、NxP系のマイコンに存在するCheckSumValidationやCodeReadProtectionも考慮に
入れてください。詳しい解説は本家のユーザーマニュアルに譲りますが、LPC1114では
内蔵フラッシュからプログラムを実行する場合、下図のような構成にされるべきです。


基本的に"ActiveVectorRegion"のCheckSumValidationより少ないアドレスにある情報は
ほぼ固定値となるので(変わるとしたらスタックの頭を変えるときくらい)リンカスクリプト内
でも"KEEP(hoge)"で固めておくとビルドのたびにCheckSumの値を変える必要がなく非常に
便利です。LPCXPressoやmbedではCheckSum値は書き込み時に自動計算されて書き込
まれるのでユーザーは意識しないで済みますが、上記のことを知っておかないと素でビルド
した時にLPCXpressoで動くはずのプログラムが"動かない"と詰まる羽目になります。
(実際にはISPに飛んで行ってしまいます)

また、CodeReadProtectionも0x2FC番地という場所にあってこれを厳格に定義してしまうと
0xC0~0x2FBまでのフラッシュ領域が無駄になってしまいます。よってこちらもあまり変える
ことが無い".data"や".bss"等のSRAM領域の初期化ルーチンを決め打ちで置いてやるように
すればフラッシュ面積の無駄になりません。

私が公開しているプロジェクトのNxP系のマイコンはすべて上記の考慮をしておりますので、
AVRやPICから入られた方は、一度リンカスクリプトやスタートアップファイルをじっくりと読み、
どのように組むべきかを把握しておくとのちのちに役に立つでしょう。


あ、NuvotonのNUC120のこと忘れてた…

Go to top of page