Scott Schmit(記)、Robert Nelson(最終校正)2021年2月5日
このページでは、組み込みシステムの設計に関するよくある質問を取り上げます。ここで紹介する質問の中には、広範な内容や概念的なものがあります。また、マイクロコントローラ内の1つのペリフェラルに関連するような、狭い範囲にしぼった質問もあります。様々なトピックに目を通した後、eewiki内の様々な空間を訪れてみてください。以下に説明するトピックを取り入れた、いくつかの実践的な例を見つけることができるでしょう。
組み込みシステムとは?
組み込みシステムは、専用の機能を持つハードウェアとソフトウェアで構成され、より大きなシステムの一部となるものです。通常、システム機能を管理する1つ以上のマイクロプロセッサまたはマイクロコントローラが含まれます。組み込みシステムには、電源投入時に自動的に起動する何らかのソフトウェアが組み込まれています。多くの場合、そのソフトウェアは自律的に動作します。しかし、組み込みシステムには、外部からの制御や監視のための何らかのユーザーインターフェース(ボタン、スイッチ、LED、LCDなど)が含まれていることは少なくありません。
マイクロプロセッサとは?
マイクロプロセッサは、中央演算処理装置(CPU)のすべての機能を実行するもので、小さな集積回路として作られています。マイクロプロセッサは、プログラム命令を解釈し実行するもので、組み込みシステムの「頭脳」とも言えます。また、定められた順序で命令を実行するデジタルロジックも搭載されています。マスタークロックは、命令を順番に実行し続けるために使用されます。マスタークロックは、内部で個別のクロック信号に分割され、特殊なハードウェア部分をトリガすることもよくあります。
マイクロコントローラとは?
マイクロコントローラは、CPUとメモリ、および特定の目的に応じたハードウェア周辺回路を統合したものです。
この中には、実行時に読み取り専用になる不揮発性プログラマブルメモリが含まれています。このメモリに、ユーザーがアプリケーションコードを書き込んで、決められた順序で命令を実行し、システム全体の目的を達成します。マイクロコントローラは通常、実行時に変数の操作や結果の保存に用いられる揮発性のランダムアクセスメモリ(RAM)を搭載しています。マイクロコントローラには、電源を切断している間も情報を保存するために、不揮発性メモリが搭載されていることがあります。
専用のハードウェアペリフェラルは、マイクロコントローラによって異なります。代表的なものは、タイマ、シリアル通信ブロック、アナログ/デジタルコンバータ、デジタル/アナログコンバータ、アナログコンパレータ、汎用入出力ピンなどがあります。.
パラレル通信とシリアル通信の違いは?
2つの機器が互いに通信するとき、それはデータを交換することを意味します。各データワードが何ビットで構成されているかはシステムアーキテクチャによって決まりますが、8ビット、16ビット、32ビットのデータワードがおそらく最も一般的なものです。パラレル通信は、データワード内の各ビットに専用のワイヤを使用します。一方、シリアル通信は、1本のデータ線にすべてのビットをあらかじめ決められた順序で並べます。通常、シリアル通信では1本のデータ線を使用し、最上位ビット(MSB)または最下位ビット(LSB)を先頭に各ビットを順次シフトします。しかし、シリアルプロトコルの中には、基板の他の部分への電気的影響(DCオフセット、EMIなど)を軽減するために、ビットを非連続に並べ替えるものもあります。
パラレル通信の大きなメリットは、シリアル通信と同じ量のデータを送信するのに必要なクロックサイクルが少なくて済むことです。例えば、8本のラインを使用して8ビットのデータワードを送信する場合、データワード全体が1クロックサイクルで送信されることになります。1本のデータラインを使用するシリアル通信プロトコルと比較してみてください。同じデータワードを送信するのに8クロックサイクルを要することになります。
シリアル通信を使用する主な利点は、デバイスのピンが非常に少なく、トレースワイヤを通すための基板スペースが少なくて済むことです。このため、ピンを他の用途に使用することができ、一般に必要な基板面積やケーブルのサイズを小さくすることができます。
また、それぞれの長所を生かしたハイブリッド通信プロトコルも存在します。例えば、デュアルおよびクワッドI/O SPIプロトコルは、2つ以上のシリアルデータピンを使用して全体の帯域幅を広げます。最終的に、トレードオフを理解した上で特定のアプリケーションに何が必要で何が許容されるかを判断するのは、設計者次第です。
同期通信と非同期通信の違いは?
同期通信とは、データを交換する2つ以上のデバイスが共通のクロックラインを共有することを意味します。一方のデバイス(一般にマスターと呼ばれる)は出力としてクロック信号を駆動し、もう一方のデバイス(一般にスレーブと呼ばれる)は入力としてクロック信号を読み取ります。その名の通り、デバイスを同期させ、正しいタイミングでデータの設定やサンプリングを行うことができます。同期通信の大きなメリットは、信頼性が高いということです。適切なボーレートを実現するために各デバイスに正確な基準クロックを設定する心配はなく、温度はデータの信頼性にほとんど影響を与えません。デメリットは、ピンが1本増えることと、一般的に必要な基板スペースやケーブルのサイズが大きくなることです。また、基板上でクロック信号を動作させると、EMIの影響が大きくなります。
非同期通信とは、2つのデバイスが専用のクロック信号を共有しないことです…各デバイスに固有のクロックが存在するのです。各デバイスは、事前に同一のビットレートと、与えられたトランザクションで何ビットを期待するかを設定する必要があります。非同期通信はピンが1本少ないので、基板スペースやケーブルサイズを節約でき、設計者はそのピンを他の用途に使用できるので、メリットがあります。 また、基板からクロックラインを取り除くことで、EMIを低減することができます。非同期通信の欠点は、信頼性の高い通信を実現するのがより困難なことです。ビットレートを生成するための基準クロックは、かなり正確で温度に対して安定したものでなければ、タイミングが狂う可能性があります。整数のドロップオフはボーレートに誤差を生じさせることもあります。これは、基準クロックの正確な整数倍でないボーレートを実現しようとしたときに発生します。つまり、基準クロックが完璧であっても、ある程度の誤差がないと希望のボーレートを実現できない場合があるのです。その誤差の大きさは、許容範囲内である場合もあれば、そうでない場合もあります。
I2Cとは?
I2C(Inter-Integrated Circuit)プロトコルは、必要なピン数が少なく、単一のバスに接続できるデバイス数が多いことから、組み込み設計において非常に人気のある同期式シリアル通信プロトコルです。I2Cのマスターとスレーブ間の接続は、1本のデータライン(SDA)と1本のクロックライン(SCL)、および共通グランドのみが必要です。下図は、I2Cトランザクションの簡略化したタイミング図です(I2C wikipediaページより)。最初の黄色いボックスはSTART信号を示しています。START条件は、クロックがハイの間にSDAラインがローに遷移する時のみです。トランザクション中は、SCLがローの間(青)SDAの遷移が行われ、SCLがハイの間(緑)SDAがサンプリングされます。2つ目の黄色いボックスはSTOP信号を示しています。クロック線がハイの間にSDA線がハイに遷移するのはSTOP状態のときだけです。データラインとクロックラインには、外部プルアップ抵抗付きのオープンドレイン出力が使用されています。デバイスがバスラインのアクティブ駆動を停止すると、外部抵抗は各ラインをハイにプルアップします。
I2Cのタイミング例
I2Cはアドレスベースのプロトコルであり、各スレーブデバイスは独自のI2Cアドレスを持っています。I2Cは、1つのバスで複数のマスターと複数のスレーブをサポートしています。デバイスのデータシートには、そのI2Cスレーブアドレスが明記されています。通常、デバイスは7ビットのI2Cスレーブアドレスを使用しますが、I2Cプロトコルのバリエーションによっては、10ビットと16ビットのアドレスモードもサポートします。通常のI2C通信は、マスターがSTART信号を発行して始まり、スレーブの7ビットアドレスと1ビットのリード/ライトビットからなる1バイトが続きます。スレーブアドレスのバイトの後は、デバイスによってメッセージの形式が少し異なります。1回のトランザクションで送信できるバイト数に制限はありません。しかし、次のバイトが送信される前に、各バイトは受信デバイスによって確認応答される必要があります。最後のバイトと確認応答を受信した後、マスターはSTOP信号を発行してトランザクションを終了します。より大きなアドレス体系をサポートするデバイスの場合、最初のバイト形式も変更されることがあります。デバイスのデータシートには、必要なI2Cメッセージのフォーマットが記載されています。I2Cのデータレートは100kbpsが 標準ですが、最近のI2Cでは400kbpsのfast mode、1Mbpsの fast mode plus、3.4Mbpsのhigh-speed modeがサポートされています。
SPIとは?
SPI(Serial Peripheral Interface)プロトコルは、組み込み設計でよく使われるもう1つの同期式シリアル通信プロトコルです。SPI通信では、1つ以上のマスターデバイスと1つ以上のスレーブデバイスが共有バスを使って通信を行います。全二重または4線式SPIでは、2本のデータライン、共有クロックライン、スレーブセレクトラインを使用します。半二重または3線式SPIでは、共有データ線を使用します。
ピン説明
- MISO:Master In, Slave Out - データはこのラインでスレーブからマスターへシフトアウトされます。
- MOSI:Master Out, Slave In - データはこのラインでマスターからスレーブにシフトアウトされます。
- SCLK:Clock - クロックは常にマスターから駆動されます。クロックはデータがマスターのトランスミッタにロードされると同時に開始され、最後のビットがシフトアウトされると停止されます。
- SS:Slave Select - スレーブセレクト(またはチップセレクト)ラインは、異なるスレーブデバイスをアドレス指定するために使用されます。スレーブは、SSピンがアサート(アクティブロー)された場合のみ、データを受信します。
SPIのタイミング
次の図は、Atmel Xmega-A3Uのマニュアルから引用したものです。これは4つのSPI動作モードを図解しています。4つのモードはすべてのSPIデバイスに共通です。
- Mode 0:SCLKはローでアイドリング状態。データはSCLKの立下りエッジで設定され、SCLKの立ち上がりでサンプリングされます。
- Mode 1:SCLKはローでアイドリング状態。データはSCLKの立ち上がりで設定され、SCLKの立ち下がりでサンプリングされます。
- Mode 2:SCLKはハイでアイドリング状態。データはSCLKの立ち上がりで設定され、SCLKの立ち下がりでサンプリングされます。
- Mode 3:SCLKはハイでアイドリング状態。データはSCLKの立下りエッジで設定され、SCLKの立ち上がりでサンプリングされます。
一般的な動作
マスターが常に送信を開始します。スレーブは、SSラインがアサートされ、SCLKが現れるのを待つか、他のI/Oを使ってマスターに指示する必要があります。SCLKがアクティブになると、データは同時にMOSIラインから出力され、MISOラインから入力されるようになり ます。データは、すべてのビットがシフトされるまで、一度に1ビットずつシフトイン/アウトされます。通常、マイクロコントローラは、すべてのデータビットがシフトアウトされたときにフラグを設定するSPIレジスタを内蔵しています。
長所:
- 低オーバーヘッド:SPIプロトコルは、各スレーブデバイスに専用のスレーブセレクトラインを使用します。これにより、データライン上でアドレスを送信する必要がなくなり、オーバーヘッドが減少します。
- 高信頼性:専用クロックラインの採用により、UARTなどの非同期プロトコルにありがちなボーのミスマッチを解消しています。
- 高速:デュアルデータラインは全体のスループットを向上させ、低オーバーヘッドは全体のbpsを向上させます。
- 共有バス:専用のスレーブセレクトラインにより、複数のデバイスが同じデータ/クロックラインを共有することができます。デバイスのSSラインが有効でない場合、デバイスは単にデータを無視します。
欠点:
- 多数のピン:他の一般的なシリアル通信プロトコルに比べ、SPIは多くのピンを使用します。スレーブデバイスとマルチマスターのセットアップのためにマスターデバイスごとに余分なピン(SS)が必要です。
- エラーチェック:デフォルトのCRCチェックやバスコンテンションインジケータはありません。
- 送信の開始:マスターはすべての送信を開始しなければなりません。スレーブがマスターに送信するデータがある場合、マスターが送信を開始するのを待つか、外部信号を使用してマスターに割り込ませる必要があります。
UARTとは?
UART(Universal Asynchronous Receiver/Transmitter)は、組み込み設計において非常にシンプルなシリアル通信の方法です。UART通信は全二重方式で送信(TX)、受信(RX)にそれぞれ1ピンを使用します。半二重は、TXとRXに共有ピンを使用します(一般に1線式UARTまたは1線式通信と呼ばれます)。TXとRXはシングルエンド信号なので、どちらのバージョンも正しく動作させるには共通のグランドが必要です。
クロックラインを共有しないので、通信リンクの両端でデータレートとフレームフォーマットを事前に設定して合わせる必要があります。データフレームの長さは7、8、9ビットが一般的で、8ビットが最も普及しています。データラインは、送信の間、アイドルハイになります。UARTプロトコルにはマスター・スレーブ関係がないため、どちらのデバイスでも送信を開始することができます。これは送信ピンを1ビット期間ローにすることで実現されます(START信号とみなされます)。指定された数のデータビットが続きますが、通常は最下位ビットが最初に送信されます。オプションのパリティビットは、基本的なエラーチェックに使用することができます。パリティビットは、データビットの「和」を偶数または奇数にするために使用され、データと共に送信されます。受信機はデータビットとパリティビットの合計を再計算し、データの完全性を確認するために期待されるパリティと比較します。フレームは、指定されたビット数(STOPビット)だけラインをハイに駆動することで終了します。両端のレシーバは、受信データの各ビットを読み取るためにオーバーサンプリングを使用します。オーバーサンプリングレートは、使用するボーレートに依存します。
次の図はAtmel ATmega256RFR2のデータシート(23.4項)から引用しました。これはUART通信のためのフレーム形式を示します。
異なる速度で動作する機器間のトランザクションをより効率的に行うために、フロー制御信号CTS(Clear-To-Send)とRTS(Request-To-Send)を別々に使用する場合があります。特に、電気系と機械系が混在している場合(例えばデスクトッププリンタ)にはよくあることです。電気信号にはほとんど時間がかかりません。しかし、モータやソレノイドの機械的な動きでは、処理が完了するまでにもっと長い時間がかかります。2つのデバイスは、データが適切なタイミングで送信されるように、ハンドシェーキング方式でCTSとRTS信号を使用することがほとんどです。
USARTとは?
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)は、一部のマイクロコントローラに搭載されている専用ハードウェアペリフェラルです。USARTペリフェラルは、同期または非同期通信を使用するオプションがあります。データラインのみを利用する前述のUARTとして使用することも、クロックラインを追加する同期モードで使用することも可能です。同期モードでは一般的にバーストトランザクション(1回のトランザクションで複数バイトを送信)が可能ですが、非同期モードでは一度に1バイトを送信するのが一般的です。USARTを搭載しているほとんどのマイクロコントローラでは、その上にSPIプロトコルを実装することができます(同期モード時)。ただし、USART SPIモードをサポートするほとんどのマイクロコントローラは、通常、USARTのSPIスレーブモードをサポートしておらず、SPIマスターモードのみサポートしていることに注意してください。基本的に、USARTはUARTまたはSPIのどちらかに制限することなく実装できます。
ADCとは?
ADC(ADコンバータ)は、マイクロコントローラに搭載される最も一般的なペリフェラルの1つです。ADCは、連続したアナログ信号のある時点の電圧を、マイクロコントローラなどのデジタル機器が解釈可能なデジタル値に変換します。アナログ信号をどの程度の頻度でサンプリングするかは、設計者が決定します。しかし、すべてのADCには、超えてはならない最大サンプリングレートがあります。
分解能も重要なADCの仕様です。分解能は、ある時点のアナログ信号を記述するために使用されるビット数を定義します。8、10、12ビットは、安価なマイクロコントローラで利用できる典型的なADCの分解能です。特殊用途のADCには、32ビットの高分解能のものさえあります。分解能が高ければ高いほど、アナログ信号をより細かく定義することができます。例えば、10ビットの分解能を持つADCでは、アナログ信号を表現するために、210または1,024個のデジタル値が使用できます。一方、16ビットADCでは、216または65,536個のデジタル値を使用することが可能になります。
ADCのアナログ入力範囲は、考慮すべきもう1つの重要な仕様です。シングルエンド測定(グランドを基準にして行われる測定)の場合、アナログ入力範囲は一般的に0Vから定義された基準電圧までです。通常、設計者は基準電圧を選択する際にオプションがあります。差動測定は、2つの異なるアナログ信号をサンプリングし、その差分を取ります。これは、コモンモードノイズと呼ばれる両信号に存在する外部ノイズを除去するのに有効です。
DACとは?
DAC(DAコンバータ)は、デジタル信号を連続したアナログ信号に変換するペリフェラルです。DACは通常、スピーカやアンプを駆動するためのオーディオアプリケーションで使用されます。ADCと同様に、DACにも超えてはならない最大動作速度があります。また、DACはADCと同様に固定された分解能を持っています。分解能が高ければ高いほど、アナログ出力をより細かく制御することができます。
DACはデジタル入力を受けて、指定されたアナログ値の単一のパルスを作成します。DACにデジタル値のストリームを入力すると、後続のアナログの出力パルス列が得られます。 それらの出力パルスの間をフィルタで補間すると、連続したアナログ信号になります。前述の通り、DACは一般的にオーディオ用途で使用されます。そのため、通常デジタル入力は一定の時間間隔で入力され、それに応じてアナログ出力が更新されます。
パルス幅変調とは?
PWM(パルス幅変調)は、信号を完全なオンと完全なオフの間で変化させ、それぞれの状態にある時間を精密に制御することによって、電圧や電流を制御する方法です。パルス列は一定の周波数で切り替わり、信号の平均値はオン時間/(オン時間 + オフ時間)の比率に正比例します。この比率をデューティサイクルといいます。デューティサイクルでは、個々の時間の単位ではなく、パーセンテージで考えることができます。簡単な例で見てみましょう。
次の図は、デューティサイクル50%のPWM信号です。つまり、信号が50%の時間オンになり、50%の時間オフになることを意味します。例えば0~5Vの間で信号を切り替えている場合、次のPWM信号の平均値は2.5Vとなります。
次の図では、デューティサイクルを75%に増加させ、信号が75%の時間でON、25%の時間でOFFになるようにしています。これにより、電圧は2.5Vから3.75V(5Vの75%)に上昇します。
PWM信号の周期(周波数)が一定であることに注目する必要があります。どちらの図でも、黒い線の間隔が均等で、信号の立ち下がりエッジが常に決められた時間に発生していることがわかると思います。平均値を精密に制御するために調整するのは、立ち上がりエッジ、つまりパルス幅です。必要なスイッチング周波数は、アプリケーションによって異なります。
PWMは組み込み設計に広く使われています。モータ制御、LED輝度制御、DC/DC電力変換などは、いずれもパルス幅変調の代表的なアプリケーションです。
DMAとは?
DMA(Direct Memory Access)は、マイクロコントローラなどのデバイスが、CPUを使用せずに特定のタスクを実行することを可能にします。DMAコントローラは、タスクを監督し、メモリの異なる領域間でデータを転送することができます。これにより、CPUは低速の関数が完了するのを待っている間に、他のタスクを実行することができます。これにより、スループットが向上し、プログラムの実行効率が全体的に高まります。
質問/コメント
ご質問やご意見がございましたらDigi-KeyのTechForumまでお願いします。