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のこと忘れてた…

Comments

ねむいさん、ご無沙汰しております。竹本です。

Arduinoでのデバッグが面倒なので、LPC1114を使ってArduinoのようなピン配置のlbeDuinoを作ってみました。
URL以下の「Arduino勉強会/0F-lbeDuino誕生」
で紹介しています。お暇な時に見て下さい。

竹本様こんにちは、ねむいです。
ご連絡ありがとうございます。

私の方は相変わらずBare-MetalですがNxP系はLPC1788/LPC4088等
大規模デバイスのサポートを強化しておりますのでよろしくお願いします。

ねむいさん、お返事ありがとうございます。益々のご活躍に今後のブログが楽しみです。
先日、ArduinoのSDカードライブラリをLPC1114に移植する際、FATの構造体で32bitアライメントの罠にはまって8bitと32bitの違いを実感しました。
今後ともよろしくお願いします。

ねむいです。こんばんは。

Cortex-M0はunalignedなアクセスが絶対に許されないので
移植の際はご注意ください。

Post a Comment








Go to top of page