ここからVisual Studio Codeで
nRF Connect SDK (NCS) はバージョン2.0で正式にSegger Embedded Studio (SES) のサポートを終了したので、ここからは Visual Studio Code (VSC or VSCode) での対応となります。
SESのサポートは残しておいて欲しかった・・・とは思ったのですが、今後のウリであるnRF5340を完全サポートできない時点で限界があったのでしょう。
nRF5340がサポートできないのは、以下の記事にあるようにSESがネットワークコアに書き込めないという制限の話です
カスタムボードの追加
以前に一度、SESでカスタムボードを追加する記事を書きました。
正直なところ非常に面倒な手順でした。だって、エクスプローラーとかであらかじめコピーしておかないといけないんだもん。このあたりのこともSESがサポートされなくなったことと関係があるのかも知れませんね。
VSCodeでは簡単!
ところが!
VSCodeでは実に簡単にできてしまうのです。正直、わざわざこんな記事を書く必要もないレベルで簡単です。
じゃあ書くなよ・・・(笑)
な、なんと!
アドインのメニューの中にあるCreate a new boardを押すだけです(笑)。
ボード名(Name)と会社名(Vendor name)を入れて、どのフォルダに保存するか選択したら、Create Boardを押すだけです。あら簡単!(笑)
問題なく作成できました。
早速中身を覗いてみると・・・。
// Copyright (c) 2022 Nordic Semiconductor ASA
// SPDX-License-Identifier: Apache-2.0
/dts-v1/;
#include <nordic/nrf52840_qiaa.dtsi>
/ {
model = "TestBoard";
compatible = "company,testboard";
chosen {
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,code-partition = &slot0_partition;
};
};
&flash0 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
boot_partition: partition@0 {
label = "mcuboot";
reg = <0x0 0xc000>;
};
slot0_partition: partition@c000 {
label = "image-0";
reg = <0xc000 0x72000>;
};
slot1_partition: partition@7e000 {
label = "image-1";
reg = <0x7e000 0x72000>;
};
scratch_partition: partition@f0000 {
label = "image-scratch";
reg = <0xf0000 0xa000>;
};
storage_partition: partition@fa000 {
label = "storage";
reg = <0xfa000 0x6000>;
};
};
};
・・・。
えっ、これだけ・・・?
だってさっきのCreate a new boardの画面ではI/Oのこととか一切聞かれていないですし、まあ当たり前と言えば当たり前ですよね。
ぶっちゃけた話、過去の記事にも書きましたがこれだけでも問題ないです。
上記の記事から引用
私が自分自身で試行錯誤して理解している範囲では、ZephyrにおいてDTSというのはあくまでもオプション的扱いだと受け止めています。超汎用仕様で様々なCPU/Boardで動くようなファームウェアを設計するのであれば話は別ですが、99.9%のファームウェア開発においてはそんなことはありえなく、弊社専用(笑)のガチガチの仕様のものが1個あるだけです。
そのような状況下においてDTSから読み込んでI/Oピンその他の設定をするというのはとてもお行儀のよい設計ではありますが、一方でDTSなんかガン無視してベタ書き(例えばPIN10はLEDを制御)であっても特に問題は起こらないわけです。なぜなら汎用のものを作っているわけではないから。
ということで、自社で開発したボードであればDTSで定義しなくてもファームウェア中にべた書きで埋め込んでしまえばそれでよいのです。Nordicの評価ボードがDTSで記述されているのはnRF52832用、nRF52840用、nRF5340用とそれぞれのボードで使用しているI/Oが違うからです。
違う見方をすれば、ボードとしてはnRF52840などの評価ボードを選んでおいて、中身ではべた書きをしてDTSの定義を使わないというのもありだと思います。お行儀のよい書き方とは言えませんが(笑)
I/Oの定義
どうしてもI/Oの定義もしたい、という方は上記のDeviceTreeの記事、もしくはSDKに添付されているDTSファイルを参考にしてください。もしかしたらいつか書くかも知れませんが・・・。
なお、上記のDeviceTreeの記事も割と中途半端だよなぁ・・・とは思っていますが、全ての記事において「自分自身で調べて理解できた範囲」になっているので中途半端な感じは出てしまいます。なかなか一気に全てを調べるというのは難しいです。
あとがき
更新の間が空いてしまいました。一応、本業もある(笑)のでこちらは飽くまで手が空いて僕自身が使い方を色々と調べることができる時に更新されます。