USBシリアル変換モジュールが必要なら、代わりにArduinoを使えばいいじゃない注目デバイスで組み込み開発をアップグレード(32)(1/2 ページ)

注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。今回は、USBシリアル変換モジュールの代わりに、Arduinoに搭載されているシリアル変換チップを単独で使う方法を紹介する。

» 2026年01月23日 06時00分 公開
[今岡通博MONOist]

はじめに

 読者の皆さんはUSBシリアル変換モジュールをお使いでしょうか。筆者は専ら、USBポートを持たないマイコンボードにプログラムを書き込む用途で使うのですが、Raspberry PiのコンソールとしてPCを使いたい時などでも、この手のモジュールが一家に一台あればとても重宝します。

 そこで、Arduinoの回路図を見たときにこんなことを考えたりしないでしょうか。Arduinoにはシリアル変換チップが載っている。これをシリアル変換モジュールとして使えればとても便利だしお金の節約にもなるのではないか――。

 そんなわけで、Arduinoに搭載されているシリアル変換チップを単独で使う方法を紹介します。今回対象とするのは、Arduino Nanoの互換機です。

Arduino Nanoの回路図

 図1はCH340系のUSBシリアル変換チップが搭載されているArduino Nanoの回路図です。

図1 図1 Arduino Nanoの回路図[クリックで拡大] 出所:Arduino Forum

 Arduino Nanoの互換機はUSBシリアル変換チップにCH340系がよく使われています。一方、純正品ではFTDIのチップが使われています。筆者の使用感では、互換機のCH340系であっても現在までそれが原因のトラブルに見舞われた経験はありません。

 さて回路図を見ていきましょう。

 まず図1内の中央にあるCH340Gの回路図を見てください。TXD、RXD、DATA+、DATA-、DTRが他のチップやコネクターなどとつながっています。

 CH340Gから延びているTXDとRXDはシリアル側の送信と受信信号で、1kΩの抵抗を介してCPUのATMEGA328P-PUのRXDとTXDにつながっています。ただし、CH340Gを出るところでTXDとRXDのラベルが入れ替わっているところに注意してください。

 DATA+とDATA-は、USBコネクターであるUSB MINI-Bの回路図内の2番にDATA-、3番にDATA+がつながります。

 DTRはコンデンサーを介してATMEGA328P-PUのリセットピンにつながります。

 今回は、CH340GのTXDとRXDをATMEGA328P-PUから横取りして他のUARTデバイスにつないで使おうという魂胆です。

DTRの役割

 ここからは、PC側のArduino IDEからの書き込み時にどのようにすればマイコンにリセットがかけられるのかについて説明します。本題とは直接関係はありませんので、興味のない方は次のページに進んでいただいて構いません。

 図1のCH340Gにおいて、DTRの先はCPUのATMEGA328P-PUのリセットピンに100nF(0.1μF)のコンデンサーを介してつながっています。CH340GがDTRをLOWに落とすとコンデンサーの電荷がなくなるまで(一瞬ですが)リセット信号はLOWに落ちます。その結果CPUはリセット状態となります。

組み込み機器のリセット

 現代において、DTRの最も重要かつ頻繁に使用される役割となっているのがマイコンのリセット制御です。

  • 自動書き込み:Arduinoなどの開発環境では、USBシリアル変換チップ(例:CH340、FTDIなど)のDTR信号をマイコンのリセットピンに接続します
  • 仕組み:PC側のソフトウェアがDTR信号を一瞬だけ変化させることで、マイコンがリセットされ、自動的にブートローダーが起動してプログラムの書き込み待ち状態に入ります。これにより、ユーザーが物理的なリセットボタンを押す手間が不要になります

仮想ポートと互換性

 USBシリアル変換ケーブルや仮想COMポートでは、DTRは規格上の互換性を保つために存在しますが、フロー制御よりも上記の自動リセットのために利用されることが多くなっています。

 DTR信号は、その基本的な「準備完了」の通知機能だけでなく、組み込み開発の効率化という新たな役割を担っていると言えます。

 読者の皆さんも、PCのArduino IDEを使ってArduinoにプログラムを書き込む際、Arduinoにリセットがかかるのはなぜだろうと感じていませんか。その疑問に深く関わっているのがDTRなのです。

 なお、DTRをLOWに下げることでArduinoにリセットをかけているのはArduino IDEですが、実際にこの作業をしているのはWindowsやLinuxなどOSの機能で行われています。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

特別協賛PR
スポンサーからのお知らせPR
Pickup ContentsPR
Special SitePR
あなたにおすすめの記事PR