はじめに ZephyrとRustのインテグレーションに挑戦しています。 RustでデバイスDriverを作っていきます。 まずは、QEMUのUARTをターゲットにします。 QEMUのUARTデバイスはガバガバで、初期化を行わなくてもデータ送受信ができるので、敷居が低いです。 UART…
はじめに ZephyrとRustのインテグレーションに挑戦しています。 RustでデバイスDriverを作っていきます。 まずは、QEMUのUARTをターゲットにします。 QEMUのUARTデバイスはガバガバで、初期化を行わなくてもデータ送受信ができるので、敷居が低いです。 やる…
はじめに ZephyrとRustのインテグレーションに挑戦しています。 前回は、RustでDriverの初期化関数を書いて、動作させることに成功しました。 tomo-wait-for-it-yuki.hatenablog.com 今回から、もう少しちゃんとデバイスDriverを作っていきます。 まずは、QE…
はじめに Zephyrのdriverを作る方法を学びます。 まずは、qemu_cortex_m3をターゲットとした場合の、UART device driverを写経します。 |> zephyr/drivers/serial/uart_stellaris.c 全体で700行くらいなので、全てを単純に写経する、というよりポイントを押…
はじめに ZephyrとRustのインテグレーションに挑戦しています。 これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 前回までのあらすじ アプリケーションに公開するDriver APIを作るため、システムコ…
はじめに ZephyrとRustのインテグレーションに挑戦しています。 これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 前回までのあらすじ Rustで書いたDriverの初期化関数から、文字が出力できました。…
はじめに nRF52840は、Cortex-M4Fが搭載されたSoCです。 また、CryptoCell 310という暗号化アクセラレータが搭載されています。 Nordic Documentation LibraryのCryptoCellのページを見ると、「ARM TrustZone CryptoCell 310」と書かれています。 www.nordic…
はじめに ZephyrとRustのインテグレーションに挑戦しています。 これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 前回までのあらすじ RustでZephyrのDriverを書くためには、INIT_DEVICEマクロ相当…
はじめに ZephyrとRustのインテグレーションに挑戦しています。 これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 DEVICE_INITマクロ tomo-wait-for-it-yuki.hatenablog.com 前回記事で、DEVICE_INI…
はじめに ZephyrとRustのインテグレーションに挑戦しています。 tomo-wait-for-it-yuki.hatenablog.com これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 最低限必要なことは何か? まずは、ここか…
はじめに Discoveryを翻訳したので、マイコンでRustを動かす体験をお楽しみください。 tomoyuki-nakabayashi.github.io Discoveryでは、STM32F3DISCOVERY開発ボードを使って、次のようなアプリケーションを実装します。 LEDルーレット LEDコンパス シリアル…
はじめに Zephyrのdriverを作る方法を学びます。 まずは、qemu_cortex_m3をターゲットとした場合の、UART device driverを写経します。 |> zephyr/drivers/serial/uart_stellaris.c 全体で700行くらいなので、全てを単純に写経する、というよりポイントを押…
はじめに Zephyrのdriverを書いています。IRQハンドラ登録の処理を調査したので、メモを残しておきます。 IRQ_CONNECT Zephyrで割り込みハンドラを登録する場合、IRQ_CONNECTというマクロを使用します。 まず、Zephyrのドキュメントに掲載されている利用例で…
はじめに Zephyrでアプリケーションを開発しており、ベンチマークが取りたくなりました。 driverが提供されているnRF52840のRTC (Real Time Counter) を使って、プログラムの実行時間を計測してみます。 最終的には、Zephyr kernelが提供しているKernel Cloc…
はじめに Zephyrのdriverを作る方法を学びます。 まずは、qemu_cortex_m3をターゲットとした場合の、UART device driverを写経します。 |> zephyr/drivers/serial/uart_stellaris.c 全体で700行くらいなので、全てを単純に写経する、というよりポイントを押…
はじめに Zephyrのアプリケーションを作成しています。 すると、バイナリが肥大化する現象が発生したため、原因を調査しました。 結論から言うと、ライブラリを作る際、コンパイラにPIC (Position Independent Code) の無効化を指定し忘れていたことが原因で…
はじめに CMake無限にわからん。 小ネタですが、調査したことは、まとめていきたいと思います。 ExternalProject_Add CMakeで外部プロジェクトを取り込むには、ExternalProjectを使います。 cmake.org まずは、ExternalProjectライブラリをincludeします。 #…
はじめに Zephyrのdriverを作る方法を学びます。 まずは、qemu_cortex_m3をターゲットとした場合の、UART device driverを写経します。 |> zephyr/drivers/serial/uart_stellaris.c 全体で700行くらいなので、全てを単純に写経する、というよりポイントを押…
はじめに 色々こねこねするために、Zephyrのビルドプロセスを解析します。 最小構成のZephyrがどのようにビルドされるか、を見ていきます。 ビルドログ |> zephyr/samples/hello_world おなじみのHello WorldプログラムをQEMU Cortex-M3で動かす場合を対象と…
はじめに 先日、IoTSecJPTokyo Version 5のデモ用に、nRF52840 USB Dongle+enc28j60 Ether MAC+Zephyrでエコーサーバを構築しました。 同様のものをnRF52840 DKで動くように移植を行っていきます。 USB Dongleから、DKへの移植は、GPIOピンの設定変更だけ…
はじめに ZephyrのアプリケーションをRustで実装するインテグレーションに挑戦しています。 tomo-wait-for-it-yuki.hatenablog.com これまでに、Rustをライブラリとしてインテグレーションすることに成功しました。 ただし、Rustから呼ぶC言語のFFIは、手動…
はじめに 以前、CryptoCell 310を使ったサンプルアプリケーションを解析しました。 tomo-wait-for-it-yuki.hatenablog.com もう少し真面目に使い方を知る必要があるので、nRF5 SDKのAPIリファレンスを読んでいきます。 nRF5 SDK CryptoCell APIリファレンス…
はじめに nRF5 SDK for MeshののDevice Firmware Update (DFU) サンプルを動かしてみます。 このサンプルでは、Mesh経由でfirmwareを更新します。 www.nordicsemi.com IoT時代の組込みデバイスでは、firmware更新はできて当然ですからね! 動作確認 実際の手…
はじめに nRF5 SDK for MeshのExampleをいくつか試してきましたが、ZephyrのBluetooth Mesh Sampleも試してみます。 Mesh OnOff Model 単純なGenericOnOffを試します。 |> zephyr/samples/boards/nrf52/mesh/onoff-app docs.zephyrproject.org あっさりビル…
はじめに nRF5 SDK for MeshのSerial exampleを試します。 |> nRF5-SDK-for-Mesh/examples/serial www.nordicsemi.com PyACI 本アプリケーションをテストするためには、Pythonのインタラクティブアプリケーションが必要です。 下記の手順に沿って、インスト…
はじめに Bluetooth Meshを理解するために、nRF5 SDK for Meshでサンプルを動かしながら、動作を解析していきます。 tomo-wait-for-it-yuki.hatenablog.com 前回の続きです。今回は、ソースコードをより詳細に解析していきます。 解析対象は、nRF5 SDK for M…
はじめに Bluetooth Meshを理解するために、nRF5 SDK for Meshでサンプルを動かしながら、動作を解析していきます。 tomo-wait-for-it-yuki.hatenablog.com 前回、2台のnRF52840 DKを使って、Bluetooth Meshのlight switch demoを動かすことに成功しました。…
はじめに tomo-wait-for-it-yuki.hatenablog.com 少し間が空きましたが、前回の続きです。 2台のnRF52840 DKが手に入ったので、nRF5 SDK for Meshのlight switch サンプルを動かします。 今回は、nRF52840 DKを2台と、Android端末を1台、利用します。Android…
はじめに プログラミングする上で一刻も早くデバッグ環境を整えねばなりません。 GDBで、nRF52840 DKのプログラムをデバッグする方法を確立します。 下記Nordic DevZoneの投稿を参考にしました。 devzone.nordicsemi.com 前回記事で行った環境構築が完了して…
はじめに 今まで、nRF52840 USB Dongleで遊んでいましたが、外付けJ-Linkコネクタがないとデバッグできなかったり、Nordicから配布されているサンプルが少なかったり、とお試しで色々動かすのに不都合でした。 www.nordicsemi.com ということで、開発キット…