LPC1114を使ってみる3

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

前回述べたとおり秋月さんよりDIP版LPC1114が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のままでも
ふつーに動きました…STM32F107VBTみたく隠しでSRAMあるのか!?)

が、

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

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



●LPC1114(DIP版)にプログラムを書き込む
注:2019年現在はこの方法は古すぎて通用しません!
私の最新のOpenOCDバイナリに同梱されている説明書きと対応MCUをよく読み
コンフィグファイルとコマンドを実行してください!


…さて、今度こそ真面目にソースコードビルドして出来たプログラムを書き込みます。
書き込む方法は何通りもあります。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版も対応のプロジェクトファイルは
こちらです。
ビルド手順はこちらを、デバッグ手順はこちらを参照してください。
DIPに対応するにはmakefileの定義を少し変えるだけでOKです!


●大事なことなので何度でも言います
最後に注意点ですが(これも過去に何度も何度も言及していますが)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