NordicのnRF54L15はRISC-VとARM_m33の両方を搭載しています。
RISC-VとARM_m33を一緒に動かしてみました。
プログラム実装からテストまで紹介します。
RISC-VとARM_m33をnRF54L15上で一緒に動かしてみた
NordicのnRF54L15はRISC-VとARM_m33の両方を搭載しています。
RISC-VとARM_m33を一緒に動かしてみました。
RISC-VからはGPIOとUART、ARM_m33からはPWMとUARTをテストしています。
プログラム実装からテストまで紹介します。
7. RISC-V(FLPR)
NordicのnRF54L15 SoCは、RISC-Vアーキテクチャをベースにした、Fast Lightweight Peripheral Processor (FLPR) と呼ばれる専用のVPR CPUを搭載しています。
nRF54L15 RISC-Vに関するドキュメントは、以下のURLで参照できます。
https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/app_dev/device_guides/nrf54l/vpr_flpr.html
Nordicの評価ボードを参考に、RISC-V(FLPR)のボード(デバイスツリー)ファイルを作成しました。
https://github.com/iotengineer22/Board-Designer-Competition/tree/main/src/board
以下のファイルがRISC-V用に該当します。
test_nrf54l15dk_nrf54l15_cpuflpr.dts
, dtsi
(For RISC-V)
またnordic-flpr
用のオーバーレイスニペットも拡張しました。
ZephrのSDK内の.yml
ファイルも弄っています。
zephyr\snippets\nordic-flpr\snippet.yml
1 2 3 |
test_nrf54l15dk/nrf54l15/cpuapp: append: EXTRA_DTC_OVERLAY_FILE: boards/nrf54l15dk_nrf54l15_cpuapp.overlay |
これによりオリジナルボードファイルを構成する際、FLPRオプションを選択できます。
RISC-V GPIO + UART
nRF54L15のRISC-Vコアで、GPIOとUARTのデバッグを行いました。
RISC-VコアからのLED点滅とUARTシリアルメッセージを確認しています。
このRISC-VコアはZephyr(RTOS)を実行しています。
テストには以下のプログラムを使用しました。
https://github.com/iotengineer22/Board-Designer-Competition/tree/main/src/project/gpio
RISC-V UARTのデバイスツリーのイメージです。(詳細はボードファイルを参照してください。)
ARM_M33のUART(uart20)のピンとは違ったピンに設定しています。
1 2 3 4 5 6 7 8 9 10 11 |
/omit-if-no-ref/ uart30_default: uart30_default { group1 { psels = <NRF_PSEL(UART_TX, 0, 0)>, <NRF_PSEL(UART_RTS, 0, 2)>; }; group2 { psels = <NRF_PSEL(UART_RX, 0, 1)>, <NRF_PSEL(UART_CTS, 0, 3)>; bias-pull-up; }; }; |
以下のデモ動画をご覧ください。
プログラムは既にボードに書き込まれています。
ボードをリセットすると、RISC-VおよびZephyrが再起動します。
LEDが繰り返しON/OFFを繰り返し、UART経由でシリアルメッセージが出力されます。
オシロスコープを使用して、RISC-VからのUART信号を調べています。
オシロスコープで信号をデコードしています。
メッセージの「LED state:」に対応するASCII文字が確認できました。
またUARTの速度は115200 bpsであることも確認しています。
RISC-V + ARM_M33
nRF54L15上のRISC-VコアとARM_M33コアの両方を同時にデバッグしました。
RISC-VコアからのLED点滅とUARTシリアルメッセージ、そしてARM_M33からのPWM制御を確認しています。
テストには以下のプログラムを使用しました。
https://github.com/iotengineer22/Board-Designer-Competition/tree/main/src/project/gpio
https://github.com/iotengineer22/Board-Designer-Competition/tree/main/src/project/pwm
RISC-V向けにビルドする際、ARM_M33コア用のsysbuildも生成されます。
ARM_M33コア用のmain.cファイルには、PWMプログラムを実装しています。
ARM側については、デフォルトのKconfig設定(prj.conf)が最小限です。
PWM構成を指定する必要があることに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 |
CONFIG_STDOUT_CONSOLE=y CONFIG_PRINTK=y CONFIG_PWM=y CONFIG_LOG=y CONFIG_LOG_PRINTK=y CONFIG_LOG_MODE_IMMEDIATE=y CONFIG_PWM_LOG_LEVEL_DBG=y # CONFIG_STDOUT_CONSOLE=y # CONFIG_PRINTK=y # CONFIG_LOG=y # CONFIG_LOG_PRINTK=y # CONFIG_LOG_MODE_IMMEDIATE=y |
以下のデモ動画をご覧ください。
nRF54L15はRISC-VコアとARM M33コアの両方を統合しています。
デバッグ中、シリアルメッセージが確認しています。
↑ はRISC-Vコアからのメッセージを示し、↓ はARM_M33コアからのメッセージを示します。
RISC-VコアとARM_M33コアの両方に対して、リセットも確認しました。
各コアからの制御が成功したことをテストで確認しています。
- RISC-VコアからのGPIO + UARTの制御(LED ON/OFFで実証)。
- ARM_M33コアからのPWM + UARTの制御(サーボモーターのパルス制御で実証)。
まとめ
NordicのnRF54L15はRISC-VとARM_m33の両方を搭載しています。
RISC-VとARM_m33を一緒に動かしてみました。
プログラム実装からテストまで紹介しました。
コメント