安価な RA4M1 マイコンを Arduino Uno R4 の代わりに使ってみる その1
1000円で買える RA4M1 マイコンを Arduino として使えるか試してみました。
ボード概要
今回のターゲットは WeAct Studio の RA4M1 Core Boardです。 送料別で 1000 円未満で買えると思います。
Arduino Uno R4 で採用された Renesas の RA4M1 マイコンを積んだマイコンボードです。 RA4M1 は単体で買ってもそれなりの値段になるので、かなりオトクなボードだと思います。
いっぽう Arduino Uno R4 Minima は、日本では 3000円程度で売られています。 最近中華互換機がいくつか出てきましたが、それでも 2000円くらいします。 1000 円のマイコンボードが Uno R4 の代わりになるならコスパ最高ということで、 いろいろ試してみたいと思います。 (つか、これの到着待ってる間に1000円くらいの Uno R4 Minima クローン出てきたな…)
5V 版と 3.3V 版がありますが、今回入手したのは Arduino に合わせて 5V 版です。
3.3V 版の場合はこの LDO が 3.3V になるのでしょうか…。
ここはただの目印なので、ジャンパーを付け替えても意味はありません。
Arduino Uno R4 Minima との違い
Arduino Uno R4 Minima は、Uno R4 の中で Wifi のついていない廉価版です。(技適の問題もありませんし…) 回路図を見てもらえばわかりますが、 ほぼ RA4M1 マイコンと電源関係回路のみで構成されています。 Uno R3 などと違って USB もマイコンに直接接続されていますし、 外部クロックなども省略されています。
いっぽうRA4M1 Core boardも RA4M1 マイコンの信号を素直に外部に引き出す構成になっています。 ほぼ同じ構成ということができるでしょう。
ヘッダピンに 3.3V の出力がありますが、Uno R4 Minima と同様に RA4M1 マイコンの USB LDO の出力を引き出しているだけですので、 あまり電気を喰うものは接続できないかと思います。(マニュアルによると最大 100mA)
Uno R4 との違いは以下の通りです。
- 物理的に形状が違うので、Arduino 用のシールドはそのまま接続できない(当たり前か…)
- 外部クロック(MOSC/SOSC)が接続されている
- Ardiono で使わないピンもピンヘッダに引き出されている
- AREF 周りの回路が違う
外部クロックは、ソフトウェアで明示的にオンにしなければ使用されないので、 Uno R4 用に作られたコードがそのまま内部クロックで動作するものと思われます。
というか、MOSCとして 16MHz のクリスタルがついているのですけど、PLL の入力周波数上限 12.5MHz を超えているので、 周辺機器に安定したクロックを供給する目的に使うものなのですかね… Uno R4 にも基板上はクリスタルを接続する場所自体はありますし。 その割には USB は内部クロックで動作しているようですし。 謎だ…
Arduino IDE の準備
Arduino IDE のボードマネージャで Arduino Uno R4 Boards
をインストールします。
同時に PC 用のドライバもインストールされます。
ブートローダを書き込む
RA4M1 Core board には当然 Arduino のブートローダが書き込まれていません。 なので、そのままでは Arduino IDE から制御ができません。 Uno R4 Minima Cheet sheet にブートローダの復元方法が書かれているので、 これに従って Arduino のブートローダを書き込みます。
Renesas からRenesas Flash Programmerをダウンロードします。 ダウンロードするときにはアカウントの作成が必要です。
Flash Programmer をインストールして実行すると、こんな画面になります。
ここで、ファイル
→新しいプロジェクトの作成
で書き込み用のプロジェクトを作ります。
マイコンはRA
で、通信は COM Port
、ツール詳細で、マイコンが接続されている COM Port を選択します。
マイコンを DFU モードにするには、基板上の MD ボタンを押しながら RES ボタンをクリックします。
DFUモードになっていると RA USB Boot (CDC)
みたいな名前の COM ポートが現れます。
接続が完了するとこんな感じでマイコンの情報が読み出せます。
Arduino のブートローダは、
"C:\Users\<Username>\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.0.5\bootloaders\UNO_R4\dfu_minima.hex"
にあるので、これを指定して書き込みます。
(1.0.5 はボードライブラリのバージョン番号によって変わります)
書き込みが済んだら RES ボタンを押すと PC からは Uno R4 Minima DFU
として見えるようになります。
L チカする
Arduino のサンプルスケッチの Blink をそのまま書き込んでみます。
ボードは特に操作しなくても大丈夫です。 スケッチを書き込むと USB シリアルが見えるようになるので、 Lチカのコードが、50KB もあるのはそのせいかもしれませんね。
Blink は Arduino のボードについている LED を点滅させます。 Uno R4 の LED は D13に接続されていて、これは RA4M1 マイコンでいえば P111 なので、ここに LED を接続します。
クロックの設定がおかしいと点滅間隔ずれると思われますが、 ちゃんと1秒間隔で点滅しますね。
シリアルモニタ
Uno R4 では Serial
は USB シリアルになります。(USART は Serial1
らしい…)
サンプルスケッチの ASCII Table を実行してみます。
Arduino IDE のシリアルポートを Arduino Uno R4 Minima
の COM ポートに設定して、シリアルモニタを開きます。
ちゃんと見えますね。
USB キーボードにしてみる
Uno R4 の追加機能ということで USB を使ってみます。 サンプルスケッチの KeyboardMessage をそのまま使おうと思ったのですけど、安定して動かないので Arduino UNO R4 Minima USB HIDにある Keyboard のサンプルを動かしてみます。
サンプルの KeyboardMessage がちゃんと動かない理由はよくわからないです。(適当に delay を入れると大丈夫かも?)
本物の Uno R4 でも起きるらしいのですが、 たまに Arduino IDE から書き込みが出来なくなることがあります。 そんな時は RES をダブルクリックでセーフモードに入って書き込みできるようになります。
まとめ
当初の目論見通り RA4M1 マイコンを Arduino Uno R4 代わりに使うことが出来ました。 ADCや digitalRead などのほかの機能や、DAC などの Uno R4 固有機能を試していないので、 次回以降試してみたいと思います。