インターフェース・バス(有線)

RS-232C

古くからあるシリアル通信規格。

概要

RS-232C(Recommended Standard 232 Revision C)は、1969年にEIA(Electronic Industries Alliance)が制定したシリアル通信の規格です。正式名称は「EIA-232」とも呼ばれます。コンピュータとモデム(DTE-DCE間)を接続するために設計された規格で、PC時代を通じて広く普及しました。

最大の特徴は電圧レベルです。通常のTTLレベル(0/3.3V または 0/5V)のUARTとは異なり、RS-232Cは±12V系(一般的に+3〜+15Vが論理0、-3〜-15Vが論理1)を使います。この負電圧を使う点がノイズ耐性を高め、比較的長い距離(最大15m程度)での通信を可能にしています。

現代の組み込みシステムでは、産業機器・計測器・POSシステム・医療機器など、レガシー機器との接続やPC(シリアルポート経由)との通信に今も現役で使われています。

歴史・背景

RS-232は1960年代のコンピュータとモデム接続の標準化として誕生しました。1969年のRS-232C改訂が最も普及し、一般に「RS-232C」と呼ばれます。1997年にEIA-232Fとして更新されています。

1980〜90年代のPCには「COMポート」(DB9またはDB25コネクタ)が標準装備されており、マウス・モデム・プロッター・産業機器の接続に使われました。2000年代にはUSBにその座を譲りましたが、産業機器・計測器分野では依然として現役です。

USB-シリアル変換IC(CH340、FT232、CP2102等)の普及により、現代のPCでもUSBポート経由でRS-232C機器と接続できるため、組み込み開発でのデバッグコンソールや産業機器との通信に広く使われ続けています。

技術仕様

電気的特性

項目仕様
ロジック1(マーク)-3V〜-15V(送信側)/ -3V〜-25V(受信側)
ロジック0(スペース)+3V〜+15V(送信側)/ +3V〜+25V(受信側)
アイドル状態マーク(論理1、負電圧)
最大伝送速度20kbps(規格上)/ 実際は数Mbpsまで対応
最大ケーブル長15m(20kbps時、容量50pF/m制限)
ロードキャパシタンス最大2500pF

注意:RS-232Cは論理0がPositive電圧、論理1がNegative電圧という「負論理」です。これはUARTとは逆です(TTL UARTはアイドル時High)。

コネクタとピン配置

DB9(9ピン)コネクタ(最も一般的)

ピン番号信号名方向(DTE側)説明
1DCD入力データキャリア検出
2RXD入力受信データ
3TXD出力送信データ
4DTR出力データ端末レディ
5GND-グランド
6DSR入力データセットレディ
7RTS出力送信要求
8CTS入力送信可
9RI入力呼び出し検出

最小接続(3線接続)はTXD(3番)・RXD(2番)・GND(5番)のみです。フロー制御不要な場合はこれで通信できます。

レベル変換IC

マイコン(TTLレベル)とRS-232C機器を接続するには専用のレベル変換ICが必要です:

ICメーカー特徴
MAX232Maxim最も定番。5V系、外付けコンデンサ4個
MAX3232Maxim3.3V系対応
SP3232ESipex3V系、低消費電力
ST3232STMicro3.3V系、高ESD耐性
マイコン(TTL 3.3V) ─── MAX3232 ─── DB9コネクタ(RS-232C)
   TXD ──→ T1IN   T1OUT ──→ 3番(TXD)
   RXD ←── R1OUT  R1IN ←── 2番(RXD)
   GND ────────────────── 5番(GND)

動作原理

RS-232Cの信号レベルはTTL UARTの論理を電圧変換しているだけで、プロトコル(フレームフォーマット)はUARTと同一です。

TTL UART:  アイドル=High(3.3V)、スタートビット=Low(0V)、データ=High/Low
RS-232C:   アイドル=Mark(-12V)、スタートビット=Space(+12V)、データ=Mark/Space
(論理値は同じだが、電圧レベルが反転・増幅される)

MAX232等のICが内部チャージポンプで±12V系電源を生成し、TTL信号を±12V系に変換します。

// STM32からRS-232C機器との通信(レベル変換IC接続後はUARTと同じ)

// UART初期化(例:115200bps、8N1)
huart1.Instance        = USART1;
huart1.Init.BaudRate   = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits   = UART_STOPBITS_1;
huart1.Init.Parity     = UART_PARITY_NONE;
huart1.Init.Mode       = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
HAL_UART_Init(&huart1);

// RS-232C機器への文字列送信
const char *cmd = "AT\r\n";
HAL_UART_Transmit(&huart1, (uint8_t*)cmd, strlen(cmd), 1000);

// RS-232C機器からの応答受信
uint8_t buf[64];
HAL_UART_Receive(&huart1, buf, sizeof(buf), 1000);

フロー制御(RTS/CTS)

大量データ転送ではハードウェアフロー制御(RTS/CTS)を使い、バッファオーバーフローを防ぎます:

// ハードウェアフロー制御有効化
huart1.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS;
HAL_UART_Init(&huart1);

用途・ユースケース

RS-232Cが今も使われる場面:

  • 産業機器・PLC: 工場の製造ラインに設置された古いPLC・計測器・バーコードリーダーはRS-232Cで制御
  • POSシステム: レジのレシートプリンター・バーコードスキャナーはRS-232C接続が多い
  • 医療機器: 古い分析装置・生体計測器はRS-232Cを採用していることが多い
  • ネットワーク機器の管理: ルーターやスイッチのコンソールポートは今もRS-232C(RJ45→DB9変換ケーブルを使用)
  • 組み込みデバッグ: USB-シリアル変換アダプタ経由でのデバッグコンソール接続
  • GPSレシーバー: 古い業務用GPSはNMEAセンテンスをRS-232C経由で出力

実装・開発のポイント

クロスケーブル(ヌルモデムケーブル)

同じDTE機器(PCと組み込みマイコン)を直接接続する場合、TXDとRXDを交差させた「ヌルモデムケーブル」が必要です:

DTE(PC側)    ヌルモデムケーブル    DTE(組み込み機器)
TXD(3) ──────────────────→ RXD(2)
RXD(2) ←────────────────── TXD(3)
GND(5) ─────────────────── GND(5)
(RTS/CTS接続なし、または自己ループあり)

ESD保護

RS-232Cは±12Vの高電圧を扱うため、ESD(静電気)に対してTVSダイオードなどの保護素子を実装することが推奨されます。特にコネクタ近くに配置します。

USB-シリアル変換ツール

現代の開発では、USB-シリアル変換IC(CH340G・FT232RL・CP2102)を使ったアダプタがよく使われます。これらはUSB-TTL UART変換であり、RS-232C(±12V)への変換は別途MAX3232等が必要です。

他技術との比較

RS-232C vs RS-485

項目RS-232CRS-485
信号方式シングルエンド差動
最大距離約15m1200m
マルチドロップ不可(1対1)最大32デバイス
ノイズ耐性高い
電圧±12V±200mV〜±6V(差動)

RS-485は差動信号による高ノイズ耐性と長距離・多点接続が強みで、産業現場でのModbus通信に広く使われています。

RS-232C vs USB

現代のPCではUSBがRS-232Cを置き換えましたが、産業機器・計測器ではRS-232Cの信頼性・互換性が評価され、新しい機器にも採用されることがあります。

関連用語

参考リンク