LPCCappuccinoの開発環境構築まで

## LPCCappuccino

Strawberry Linxが2013年から販売している、手頃な価格のオリジナルマイコンボード。
ArduinoIDEではサポートされていない。

https://strawberry-linux.com/catalog/items?code=12045

### チップ

NXP社 LPC11U37

https://strawberry-linux.com/pub/LPC11U3X.pdf

### レイアウト

ACアダプタ端子、microSDカードソケットも実装されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/482f3329-24ef-45d8-8125-9967197a1c59.png)

#### I2C液晶(オプション)
別売のI2C液晶ユニットを基板上に実装できる。手頃な価格で、デバッグなどに便利。
基板のドレスアップにもなる。

:::note warn
下端着色部は押してはいけない。薄いガラス板がちょっと浮いた構造になっているので、押すとすぐに割れ断線する。緑の基板部を押して，基板ピンに装着する。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/542d85a6-aef9-4411-9bb8-1347143447a7.png)

### 組み立て
DCブラケット，ピン、ソケットをハンダ付け。
それぞれ、1ピンをハンダ付けしたら、位置、角度を確認して調整。
I2C液晶ユニットは、下辺のソケットのみが基板とつながっているだけて不安定なので、上辺を支える脚として、粘着テープ付きの4mmスペーサの頭をカットしたものを貼り付ける。

:::note warn
I2C液晶ユニットのソケットをハンダ付けする際、ハンダの量に注意。多すぎるとソケット内にハンダが流れ込み、ピンがささらなくなる。
:::

ボード本体には粘着テープなしの4mmスペーサを脚として付けた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/615f848f-3f8b-4a24-87be-07e8afab4fe1.png)


## 開発環境 MCUXpressoIDE

StrawBerry LinuxのLPCcappuccinoサポートサイトではNXPのLPCXpresso IDE向けのテストプロジェクトを配布している。LPCXpresso IDEは本来有償のIDEで、アカウント登録後アクティベーションが必要である。無償アクティベーションでは機能制限があるし、有償は$495.00～と，そこそこの値段である。
一方、おなじNXPが、無償のIDE MCUExpressoIDEも配布しており、将来的にはこれがメインストリームになるように思われる。NXPも新しいプロジェクトにはMCUXpressoを推奨している。
「However we no longer recommend the use of LPCXpresso IDE for new projects, either in Free Edition form or the paid-for Pro Edition. MCUXpresso IDE has now replaced LPCXpresso IDE as the recommended software development toolchain for our Cortex-M based LPC microcontrollers, as well as for our Kinetis MCUs and i.MX RT crossover processors.」
試してみたところ、 MCUExpressodIDEでも、StrawBerry Linuxからダウンロードしたテストプロジェクトを問題なくビルド出来た。

https://www.nxp.jp/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE

### Strawberry Linux テストプロジェクトのビルド

Strawberry LinuxのLPCCappuccino製品ページから、テストプロジェクトのアーカイブをダウンロードする。

https://strawberry-linux.com/pub/cappuccino-test.zip

MCUXpressoIDEを起動し、Quick Start PanelのImport project(s) from file systemをクリックする。
Project archive(zip)にダウンロードしたテストプロジェクトのアーカイブを指定して、「Next>」ボタンをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/3d7aad1b-8c64-4c46-b35e-984584ddacd0.png)
cappuccinoプロジェクトが選択されているのを確認して「Finish」ボタンをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/11192ca4-55c0-4126-affd-846f4577342a.png)

ワークスペースにcappuccinoプロジェクトが取り込まれる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/69fc062e-f155-4c1b-90cc-824fea52c19e.png)

プロジェクト・プロパティのMCU Settingsで確認したところ、詳細な型番はLPC11U37/501に設定されている。これで搭載メモリの量とアドレスが判る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/ba9ce1eb-13cb-4b4e-a225-3be704573c78.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/eeaec481-8564-462f-b191-59c23274ab25.png)

テストプロジェクトを選択して、Quick Start PanelのClean、Buildを順にクリックすると、BUILDが実行される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/9a19f85f-f54e-42ef-b662-a77781b4b377.png)
ステッピングドライバなどの周辺機器を繋いでいない場合、このままでは実行時にエラーになリ、途中で止まってしまうので、L6470ステッピングドライバデモ関数とＳＤカードデモ関数の呼び出しを外して、再度ビルドする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/f6f08fa3-8f8b-4ba0-9afa-0f32063cbefe.png)
USRボタンを押しながら、USBでPCにLPCCappuccinoを繋ぐと、「CRP DISABLD」と言う名前のフォルダとして認識されて、explorerが開くので、そこにあるfirmware.binを削除しておく。
Buildがうまく行っていると、プロジェクトのDEMOフォルダのcappuccino.binが更新されているので、これを、上記「CRP DISABLD」フォルダにドラッグ＆ドロップして書き込む。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/1a3cf0fe-f39d-4ecc-a95a-b381550b68cf.png)
LPCCappuccinoのRSTボタンを押すと、explorerが閉じ、LPCCappuccino上で書き込んだプログラムの実行が始まる。SDカードスロットの上の赤いLEDが点滅していれば、うまく実行されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/d6d4ba1a-c0aa-40f0-a12a-61394b5e522a.png)
オプションの液晶があれば「LPCcappuccino! StrawbwrryLinux」と２段に表示され，バックライト付きであれば，白いバックライトも点滅する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/bb4cd26c-31ed-45ce-bbe6-23c976155f56.png)
## ライター・デバッガ
ライター・デバッガとして、トラ技ライター、LPCXpresso LPC1200搭載のLPC-LINK V1を用いてみた。

:::note info
新たに、ライター・デバッガを入手する場合は、後述のAE-LPC11U35を使って作る仮想COMポート付きデバッガの方が、安価かつ高機能である。
:::

どちらも、同じような機能／使い勝手なので、いずれか1つ有れば事足りる。LPC1200は秋月のセールで1000円と、極安価ではあったものの、もう売り切れで入手が困難である。また、基板のターゲット部分を切り落とす手間がある(基板センターラインで断線するだけでも可)。2025年2月現在、トラ技ライターは、基板だけならマルツで、書籍「mbed×デバッガ!一枚二役ARMマイコン基板」CQ出版、としてならアマゾン、CQ出版オンラインショップで入手可能である。基板だけの方が少し安いが、デバッガとして使うためのアプリケーションが付いていない。書籍の付属CDには収録されているので、自分で開発／BUILDできない場合は、書籍版の入手が必要となる。
書籍版の場合、自分でピンヘッダ等をハンダ付けする必要があるが、デバッガとして使うだけなら、USB端子、ボタンスイッチ2個、ピンヘッダまたはソケット2個(CN4、CN5)だけで間に合う。その他のピンヘッダは使わない。CN4(SWD 1.25mmピッチ2×5ピンヘッダ)、USB端子以外はたいして難しくない。CN5でターゲットと接続するなら、CN4も不要。
下図は、ターゲット部を切り落として、断面にL型8PINソケットを実装したLPCXpresso LPC1200のST-LINK/V1部(上)と、組み立てたトラ技ライター(下)。L型8ピン・ソケットのピン配置はどちらも同じ(写真では点対称)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/19d4eeea-b083-4421-ab74-b92f919e0ed0.png)

### LPCCappccinoとデバッガの接続

SWD接続を行う。LPC11U37のデータシートでSWDのPIN配置を調べたところ、SWDIOはPort0の15番ピン、SWCLKはPort0の10番ピンに割り当てられていた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/fdb9ff70-ffb2-440b-8eea-cc21165a3646.png)

「LPC11U3x Product data sheet Rev. 1 — 20 April 2012 © NXP B.V. 2012.」より抜粋
      
そこで、下図の5箇所のポートを接続する。

:::note info
デバッガVddを、LPCCappuccinoのVではなくEXTに繋ぐと、ターゲットCPUには給電されるが、I2C液晶には給電されないので、注意する。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/21482d3c-d75c-436e-8a6f-0d0bef05b19c.png)
配線後、デバッガをUSBで、MCUXpressoが動いているPCに接続し、Quick Start PanelのDEBUGをクリックするなどして，デバッグを開始する(ツールバーの虫ボタン、「Run」メニューの「Debug As 」→「MCUXpressoIDE LinkServer」でも同じ)。初回は以下のデバッガ選択ダイアログが出て来るのでOKボタンを押すと、ビルド、書き込みの後、デバッグ画面に切り替わってプログラムが起動し、最初の行で実行が一旦停止した状態になる。その後は、ステップ実行や指定行まで実行、マウスホバーによる変数インスペクト等の機能を使って，デバッグ実行ができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/a95343ce-a383-4825-b87b-3412b819e5be.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/26e89656-ae7f-4206-92a2-14d9216829ac.png)

## 仮想COMポート付きデバッガ
以下の「なんとなく活動記録。」の「CMSIS-DAPよりもDAP-LINK(LPC11U35編)」という記事により、秋月から販売されている安価なマイコンボードAE-LPC11U35とオープンソースプロジェクトのDAP-LINKを使って、仮想COMポートをサポートするデバッガが作れると言うことを知り、早速AE-LPC11U35を取り寄せた。

https://blueeyes.sakura.ne.jp/2017/10/20/604/

https://akizukidenshi.com/catalog/g/g112144/

AE-LPC11U35の両側に15ピンソケットを実装。
Aruduino nanoとほぼ同じサイズだが、nanoより3mmほど短く，3mmほど幅が広い。非常にコンパクト。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/fbac4b4e-cf54-4bdd-a2d3-c669db6d732f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/be56d4c3-5b7e-41a3-9298-39c2d45c60f5.png)
下記より、DAP-LINKの最新(と言っても2022年2月)リリースREL v0257の「0257_release_package_gcc_c782a5ba.zip」をダウンロードして、その中の[0257_lpc11u35_ssci1114_0x0000.bin」というファイルを、AE-LPC11U35にD&Dで書き込み。

https://github.com/ARMmbed/DAPLink/releases

AE-LPC11U35への書き込み手順は、AE-LPC11U35に同梱されているカードに詳細が記されているが、リセットボタン押し→ブートセレクトボタン押し→リセットボタン放し→ブートセレクトボタン放し→firmware.bin削除→プログラムbinをドロップ、とLPCCappccinoと同様の手順。
その後、PCにUSBで接続し直すと、デバイスマネージャで、ユニバーサル シリアル バス デバイスにWebUSB:CMSIS-DAPが追加される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/b347635d-4f6e-4a06-9c84-d5595148e012.png)
また、デバイスマネージャのポートにも、新しいUSBシリアルデバイスタイプの仮想COMポートが追加される。このCOM番号(図では"COM32")は，後でMCUXpressoのターミナル接続で使うので控えておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/25941064-cc36-46c1-bedc-c4abef39e141.png)

:::note warn
同じところからダウンロード出来る「0257_release_package_armclang_c782a5ba.zip」、「0257_release_package_armcc_c782a5ba.zip」にも同名のファイルが入っているが、いずれも、AE-LPC11U35に書き込んでPCに接続しても、ユニバーサル シリアル バス デバイスとして認識されなかった。
:::

上述のネタ元記事「CMSIS-DAPよりもDAP-LINK(LPC11U35編)」によると、DAP-LINKのピン配置は以下のようになっている。

				PIO0_7	SWCLK
				PIO0_8	SWDIO
				PIO0_18	RX
				PIO0_19	TX
				PIO0_2	RESET
### LPCCappuccinoとAE-LPC11U35の接続
:::note warn
ターゲット側のシリアル接続ポートは，デバッグ対象のプロジェクト毎に異なる。
:::
LPCCappuccinoのテストプロジェクトのソースを見てみたところ、デバッグライトを書き込むシリアルポートは、Port-1の13番ピン(TX)とPort-1の14番ピン(RX)に割り当てていた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/e2ac506a-273c-4b38-9cc0-656cd820df2a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/83568e19-2294-4efa-8cce-11e3ca3c6faa.png)
そこで、以下のように配線を行う。

::: note info
デバッガとターゲットではSerialのTXとRXをクロスさせる。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/7f0d88f4-c71f-426e-9f88-5a9007d2385a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/5169eff2-db0f-49be-b830-28e48eccc7ec.png)
配線後、AE-LPC11U35をUSBで、MCUXpressoが動いているPCに接続したら、まず、ターミナルを仮想COMポートに接続する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/d4908b79-08f7-407d-9089-0f5a08adbbcc.png)
ターミナルの接続先に、DAP-LINKの仮想COMポート番号を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/42bf8d37-5d2f-4938-ad20-7f5af14981fd.png)
トラ技ライターと同じ手順でデバッグを実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/4cc85ab3-545f-41f5-986b-8b5617186556.png)
ターゲット上でシリアルポートにデバッグライトが書き込まれると、MCUXpressoのターミナルにその内容が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/821a257d-4992-48e7-bb05-4b1717b412f7.png)

## NXP純正デバッガMCU-LINK PRO
NXP純正デバッガMCU-LINK PROは、仮想COMポート、I2CとSPIのブリッジをサポートする。
但し、ターゲットに給電できない。
PCに接続すると、デバイスマネージャで、COMポート2つと、ユニバーサルシリアルデバイス1つが追加された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/f271cf68-fdc7-4e17-a3be-ef7f9f4efb62.png)

COM Port2の方は最新のFirmwareに更新した後に出てきたもので、J26コネクタの4番(RX)、5番(TX)ピンに割り当てられているらしい。
使用方法はAE-LPC11U35とDAP-LINKで作った、仮想COMポートをサポートするデバッガと同じ。
### MCU-LINK PROとLPCCappuccinoの接続
MCU-LINK PROには、JTAG端子、SWD端子があり、両ケーブルも付属するが、LPCCappuccinoにはどちらも直接つながらない。
JTAG用には、バラのソケットピンケーブルも付属するが、SWD用はないので、SWD-JTAG変換ボードに10ピンソケットを実装したものを間に入れる。
デバッガから給電されないので、LPCCappuccinoには、ACアダプタを繋いだ。
各ボードのデバッグに関係するピンは以下の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/d9c38efb-9dec-4b6f-b7d2-536849af88ba.png)


そこで以下のように接続した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/f01a9968-d002-457c-9b46-013bcea957a8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/7c194fa3-b830-42b5-9997-861068b04d41.png)

## LPCOpenコードサンプル

Quick Start PanelのImport project(s) from file systemで、LPCOpenのコードサンプルプロジェクトを取り込むことができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/7f79307d-1295-42b9-b05a-3c467aa311d1.png)
Import project(s) from file systemダイアログでProject archive(zip)のBrowseボタンをクリックすると、MCUXpressoインストール先のアーカイブフォルダが開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/c4f20ff9-cfc5-4ca4-a92e-18ae4b191fe4.png)
LPCOpenフォルダを開き、一番下のlpc_openV2_03_lpcxpresso_nxp_lpcxpresso_11u37h.zipを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/c9bb0878-4fd4-47e7-b8bf-2e464a252bd5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/f4420e86-81b5-4135-bed6-930db675b028.png)
[Next」ボタンをクリックしたダイアログで、インポートするプロジェクトを選択し、「Finish」ボタンをクリックすると、ワークスペースに選択したプロジェクトが取り込まれる。

:::note info
lpc_chip_11ux_libとnxp_lpcxpresso_11u37_board_libは必須なので，未取込の場合は必ず含める
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/de84881c-29e6-4f70-a2c2-292b8228809f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416342/908e17f9-6ffe-41ec-99d7-6ab1e2ae3377.png)

:::note info
サンプルプロジェクトを利用する際には、プロジェクト・プロパティのMCU Settingsで詳細な型番をLPC11U37/501に設定し、搭載メモリ量とアドレスを、LPCCappuccinoに合わせる。
:::