LPC1343 SWDIOをGPIOに設定したときのリカバリ法

本日、何気なくLPC1343のPIO1_3をGPIOに変更してしまいました。


プログラムを実行させると・・・・

あれ?デバッグが出来ない・・・

おかしい、もう一度プログラムをダウンロードしよう!!

LPCLinkが反応しない・・・


ダウンロードも出来なくなりました。。。


なんで??

仕様書を見てみると、プログラムのダウンロードやデバッグ
SWDという方法をとっているらしく
下の図のSWDIO,SWCLK,SWO,RESETの信号を使っているらしいということがわかりました。


そしてGPIOに変更したPIO1_3のオリジナル機能がSWDIOでした。。

デバッグやダウンロードに使うピン機能を変更したので
出来なくなったということか・・・

この記載がいけなかったわけです。
LPC_IOCON->ARM_SWDIO_PIO1_3 = 0x81; NG記載


しかしですね、
SWDIOの機能をGPIOに変更したのでデバッグが効かなくなるのはわかります。
デバッグ用の機能をOFFにしたわけですからね。。

でも、一度機能を変更したらダウンロードできなくなるのはおかしい!!
絶対クレームになるし、リカバリできないわけがない。


そう思って仕様書を調べてみると、

リカバリー出来ました!

LPCexpresso.getting.startedにRecovery の項目があり
ISPピンをGNDにしろとあります。

そしてユーザーマニュアルにはISPピンはPIO0_1だとありました。

LPC1343のPIO1_3(SWDIO)をGPIOに設定してしまった場合のリカバリ法!!

PIO0_1をGNDに接続してPIO1_3をSWDIO設定にしたプログラムをダウンロード(Debug)
(PIO0_1=FT/GPIOのシルク部)

これでリカバリーが出来ました。

たぶんPIO0_10(SWCLK)をGPIOに変更しても同様なことが発生するでしょうが
チキン野郎なので実験はしません。。。



でも、よくよく見てみるとPIO1_3って
AD4として使いたかったり
Dataバスとして使いたかったりもします。

その場合はたぶん、別のピンを設定ピンのようにすることで対応可能だと思います。

たとえばPIO2_10とかをInputに設定しておいて
PIO2_10がLOWのときはPIO1_3をAD4に設定し
PIO2_10がHighのときはPIO1_3をSWDIOに設定するという記載にすればよさそうです。

またの機会に試してみます。