nRF52840で色々したかった

### はじめに
これは [ITソルーション室 Advent Calendar 2024](https://adventar.org/calendars/10607) の12/17の投稿になります！
他の方の記事も上記リンクから読めますのでよろしければ！

この記事ではnRF 52840を使ってみようとした過程を書いていきます．
が，正直に言ってあまり参考にならないものになったと思っています．

それでも良ければ見ていってください～

### 環境
- nRF 52840 ([秋月電子](https://akizukidenshi.com/catalog/g/g117484/))
- WSL 2 (Ubuntu 24.04)

### 準備
#### rustのインストール
rustをインストールします．
https://www.rust-lang.org/ja/tools/install

#### wslにusbデバイスを認識させる
今回はWSL上で開発していくのでまずはWSLにnRFを認識させます．
[こちら](https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb#attach-a-usb-device)を参考になんやかんやします．

### ハローワールドする
結論から言うとChatGPTが神です．([会話履歴](https://chatgpt.com/share/6761f08b-0494-8002-8be4-98f1f01398b6))
私は神から賜ったお言葉を粛々と実行したのみです．
~~とはじめは思っていたが色々修正したら原形2割もなかった~~


nRF52840(ARM Cortex-M4F)向けのビルドターゲットを追加します．
``` bash
rustup target add thumbv7em-none-eabihf
```

ツールをインストールします．
probe-runはこのあとprobe-rsに変更しました([depricateみたいですね](https://ferrous-systems.com/blog/probe-run-deprecation/))
```
cargo install probe-run
cargo install flip-link
cargo install defmt-print
```

:::note info
probe-runをインストールする際にlibudevが必要と言われたのでインストールしました．
```
sudo apt install libudev-dev pkg-config
```
:::


probe-rsのインストール
```bash
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-tools-installer.sh | sh
```

rustプロジェクトの作成
```
cargo new nrf52840_project --bin
cd nrf52840_project
```

Cargo.tomlの設定
``` toml:Cargo.toml
[package]
name = "nrf52840_project"
version = "0.1.0"
edition = "2021"

[dependencies]
cortex-m = "0.7"
cortex-m-rt = { version = "0.7", features = ["device"] }
critical-section = "1.2"
nrf52840-hal = "0.18"
defmt = "0.3"
defmt-rtt = "0.3"
panic-probe = { version = "0.3", features = ["print-defmt"] }
  
[profile.dev]
panic = "abort"
  
[profile.release]
panic = "abort"
  
[features]
# set logging levels here
default = [
  "defmt-default",
]
  
# do NOT modify these features
defmt-default = []
defmt-trace = []
defmt-debug = []
defmt-info = []
defmt-warn = []
defmt-error = []
```

memory.xの配置
...どこで参照されるんだろう？
ChatGPTはmainとmasterを間違えてた.（聞き直しても間違えてた）

``` bash:path/to/nrf52840_project
curl -O https://raw.githubusercontent.com/nrf-rs/nrf-hal/master/nrf52840-hal/memory.x
```

main.rsを以下のようにします．
``` rust:main.rs
#![no_std]
#![no_main]

use nrf52840_hal as hal;
use cortex_m_rt::entry;
use defmt;
use defmt_rtt as _;
use panic_probe as _;

#[entry]
fn main() -> ! {
    defmt::info!("Hello, nRF52840!");
    loop {}
}
```

cargoの設定
``` toml:nrf52840_project/.cargo/config.toml
[build]
target = "thumbv7em-none-eabihf"

[target.thumbv7em-none-eabihf]
rustflags = [
  "-C", "link-arg=-Tlink.x",
  "-C", "link-arg=--nmagic",
  "-C", "link-arg=-Tdefmt.x",
] 

runner = "probe-rs run --chip nRF54L15"
```

なんやかんやでコンパイルエラーを解消したときのcargo runの実行結果がこちらです．
![Pasted image 20241218045030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627882/e4ccfe01-9549-9d79-999a-9e110fab9adb.png)


．．．
ここまでやる過程で感じていました．
所々に出てくるデバッグプローブとはなんだろうと，SWDとはなんだろうと．
そして，コンパイルエラーを抜けた先，つまりnrfへの接続・書き込みの段階で出てきたこのエラー．"No connected probes were found."

そうです，私はUSBをつないどきゃーどうにかなると思っていましたがそんなことなかったらしいです．
[この記事](https://tech.144lab.com/entry/embedded/part1)を見る限りUSBでできそうだけどなーと思っていますが，どうやるんだろうなーという状況で迎えた12/18の0543．

nRF connect for Desktopもなんか認識してくれなかったしなぁ

### さいごに
今回は12/17のアドベントカレンダーとして書いたのでとりあえず公開しますが，また追記していきたいですねー
（私は朝7時までは前日に含まれていると思っているので間に合っています()）


ChatGPTにprojectが追加され，とても整理しやすくなったのはいいのですがprojectに入っている会話が共有できない...
そのうちできるようになると思いますが，わざわざprojectから外さないといけないのがめんどかったです．
それでもチャッピーは控えめに言って神なのですが．




### 引っかかったこと
defmt-trrには0.4.xが存在しているが，0.4にすると動かなかった
```
defmt = "0.3"
defmt-rtt = "0.3"
```