Main Content

シリアル ポートの概要

シリアル通信とは

シリアル通信は、2 つ以上のデバイス間での通信に対する最も一般的な低水準のプロトコルです。通常は、デバイスの 1 つはコンピューターですが、相手側のデバイスにはモデム、プリンター、別のコンピューター、オシロスコープやファンクション ジェネレーターなどの科学的機器が考えられます。

その名が示すように、シリアル ポートは情報を 1 ビットずつ順次に送受信します。これらのバイトはバイナリ形式またはテキスト (ASCII) 形式を使用して送信されます。

多くのシリアル ポート アプリケーションでは、シリアル ポートの仕組みに関する詳しい知識がなくても装置と通信ができます。MATLAB® ワークスペースで作成するシリアル ポート オブジェクトを介して通信が確立されます。

アプリケーションが複雑でない場合や、上記のトピックを既によく理解している場合は、シリアル ポート オブジェクトの作成から始めることができます。

シリアル ポート インターフェイス標準

長年の間に、コンピューターを周辺デバイスと接続するためのシリアル ポート インターフェイス標準がいくつか開発されてきました。これらの標準には RS-232、RS-422、RS-485 などがあり、これらはすべて serialport オブジェクトでサポートされています。最も広く使用されている標準は RS-232 です。

この標準の現行バージョンは TIA/EIA-232C と呼ばれ、米国電気通信工業会により公開されています。ただし、"RS-232" という用語は今でも一般に使用されており、このドキュメントでも TIA/EIA-232 標準に従うシリアル通信ポートの参照に使用されています。RS-232 は以下のシリアル ポート特性を定義します。

  • 最大ビット転送速度とケーブルの長さ

  • 信号の名前、電気特性、および関数

  • 物理的接続とピン割り当て

主な通信では、データ送信ピン、データ受信ピン、接地ピンという 3 つのピンが使用されます。他のピンはデータ フロー制御に使用できますが、必須ではありません。

メモ

このガイドは、RS-232 標準の使用を前提としています。どのインターフェイス標準が使用できるかについては、お使いのデバイスのドキュメンテーションを参照してください。

サポートされているプラットフォーム

MATLAB シリアル ポート インターフェイスは以下でサポートされています。

  • Linux® 64 ビット

  • macOS 64 ビット

  • Microsoft® Windows® 64 ビット

メモ

RS-232 は macOS 13 以降ではサポートされていません。

シリアル ケーブルで 2 つのデバイスを接続

RS-232 および RS-485 標準は、シリアル ケーブルで接続されている 2 つのデバイスを、データ端末装置 (DTE) とデータ回線終端装置 (DCE) として定義します。この用語は、コンピューター端末とモデム間の通信の標準としての RS-232 を反映しています。

このガイドでは、コンピューターは DTE、モデムやプリンターなどの周辺デバイスは DCE と見なされます。科学的機器の多くは DTE として機能することに注意してください。

RS-232 は主に DTE とから DCE への接続に関与しているので、ピン割り当ての定義は、ピン 1 がピン 1 に接続されピン 2 がピン 2 に接続されるといったストレートスルー ケーブル配線を指定します。データ送信 (TD) ピンとデータ受信 (RD) ピンを使用する DTE から DCE へのシリアル接続を以下に示します。シリアル ポート ピンの詳細については、シリアル ポート信号とピン割り当てを参照してください。

2 つの DTE または 2 つの DCE をストレート シリアル ケーブルを使用して接続する場合、各デバイスの TD ピンは他方の TD ピンに接続され、各デバイスの RD ピンは他方の RD ピンに接続されます。したがって、2 つの類似デバイスを接続する場合は、"ヌル モデム" ケーブルを使用しなければなりません。以下に示すように、ヌル モデム ケーブルでは、ケーブル内で送信線と受信線がクロスしています。

メモ

1 つのシリアル ポートに複数の RS-422 または RS-485 デバイスを接続することが可能です。RS-232 または RS-485 アダプターがあれば、serialport オブジェクトをこれらのデバイスで使用できます。

シリアル ポート信号とピン割り当て

シリアル ポートには、"データ信号" と "制御信号" の 2 つの信号タイプがあります。これらの信号タイプとともにシグナル グラウンドをサポートするために、RS-232 標準は 25 のピン接続を定義します。しかし、ほとんどの PC および UNIX® プラットフォームでは 9 ピン接続を使用しています。実際には、3 つのピンだけがシリアル ポート通信に必要とされます。1 つはデータ受信用、もう 1 つはデータ送信用、そして最後の 1 つはシグナル グラウンドです。

次の図は、DTE の 9 ピン オス コネクタのピン割り当て配置を示しています。

次の表は、ピンと信号を 9 ピン コネクタに関連付けて説明したものです。25 ピン コネクタでの信号とピン割り当ての説明は、RS-232 または RS-485 標準を参照してください。

シリアル ポート ピンと信号割り当て

ピン

ラベル

信号名

信号タイプ

1

CD

キャリア検出

コントロール

2

RD

受信データ

データ

3

TD

送信データ

データ

4

DTR

データ端末レディ

コントロール

5

GND

シグナル グラウンド

グラウンド

6

DSR

データセット レディ

コントロール

7

RTS

送信要求

コントロール

8

CTS

受信準備完了

コントロール

9

RI

リング インジケーター

コントロール

用語 "データセット" は、"モデム" または "デバイス" と同義で、用語 "データ端末" は "コンピューター" と同義です。

メモ

シリアル ポート ピンと信号割り当ては DTE に関するものです。たとえば、データは DTE の TD ピンから DCE の RD ピンに送信されます。

信号状態

信号は、"アクティブ状態" または "非アクティブ状態" のいずれかになります。アクティブ状態は 2 進数の値の 1 に、非アクティブ状態は 2 進数の値のゼロに対応します。アクティブな信号状態はしばしば、"ロジック 1"、"オン"、"真"、または "マーク" と記述されます。非アクティブ状態はしばしば、"ロジック 0"、"オフ"、"偽"、または "スペース" と記述されます。

データ信号では、"オン" 状態は受信した信号の電圧が –̠3 ボルトより低い場合に生じ、"オフ" 状態は電圧が 3 ボルトより高い場合に生じます。制御信号では、"オン" 状態は受信した信号の電圧が 3 ボルトより高い場合に生じ、"オフ" 状態は電圧が –̠3 ボルトより低い場合に生じます。–̠3 ボルトと +3 ボルト間の電圧は遷移領域と見なされ、信号状態は未定義となります。

信号を "オン" 状態にするには、制御デバイスでデータ ピンの値を "アンアサート" ("低く") し、制御ピンの値を "アサート" ("高く") します。その逆に、信号を "オフ" 状態にするには、制御デバイスでデータ ピンの値をアサートし、制御ピンの値をアンアサートします。

次の図は、データ信号と制御信号の "オン" と "オフ" の状態を示したものです。

データ ピン

ほとんどのシリアル ポート デバイスは、データの送受信を同時に行える "全二重" 通信をサポートします。したがって、データの送信と受信に別々のピンが使用されます。これらのデバイスには、TD ピン、RD ピン、GND ピンが使用されます。しかし、一部のタイプのシリアル ポート デバイスは、一方向または "半二重" の通信のみをサポートします。これらのデバイスには、TD ピンと GND ピンだけが使用されます。このガイドは、お使いのポートに全二重のシリアル ポートが接続されていることを前提にしています。

TD ピンは DTE から送信されたデータを DCE に搬送します。RD ピンは DCE から送信されて DTE で受信されたデータを搬送します。

制御ピン

9 ピン シリアル ポートの制御ピンは、接続されているデバイスの有無を判断し、データのフローを制御するために使用されます。制御ピンには以下が含まれます。

RTS ピンと CTS ピン.  RTS ピンと CTS ピンはデバイスがデータの送信あるいは受信の準備ができているかを知らせるために使用されます。このタイプのデータ フロー制御はハードウェア ハンドシェーキングと呼ばれ、送信中のデータ損失を防ぐために使用されます。DTE と DCE の両方に対して有効になっている場合、RTS と CTS を使用するハードウェア ハンドシェーキングは以下の手順を取ります。

  1. DTE は RTS ピンをアサートして DCE にデータ受信準備ができたことを指示します。

  2. DCE は CTS ピンをアサートして、TD ピンを通したデータの送信準備ができていることを示します。データが送信できなくなってしまった場合は、CTS ピンがアンアサートされます。

  3. データは TD ピンを通じて DTE に送信されます。データが受信できなくなってしまった場合は、RTS ピンが DTE によってアンアサートされ、データ通信が中止されます。

ハードウェア ハンドシェーキングを有効にするには、データ フローの制御: ハンドシェーキングを参照してください。

DTR ピンと DSR ピン.  多くのデバイスは、接続され電源が入っていると、DSR ピンと DTR ピンを使用して信号を発信します。DTR と DSR を使用して接続されたデバイスの存在を知らせるには、以下の手順に従います。

  1. DTE は DRT ピンをアサートし、DCE が通信ラインに接続されることを要求します。

  2. DCE は DSR ピンをアサートし、接続されていることを示します。

  3. DCE は通信ラインから切断されている場合は、DSR ピンをアンアサートします。

DTR ピンと DSR ピンは元々、ハードウェア ハンドシェーキングの代替方法を提供するために設計されました。しかし、通常は、DSR ピンと DTR ピンではなく、RTS ピンと CTS ピンがこの方法で使用されます。特定のピンの動作については、お使いのデバイスのドキュメンテーションを参照してください。

CD ピンと RI ピン.  CD ピンと RI ピンは一般に、モデムとモデムが接続されている際に特定の信号が存在することを示すために使用されます。

CD ピンはモデムで使用され、他のモデムとの接続確立やキャリア トーンの検出を知らせます。DCE が適切な周波数の信号を受信すると CD がアサートされます。DCE が適切な信号を受信しない場合は、CD はアンアサートされます。

RI は可聴リンギング信号の存在を示すために使用されます。DCE がリンギング信号を受信すると RI がアサートされます。DCE がリンギング信号を受信していないとき (たとえば、リングとリングの間など)、RI はアンアサートされます。

シリアル データ形式

シリアル データ形式には、スタート ビット 1 つ、5 つから 8 つのデータ ビット、ストップ ビット 1 つが含まれます。パリティ ビットと追加のストップ ビットが含まれることもあります。次の図は、シリアル データ形式を示しています。

シリアル ポート データの形式は、多くの場合次の表記法を使って表現されます。

データ ビット数 - パリティ タイプ - ストップ ビット数

たとえば、8-N-1 は 8 つのデータ ビット、パリティ ビットなし、ストップ ビット 1 つ、7-E-2 はデータ ビット 7 つ、偶数パリティ ビット、ストップ ビット 2 つと解釈されます。

データ ビットは普通 ASCII 文字を表すため、しばしば "文字" と呼ばれます。残りのビットはデータ ビットを囲んでいる (フレームを形成している) ため、"フレーム ビット" と呼ばれます。

バイトと値

シリアル データ形式を構成するビットの集まりは、"バイト" と呼ばれます。1 バイトは 8 ビットで、シリアル データ形式は 7 ビットから 12 ビットまでの範囲があるので、この用語は誤りのように見えるかもしれません。しかし、シリアル データがコンピューターに保存されると、フレーム ビットは除去され、データ ビットだけが維持されます。さらに、送信に指定されたデータ ビット数にかかわらず、8 データ ビットが常に使用され、未使用のビットは値ゼロに割り当てられます。

データの読み取りや書き込みを行う際には、"値" の指定が必要とされることがあります。値は 1 以上のバイトで構成されます。たとえば、int32 形式を使用するデバイスから 1 つの値を読み取る場合、その値は 4 バイトから成ります。値の読み取りや書き込みの詳細については、シリアル ポート データの書き込みと読み取りを参照してください。

同期と非同期通信

RS-232 および RS-485 標準は、同期と非同期という 2 つのタイプの通信プロトコルをサポートします。

同期プロトコルを使用すると、送信されるすべてのビットは共通のクロック信号に同期されます。2 つのデバイスは最初に互いに同期化され、その後、継続して文字を送信して同期を維持します。実際のデータが送信されていないときでも、ビットの一定したフローにより、各デバイスはいつでも相手のデバイスがどこにいるかわかります。送信されるビットは実際のデータであることもあれば、アイドル文字であることもあります。同期通信は各データ バイトの最初と最後を示すビットが不要なので、非同期通信よりも高速でデータ転送ができます。

非同期プロトコルを使用すると、各デバイスは独自の内部クロックを使用し、それぞれ任意の時間にバイトを送信することになります。したがって、時間を使用してビットを同期する代わりに、データ形式が使用されます。

具体的には、データ送信は単語のスタート ビットを使用して同期化され、1 つまたは 2 つのストップ ビットが単語の終わりを示します。これらの追加ビットを送信しなければならないので、非同期通信は同期通信より少し時間がかかります。ただし、プロセッサが追加のアイドル文字を扱わずにすむという利点もあります。ほとんどのシリアル ポートは非同期で動作します。

メモ

このガイドでは、"同期" と "非同期" という用語は、読み取りや書き込みの操作が MATLAB コマンド ラインへのアクセスをブロックするかどうかに言及するものです。

ビットが送信される方法

定義により、シリアル データは一度に 1 ビットずつ送信されます。ビットが送信される順序は以下の手順に従います。

  1. スタート ビットがゼロ値で送信されます。

  2. データ ビットが送信されます。最初のデータ ビットは最下位ビット (LSB) に対応し、最後のデータ ビットは最上位ビット (MSB) に対応します。

  3. パリティ ビット (定義されている場合) が送信されます。

  4. 1 つまたは 2 つのストップ ビットが送信されます。それぞれの値は 1 です。

1 秒あたりに転送されるビット数は "ボー レート" で指定されます。転送されるビットにはスタート ビット、データ ビット、パリティ ビット (定義されている場合)、そしてストップ ビットが含まれます。

スタート ビットとストップ ビット

同期と非同期通信で説明されているように、ほとんどのシリアル ポートは非同期で動作します。これは、送信されたバイトがスタート ビットとストップ ビットで識別されなければならないことを意味します。スタート ビットはデータ バイトがこれから開始されることを、ストップ ビットはデータ バイトの転送が終わったことを示します。シリアル データ形式でバイトを識別するプロセスは以下の手順を取ります。

  1. シリアル ポート ピンがアイドルの (データを送信していない) 場合は、"オン" 状態になっています。

  2. データがこれから送信されるときに、シリアル ポート ピンはスタート ビットによって "オフ" 状態に切り替わります。

  3. シリアル ポート ピンはストップ ビットによって "オン" 状態に戻ります。これはバイトの終わりを示します。

データ ビット

シリアル ポートによるデータ ビット転送は、デバイス コマンド、センサー読み取り、エラー メッセージなどを表すことができます。データはバイナリ データまたはテキスト (ASCII) データとして転送できます。

ほとんどのシリアル ポートは 5 から 8 のデータ ビットを使用します。2 進数データは一般に 8 ビットで転送されます。テキストベースのデータは 7 ビットまたは 8 ビットで転送されます。データが ASCII 文字セットを基にしている場合は、27 すなわち 128 個の異なる文字があるため、最小限で 7 ビットが必要とされます。8 つ目のビットが使用される場合、この値はゼロでなければなりません。データが拡張 ASCII 文字セットを基にしている場合は、28 すなわち 256 個の異なる文字があるため、8 ビットが使用されなければなりません。

パリティ ビット

パリティ ビットは転送データの簡単なチェック (パリティ チェック) を提供します。次の表では、パリティ チェックのタイプを説明しています。

パリティ タイプ

パリティ タイプ

説明

偶数

データ ビットにパリティ ビットを加えると 1 が偶数個になります。

マーク

パリティ ビットは常に 1 です。

奇数

データ ビットにパリティ ビットを加えると 1 が奇数個になります。

スペース

パリティ ビットは常に 0 です。

マークとスペースのパリティ チェックは最小限のエラー検出しかできないのでほとんど使用されません。パリティ チェックをまったく使用しないよう選択することができます。

パリティ チェックのプロセスは以下の手順を取ります。

  1. 送信デバイスは、データ ビットの値と選択したパリティ チェックのタイプに合わせて、パリティ ビットを 0 または 1 に設定します。

  2. 受信デバイスは、パリティ ビットが転送されたデータと一致しているかどうかチェックします。一致する場合はデータ ビットが受け入れられます。一致しない場合はエラーが返されます。

メモ

パリティ チェックは 1 ビット エラーしか検出できません。複数ビットのエラーは有効データのように表示されます。

たとえば、データ ビット 01110001 がコンピューターに転送されたとします。偶数パリティが選択されている場合、パリティ ビットは送信デバイスによって 0 に設定され、偶数個の 1 が生成されます。奇数パリティが選択されれいる場合、パリティ ビットは送信デバイスによって 1 に設定され、奇数個の 1 が生成されます。

プラットフォームのシリアル ポート情報を検索

Windows、macOS、および UNIX の各プラットフォームで提供されるリソースを使用して、シリアル ポートの情報を検索できます。

メモ

お使いのオペレーティング システムはすべてのシリアル ポート設定の既定値を提供します。ただし、これらの設定は MATLAB コードでオーバーライドされ、シリアル ポート アプリケーションには影響しません。

関数 serialportlist を使用した利用可能なポートの検索

関数 serialportlist は、USB-to-serial デバイスや Bluetooth シリアル ポート プロファイル デバイスで提供されるバーチャル シリアル ポートを含む、システム上にあるすべてのシリアル ポートのリストを返します。この関数により、コンピューター上でアクセスでき、シリアル ポート通信に使用できるシリアル ポートのリストが提供されます。以下に例を示します。

serialportlist
ans = 

  1×3 string array

    "COM1"    "COM3"    "COM4"

メモ

関数 serialportlist は、Windows および macOS システムでは利用可能なポートと使用中のポートの両方を表示しますが、Linux では、利用可能なポートのみで、使用中のポートは表示されません。

Windows プラットフォーム

[デバイス マネージャー] を通してシリアル ポートの情報にアクセスすることができます。

  1. [デバイス マネージャー] を開きます。

  2. [ポート (COM と LPT)] のリストを展開します。

  3. [通信ポート (COM1)] の項目をダブルクリックします。

  4. [ポートの設定] タブを選択します。

macOS プラットフォーム

macOS マシンでは、[システムプロファイラ] を使用して、デバイスがシリアル接続として表示されていることを確認します。[システムプロファイラ] に存在しない場合、serialportlist でも表示されません。

UNIX プラットフォーム

UNIX プラットフォームのシリアル ポート情報を調べるには、シリアル ポート名が必要です。これらの名前は異なるオペレーティング システムでは変わることがあります。

Linux では、シリアル ポート デバイスは通常、ttyS0ttyS1 などと名付けられます。setserial コマンドを使用して、シリアル ポート情報の表示や構成を行うことができます。たとえば、どのシリアル ポートが利用できるかを表示するには、以下のようにします。

setserial -bg /dev/ttyS*
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
/dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A

ttyS0 の詳細情報を表示するには、以下のようにします。

setserial -ag /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000, closing_wait2: infinte
        Flags: spd_normal skip_test session_lockout

メモ

setserial -ag コマンドが機能しない場合は、そのポートの読み取りと書き込みの権限があることを確認してください。

macOS を含めた、すべてのサポートされる UNIX プラットフォームでは、stty コマンドを使用してシリアル ポート情報の表示や構成を行うことができます。たとえば、ttyS0 のシリアル ポート プロパティを表示するには、次のように入力します。

stty -a < /dev/ttyS0

ボー レートを 4800 ビット/秒に設定するには、次にように入力します。

stty speed 4800 < /dev/ttyS0 > /dev/ttyS0

メモ

この例では、ボー レートではなく、tty パラメーターを設定する方法を説明しています。MATLAB シリアル インターフェイスを使用してボー レートを設定するには、シリアル ポートの通信設定の構成を参照してください。