月別アーカイブ: 2013年3月

LPC1114でSWDが使えなくなったら

NYA-05は制御にLPC1114を(贅沢に)使っています。目下ファームウェアを開発中なのですが、うっかりしたことでSWDが使えなくなる事象に遭遇しましたのでメモしておきます。

環境

LPCXpresso5、OSX10.7.5、LPCXpressoを半分に切ったLPCLinkを使用してSWDにて書き込み&デバグ。CMSIS使用。

現象

SWDのクロック線に使っているポート(SWCLK/PIO0_10/ SCK0/ CT16B0_MAT2)をプログラム先頭にて下記コードでGPIOとして動作するようにしたところ、LPCLinkからターゲットが見えなくなりました。

LPC_IOCON->SWCLK_PIO0_10 = 0b11010001; // PIO0_10

さらに、なんとかしようとISPモードにしてみましたがやはりターゲットは見つからないまま。うっかりどこかのピンを短絡して焼いてしまったのかと思ったのですが、実はそうではありませんでした。

原因

「LPCLinkがSWDコネクションを確立する前にユーザコードでSWDを無効にしてしまうと、SWDコネクションが確立できなくなってしまう」ということが原因でした。当然コネクションが確立できないとターゲットが見えなくなってしまいます。こちらのドキュメント(UM10398)のP410、Fig.90にブートシーケンスがありますが、確かにブートシーケンス中にSWDの記載はありません。

また、ISPモード動作中はSWDは動作しないため、ISPモードで起動してもSWDコネクションは確立出来ません。

こちらでは確認していませんが、問題解決のためにググった限りではJTAGのピンもSWD同様ユーザコードで使えなくすると認識されなくなってしまうようです。

対策

一度SWDを殺すユーザコードを書いてしまうと、UARTやUSB、CAN経由のISPを使わないとSWDを復活させることが出来ません。今回のケースではUART経由のISPを起動して、FlashMagicを使って修正後のファームウェアを書き込み事なきを得ました。ISPはユーザコードでどのように設定していてもCRP(Code Red Protection)で殺していないかぎりは使うことが出来ますので、SWDがいくら便利でもISP書き込みができる環境は別に用意しておくと良いでしょう。

根本的には、SWDでデバグしたいターゲットであればSWDのポートはSWD以外に使わないのが一番いいように思います。SWDを書き込みにしか使わないのであれば、起動時に数秒のウェイトを入れるとそのウェイトの間にLPCLinkがターゲットを掴むので書き込みだけ可能、という形にもできるようですが今の所未検証です。ただ、LPC8xxのようなピン数の少ないデバイスを使うときにはウェイトを入れるようなテクニックは大切になってくるかもしれません。

教訓としては、ひとまず基板を起こすときはUARTのピンは出しておく、PIO0_0(RESET)、PIO0_1(ISP)は必ずあけておいてタクトスイッチをつけられるようにしておく、SWCLKとSWDIOは使わないでおく、という感じでしょうか。

色々検証いただいた@tedd_okano氏、@ytsuboi氏に感謝、です!

実装機位置決め精度

引き続き誰が得するのかわからないメモ。

TM220Aは光学式位置補正がありません。そのため、購入前にもどの程度の精度でパーツを配置できるのかは気になる点の1つでした。ということで、どの程度の位置精度が出るのか試してみました。参考になる人は僅かだと思いますが、使用したデータをお見せします。1番のフィーダに1608のパーツが入っていれば試すことが出来ます。読み方、書き方はswitch-scienceのwikiのこのページに書いてあります。

で、これを動かすとこんな感じに配置されました。例によって動作速度は50%で動かしています。

TM220A 位置決め精度

一部、0.2mmほどずれているように見えるのもあって気になるものもありますね。この辺りはリール側の隙間の都合などもありますし、ノウハウの蓄積が重要になってくる部分でしょう。ひとまず1608より大きな部品ならさほど問題なく配置できそうな気がします。

次はQFN/QFP部品の配置、でしょうか。引き続きテストしていきます。

後日追記:

気になって、とりあえず重ねてみました。こんな感じです。参考まで。

tm220a-accuracy

さらに後日追記:

1005も載せてみました。どうもこれを見る限り、設置位置がぶれる理由のうち、リールのポケットと部品の間の遊びに起因するものが大半、のような感じがします。参考まで。

TM220A-1005

 

実装機動かしました

さて、昨日に引き続き実装機の話。

早速実装機を動かしてみました。といっても、本体に付いてきたテスト用基板に両面テープを貼って、そこにテスト用データを使って動かしてみただけです。

机の強度が足りず、100%速度で動かすと机が激しく揺れて設置精度が落ちてしまいます。そのため、ひとまずこの動画では送り速度を50%にして動かしてみました。それでも24個の部品を1分ほどで載せることが出来ます。
メーカの仕様によれば、TM220Aは時間あたり7000個近くの部品を載せられるということですので、そこからするとこの動画はまだ本気の1/5程度の性能しか出せていないことになります。NYAMFGでは他の行程がボトルネックになるのでそこまでスピードを上げることもないと思いますが、たとえば1枚の基板に大量にLEDを載せるようなときにはこの性能が役に立ちそうな予感がします。

また、中国製品にありがちなことではありますがピックノズルの1つに支障がありました。どうもノズル構造のどこかに大きな気密漏れがあるようで、正常にピックしたことを検知出来ずエラーになってしまいます。うちだけでは問題箇所の絞り込みが難しかったのですが、同時に買った @ssci 氏のTM240Aをお借りして、そちらに支障のあるノズルを取り付けて動作確認をしてみたところ、同じ問題が再現したのでノズルの問題であることがほぼ確定しました。これは交換してもらう予定ではありますが、他の未開封のノズルも含めて受け入れ検査を行う必要がありそうです。