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に設定するという記載にすればよさそうです。
またの機会に試してみます。