Bluetooth LE Audioの基板開発をして、デバッグしました。
SOCはnRF5340、PMICはnPM1300、Audio_ICはCS47L63を使用しています。
実際に基板作成して、一からデバッグした内容を紹介します。
Bluetooth LE Audioの基板開発をして、デバッグしてみた。
Bluetooth LE Audioの基板開発をして、デバッグしました。
SOCはnRF5340、PMICはnPM1300、Audio_ICはCS47L63を使用しています。
実際に基板作成して、一からデバッグした内容を紹介します。
回路図・アートワーク・BOM
開発した基板に関しては、KiCadで設計しています。
下記記事で実際のパターン・PCB設計の手法について、詳細を記載しています。
Pad on ViaをKiCadで設計して、PCBWayで基板作成してみた

実際のKiCadのデータに関しては、下記GitHubに保存しています。
筆者がパターン専門の設計者でなく、また趣味で作ったものですが、動作確認は出来ています。
電圧チェック
基板が納入してから、最初に電圧チェックを行いました。
デモ動画でも電圧確認の内容を紹介しています。
PMIC(nPM1300)による電源管理
このカスタムnRF5340ボードでは、電源管理にnPM1300 PMICを使用しています。
このPMICは、Type-C(5V)またはバッテリー(3.7V)から必要な1.8Vと1.2Vを生成し、SOC(nRF5340)とオーディオIC(CS47L63)に電力を供給します。
Type-C電源からの電圧シーケンス
まず、Type-Cからの電圧シーケンスをオシロスコープで確認しました。
- CH1: Type-C(5V)
- CH2: 1.8V出力
- CH3: 1.2V出力
Li-ionバッテリーからの電圧シーケンス
次に、市販のLi-ionバッテリー(3.7V)を使用した電圧シーケンスも確認しました。
- CH2: 1.8V出力
- CH3: 1.2V出力
- CH4: バッテリー(3.7V)
過電圧保護(Overvoltage Protection)
重要な注意点があります。PMIC(nPM1300)には過電圧保護機能があることです。
過電圧保護閾値(VBUSovp)はTypで5.5Vです。
一部のType-Cアダプターや電源は5.5V付近の電圧を出力する場合があるためご注意ください。
nRF5340カスタムボードへの書き込み手順
今回使用したNordicのnRF5340に関してのプログラム書き込み方法についてです。
実際に書き込んだデモ・テスト動画は下記となっています。
nRF54L15-DK経由での書き込み
下記公式の評価ボードの手順をしたがって、書き込んでいます。
詳細は下記ページをご覧ください。

但し公式の評価ボードのようにUSBでの書き込みはカスタムボードでは対応できていません。
そのため、同じNordicの評価ボードであるnRF54L15-DKを利用しています。
あと1.27㎜ピッチの10ピンケーブルも使っています。同類の内容を下記記事でも紹介しています。
nRF54L15-DKを使ってSWD (Serial Wire Debug)の書き込み

プロジェクトを作成して、公式は用意してくれているスクリプトファイル(.py)を利用しました。
あくまで一例ですが、下記形で対応しています。
ビルド後にターミナルをnRF Connectに変更しています。
下記はBroadcastのプログラムを書き込んだ例です。
1 2 3 4 |
PS C:\boards\test\nrf5340_audio\build\nrf5340_audio> cd .. PS C:\boards\test\nrf5340_audio\build> cd .. PS C:\boards\test\nrf5340_audio> cd .\tools\buildprog\ PS C:\boards\test\nrf5340_audio\tools\buildprog> python buildprog.py -c both -b debug -d both -t broadcast -p --recover_on_fail |
フラッシュ後、カスタムボードのLED点灯状態の変化しています。
プログラムが正常に書き込まれたことを確認できます。
ボードファイル(デバイスツリー)の対応
今回のボードファイル(デバイスツリー)は公式ボードのnRF5340 Audio DKをベースにしています。
エラー処理
nRF5340 Audio-DKとカスタムnRF5430ボードには大きな違いがあります。
元のボードファイルをそのまま使用すると多数のエラーが発生します。
主な原因は、I2C電力センサーに関連するエラーでした。
1 2 3 4 5 6 7 8 9 10 11 |
-- [00:00:00.776,733] <err> INA230: Failed to write configuration register! -- [00:00:01.276,916] <err> INA230: Failed to write configuration register! -- [00:00:01.777,069] <err> INA230: Failed to write configuration register! -- [00:00:02.277,221] <err> INA230: Failed to write configuration register! *** Booting nRF Connect SDK v3.0.0-3bfc46578e42 *** *** Using Zephyr OS v4.0.99-3e0ce7636fa6 *** -- [00:00:02.277,343] <err> power_meas: INA231 device not ready: VBAT -- [00:00:02.288,543] <inf> board_version: Compatible board/HW version found: 0.8.0 -- [00:00:02.299,163] <err> board_version: Board ver search failed. ADC reg read: 627 -- [00:00:02.299,163] <err> main: ERR_CHK Err_code: [-29] @ line: 546 |
これらのエラーに対処するため、不要な設定を無効化(マスク)しました。
まだ処理できていない箇所があったかもしれませんが、動作は出来ましたので良しとしました。
\src\utils\nrf5340_audio_dk.c
1 2 3 4 5 6 7 8 9 |
// ret = board_version_valid_check(); // if (ret) { // return ret; // } // ret = board_version_get(&board_rev); // if (ret) { // return ret; // } |
nrf5340_audio_dk_nrf5340_cpuapp_common.dtsi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
arduino_i2c: &i2c1 { compatible = "nordic,nrf-twim"; status = "okay"; pinctrl-0 = <&i2c1_default>; pinctrl-1 = <&i2c1_sleep>; pinctrl-names = "default", "sleep"; // vbat_sensor: ina231@44 { // compatible = "ti,ina230"; // reg = <0x44>; // adc-mode = "Bus and shunt voltage continuous"; // vbus-conversion-time-us = <4156>; // vshunt-conversion-time-us = <4156>; // avg-count = <1024>; // current-lsb-microamps = <1>; // rshunt-micro-ohms = <510000>; // }; // vdd1_codec_sensor: ina231@45 { // compatible = "ti,ina230"; // reg = <0x45>; // adc-mode = "Bus and shunt voltage continuous"; // vbus-conversion-time-us = <4156>; // vshunt-conversion-time-us = <4156>; // avg-count = <1024>; // current-lsb-microamps = <1>; // rshunt-micro-ohms = <2200000>; // }; // vdd2_codec_sensor: ina231@41 { // compatible = "ti,ina230"; // reg = <0x41>; // adc-mode = "Bus and shunt voltage continuous"; // vbus-conversion-time-us = <4156>; // vshunt-conversion-time-us = <4156>; // avg-count = <1024>; // current-lsb-microamps = <1>; // rshunt-micro-ohms = <2200000>; // }; // vdd2_nrf_sensor: ina231@40 { // compatible = "ti,ina230"; // reg = <0x40>; // adc-mode = "Bus and shunt voltage continuous"; // vbus-conversion-time-us = <4156>; // vshunt-conversion-time-us = <4156>; // avg-count = <1024>; // current-lsb-microamps = <1>; // rshunt-micro-ohms = <1000000>; // }; }; |
\boards\nrf5340_audio_dk_nrf5340_cpuapp.conf
1 2 |
# CONFIG_NRF5340_AUDIO_POWER_MEASUREMENT=y CONFIG_NRF5340_AUDIO_POWER_MEASUREMENT=n |
サーボモーター制御(PWM)
カスタムボードには、サーボモーター(SG-90など)接続用のピンヘッダーがあります。
このヘッダーは、必要な5V電源とサーボ制御用のPWM出力の両方供給しています。
SG-90などのケーブルを直接挿入することが可能です。
SG-90サーボモーターを使用したテストで、以下の結果を確認しました。
- PWMパルス範囲: 600μs〜2400μs
- 動作確認: SG-90サーボモーターが正常に動作
- スピーカー取り付け時: スピーカーを取り付けた状態でも角度制御が可能
下記がデモ動画です。
単体での動作と、汎用的なSG-90のマウントユニットに接続してのテストも行っています。
問題なく、サーボモータでの角度調整が出来ました。
BLE(Bluetooth LE)Audio
カスタムnRF5340ボードでのBLE Audio機能を確認しました
2言語(英語+ドイツ語)アナウンスのBLE Audio経由での出力を行うUnicastテストです。
構成としては3枚でテストしています。
- サーバー: Unicast Server(音声送信側)
- クライアント: Unicast Client(Right/Left)(音声受信側)
- 音声データ: 英語とドイツ語の2言語アナウンス
デモ動画は下記です。
Bluetooth LE経由でしっかりオーディオが配信できています。
まとめ
Bluetooth LE Audioの基板開発をして、デバッグしました。
SOCはnRF5340、PMICはnPM1300、Audio_ICはCS47L63を使用しています。
実際に基板作成して、一からデバッグした内容を紹介しました。
コメント