(できれば)日報

無理ない範囲でやったことを書いていきます

SWDでLPC8xxデバッグ

はじめに

やること

  • SWDでのプログラム書き込み/デバッグ
    ※ この記事では何かをするというわけでなくデバッグ環境の構築までを書きます。

構成

  • 開発環境
    MCUXPresso
    C言語(LPCOpen使用)
    ※ ただしこの記事では特にコードは書きません
  • デバッガ
    LPC-Link2

ハードウェア構成

デバッグ対象はLPC812M101JD20です。秋月電子で購入できました。

akizukidenshi.com

このLPC81xシリーズ、5年前ぐらいにトラ技の影響か何かでDIP8pinのLPC810が少ピンで32bit ARM Cortex-M0+というところが受けたのか、LPC810に至っては100円もしなかった記憶があります。
最近は下火のようで、あまり流通していないのでしょうか。

接続

SWD周りだけを示すとこんな感じ。

f:id:nayuta_m:20210731155639p:plain
SWD関連の接続
基本的につなぐだけですが2点ほどつまづいてました。

  • SWD伝送線路のダンピング抵抗
    配線次第かと思いますが、ダンピング抵抗を入れないとデバッグのセッションが開始しませんでした。
    LPC812のマイコンをSWDで使うのはまだ2度目なのですが、どちらも300Ωと何やら高めにしないとうまくいきませんでした。
    これはリファレンスを見たわけでなく、調整の結果としてそうなりました。
    配線次第なところもあるかと思いますので、これでうまくいく保証はありません。
    この辺については、まだ考えが足りないところがあると思いますがこれで動いたので追うのをやめてしまいました。
    時間のある時にもう少し追っていきたいと思います。

  • ISPエントリピン
    LPC81xはリセット解除の時点である特定のピンがLowレベルになっていればISPモードに変わるようです。
    ブートローダのバージョン次第で、どこのピンがISPエントリになるかは変わります。
    ブートローダのバージョンはマイコンのマーキングの3行目の右端の2文字でわかります。

マーキング バージョン ISPエントリpin
1A v13.1 PIO0_1
2A v13.2 PIO0_2
4C v13.4 PIO0_12(※DIP8はPIO0_1)

4C以降は4Cと同じようです。
詳細はユーザーマニュアル(UM10601)を読むと良いと思います。

ただ直接グラウンドへ落とすのでなく、100kΩの吊下げ抵抗をかましています。
直接グラウンドへ落とすと、リセットとのタイミングか何かがあるのかわかりませんが、プログラムの書き込みがうまくいきませんでした。
これについても仕様を追えていないところが多いので、今後の課題とします。

デバッガの準備

LPC-Link2というNXPの評価ボードをCMSIS-DAPプローブかJ-Linkプローブとして使うことができます。
LPC-Link2のJP1をオープンにした状態で、以下画像の一番下2つのProgram LPC-Link2 with ...のどちらかプログラムを起動することで、CMSIS-DAPプローブかJ-Linkプローブのどちらかへ書き換えることができます。

f:id:nayuta_m:20210731152438p:plain
LPCScrypt

MCUXPressoにてデバッグ

CMSIS-DAPプローブかJ-Linkプローブのどちらかに書き換えたかによりますが、Run->Debug->Debug As で2(CMSIS-DAP)か4(J-Link)を選ぶとデバッグが開始します。

f:id:nayuta_m:20210731165037p:plain
MCUXPressoでの選択画面

はじめはこのようにmain()にブレークがかかった状態でデバッグが開始します。
なので、リセット周りの関数は終わっていることとなります。
f:id:nayuta_m:20210731165521p:plain
行番号をダブルクリックすることでブレークも仕掛けられます
f:id:nayuta_m:20210731170316p:plain