2012年1月29日日曜日

[ARM]FlashMagicを用いてUART通信によるプログラムの書き換え

前回IOCONレジスタを書き換えたことにより、
初期設定されたファンクション(Fn)を汎用I/O(GPIO)に書き換えた。


ところが、書き換え後、下記のエラー文が表示され、デバッグできない状況に陥ってしまった。

02: Failed on connect: Ee(07). Bad ACK returned from status - wire error.
Emu(0): Connected. Was: None. DpID:     EDB6. Info: LPCLINK_1_1

「wire error」ということで、USBケーブルなどの物理的視点で見直したが上手くいかず、
新しいターゲット(LPC1343)を買い直し再度、自作プログラムを走らすも、同様の結果になった。


その結果から、自作プログラムがおかしいと気づき、LPC1114の回路とIOCONレジスタを見比べると、「JTAG_TMS_SWDIOX」を書き換えていたことが判明した。

「JTAG_TMS_SWDIOX」を書き換えたことにより、LPCLinkとターゲット間の回路は遮断されたことになり、よってデバッグが行えない状況に陥ってしまったようだ。


そこで、本題。

LPCLinkからターゲット間は遮断されているため、今まで通りのやり方では上手くいかないので、
MARY基板の様にUSBシリアルからLPC1114を書き換えることにした。


注意事項
・FlashMagicを使うのでWindows環境が必要
・USBシリアル変換モジュールが必要
・USBシリアル変換モジュールから3.3V出力する必要がある
・LPCLinkとターゲットは切断しなければならない
・PIO0_1(FT/GPIO)を(0V)"L"にプルダウンする

 用意したもの
・LPC1114
・USBシリアル変換モジュール
・抵抗1kΩ*2

今回はブレットボードとブレッドボードワイヤーを使い配線をした。


書き込みの際、
FlashMagicを用いるためhex(ヘキサファイル)を出力しなければならないが、
標準のLPCXpressoではalfファイルしか出力されないので、

プロジェクトのプロパティ>C/C++ビルド>設定>ビルド・ステップ
>ビルド後のステップ「コマンド:」に
 

arm-none-eabi-objcopy -O ihex ${BuildArtifactFileName} ${BuildArtifactFileBaseName}.hex ;

と一文足すか、コメントアウト(#)を削除してビルドを実行させるとhexファイルが出力される。

FlashMagicでは、ターゲット、クロック、出力したhexファイル、を設定し、上記のように配線出来れば書き込めるハズ...

今回、通常のファンクションに戻すため、LPCXpressoのサンプルプログラムを使用し、
CMSIS_2.0を用いた「LPCX1114_cmsis2_blinky」のhexファイルで上書きを実行した。

結果、無事ターゲットを復活させることが出来た。


参考文献
LPCXpresso で UART シリアル通信 (5)

0 件のコメント:

コメントを投稿