ATMega4809をArduino互換機し、USBシリアル変換ケーブルで接続した回路について、検証しました。
ATMega4809には、4つのUARTがあります。40PinDIPタイプは、3つが利用できます。
右図、およびATMega4809のドキュメントを見ると、 UART0 TxD: 33(PA0) RxD: 34(PA1)
UART1 TxD: 1(PC0) RxD: 2(PC1)
UART2 TxD: 23(PF0) RxD: 24(PF1)
が、標準のUARTになっています。
(40PinDIPでは、4つ目のUART3はピン数の関係で外部に端子が出力されていません)
OptibootとのArduinoのプログラムの関連性
Bootloaderの中で、Optibootの選択がいくつかあります。
この違いは、シリアルポートとして、どのUARTを使うかということです。
しかし、UART0以外の場合は、Arduinoのシリアルを使う場合に、注意する必要があることが分かりました。
例えば、Bootloaderを「Optiboot(UART1 default pins)」を選択して、ブートローダの書込みをします。
これにより、USBシリアル変換ケーブルの接続先は、UART1の「TxD: 1(PC0) RxD: 2(PC1)」になります。
簡単なシリアル通信のプログラムを書き込んで実行します。500msごとに数値を表示させ、カウントアップさせていくものです。
void setup() {
Serial.begin(9600);
}
int count=0;
void loop() {
Serial.printf("%4d\n",count);
count++;
delay(500);
}
シリアルモニタを表示させても、何も起こりません。
どこが違うのでしょうか。
Arduinoでは、「Serial1」はUART1の端子を利用した通信を意味します。このため、Optibootで設定したシリアルポートが「Serial」で通信できない場合があるということです。
同様に、Bootladerの書き込み設定で、「Optiboot(UART2)」を選択した場合には、Arduinoプログラムでは、「Serial2」にしないとシリアルモニタに表示されません。
このことから、Bootladerの書き込み設定では、Arduinoのスケッチ例などでシリアル通信を行うことを考慮すると「Optiboot(UART0 default pins)」にしておくのがよいと判断しました。
BootloaderのOptiBoot設定の追加検証
Bootloaderの設定に「Optiboot(UART0 alternative pins)」の設定があります。ピン割当の図を見ると、
UART0 TxD: 37(PA4) RxD: 38(PA5)
があります。
ここを使う場合には、ATMega4809のドキュメントから Port Multiplexer(PORTMUX)という機能があり、ATMegaの内部レジスタ設定で、シリアルポートを他の端子に移動させるものです。
そこで、Bootloaderの設定を「Optiboot(UART0 alternative pins)」にして、ブートローダを書き込みます。
USBシリアル変換ケーブルで接続先をPA4、PA5にすると、問題なくプログラムを書き込むことができました。しかし、シリアルモニタを開いても、何も表示されません、
これは、Bootloaderは、シリアルの接続先をPA4、PA5に設定してあるので、プログラムは書き込みができたことになります。しかし、Arduinoのプログラムの「Serial」は標準の接続先になっているため、何も表示されないことを意味します。






