外部デバイスを適用してマイクロコントローラI/Oの拡張問題を解決
DigiKeyの北米担当編集者の提供
2019-02-20
マイクロコントローラI/Oには、設計者が一般的に直面する2つの問題があります。最初の問題は、アプリケーションに最適なマイクロコントローラに適切な組み合わせのI/O機能がない場合です。2番目の問題は、すでに発売されている製品ラインに追加のI/Oが必要なときに発生します。
最初の問題の場合、開発者は、より高価な高機能のマイクロコントローラを購入する必要に迫られることが多くあります。2番目の問題の場合、新しいマイクロコントローラに切り替えるコストと適切なソフトウェアのポーティングにかかる費用と時間が法外なものになる可能性があります。
これらの両方の問題を解決する可能性がある1つのソリューションは、多くの場合、マイクロコントローラのSPIまたはI2Cバスに接続される外部I/O拡張デバイスを使用することです。これらのデバイスでは、ピン数や場合によってはパフォーマンスとフットプリントに関して、マイクロコントローラをそれほど厳密に指定する必要がありません。同時に、このアプローチでは、機能の忍び寄り、対象市場の拡大、カスタマによる機能要求、マイクロコントローラの不適切な選択(実際にあります)に直面した場合でも、製品設計が将来にわたって使えるようになります。
この記事では、マイクロコントローラI/Oの一般的な要件について説明し、いくつかの適切な外部拡張デバイスを紹介します。次に、追加の汎用入力および出力、メモリストレージ、パルス幅変調(PWM)、さらにはウォッチドッグタイマ機能を提供できるこれらのオフチップリソースを使用する方法を示します。
拡張インターフェースの選択
マイクロコントローラは、外部デバイスとの通信に使用できるいくつかの異なるオンチップペリフェラルインターフェースを備えています。少数の例を挙げると、マイクロコントローラに応じて、次のようなインターフェースが使用されます。
- シリアルペリフェラルインターフェース(SPI)
- インターインテグレーテッドサーキット(I2C)バス
- ユニバーサルシリアルバス(USB)
- ユニバーサル非同期レシーバ/トランスミッタ(UART)
- コントローラエリアネットワーク(CAN)
- Wi-Fi
外部拡張デバイスとの通信に最適なインターフェースはI2CまたはSPIです。
I2Cは、100Kビット/秒または400Kビット/秒で従来より動作する2線式バスですが、1Mビット/秒以上をサポートするいくつかの高速デバイスもあります。1線は専用のクロックピンであり、もう1線は、マスターとスレーブ間の双方向通信に使用されます。通常、マイクロコントローラはマスターとして機能し、外部デバイスはスレーブです。スレーブは、7ビットまたは10ビットアドレス指定スキームを使用してアドレス指定できます。
SPIは、1Mビット/秒~12Mビット/秒で動作する3線式バスインターフェースです。SPIバスには、専用のマスターアウトデータライン、スレーブアウトデータライン、およびクロックがあります。繰り返しますが、マイクロコントローラはマスターデバイスになるように構成され、「スレーブセレクト」ラインを使用してスレーブデバイスと通信します。マイクロコントローラに接続されているすべてのスレーブデバイスには、通信用に選択される専用の出力ピンが必要です。開発者が多くの外部デバイスに接続する必要がある場合、スレーブデバイスを選択するためのI/Oラインがすぐに不足する可能性があることが簡単に想像できます。
たとえば、開発者がSTMicroelectronicsのSTM32L011D4P7を使用していた場合、使用するI/Oラインが11個あったはずです(図1)。この場合、SPIデータおよびクロックのためだけに3つのI/Oラインが必要で、8つのラインは、スレーブデバイスとの通信と、システムで必要な追加機能の実行のために残されます。これは多くのアプリケーション向けに最適ですが、ある時点で、設計者はI/Oを拡張する必要がある場合があります。

図1:STM32L011D4P7は、11個のI/Oにピンが制限されるArm® Cortex®-M0+プロセッサです。(画像提供:STMicroelectronics)
一般に、大まかな目安として、次の機能を追加するときは、I2Cバスを使用します。
- I/O
- PWM
- EEPROM
- ウォッチドッグタイマ
SDカードへの高速メモリアクセスなどの機能を追加するには、SPIバスを使用する必要があります。
汎用I/Oの拡張
I2Cインターフェースを介した入力および出力の拡張をサポートする相当数のICがあります。次のような、興味深い例がいくつかあります。
特に興味深いのはPCA8574であり、入力と出力の両方を実行するために単一のレジスタのみが含まれています。単一のレジスタは、デバイスを構成してピンに対する読み出しと書き込みを実行するために必要なソフトウェア量を大幅に簡素化します(図2)。マイクロコントローラは、I2Cを介してPCA8574と通信し、A0~A2ピンの構成方法に基づいてデバイスをアドレス指定します。これにより、設計に柔軟性が追加されるため、開発者は、PCA8574のスレーブアドレスを選択して、単一の設計にいくつかのスレーブを含めることができます。

図2:NXPのPCA8574は擬似双方向の8ビットI/O I2Cエキスパンダです。また、ピン上で読み出しと書き込みを行いI/O機能を実行するためにI2Cレジスタを1つだけ備えているため、非常にシンプルかつスマートなデバイスが実現します。(画像提供:NXP Semiconductors)
デフォルトでは、P0~P7は、起動時の入力として構成されます。単一の内部レジスタを読み出すと、ピンが入力または出力として構成されていることがデバイス上の各ピンの状態に示されます。PCA8574では、ピンが入力と出力の両方として同時に機能できるため、レジスタへの書き込みにより、対応するビットの出力も設定されます。
出力ドライブは、入力値によって容易に過電力になる弱い内部抵抗によってプルアップされています。いずれかの入力状態が変化した場合、INTピンが低に切り替わり、入力状態の変化が発生したことがマイクロコントローラに通知されます。その後、マイクロコントローラでは、I2C呼び出しにより新しい値が読み出せるようになります。
PWMの拡張
PWMエキスパンダは非常に便利な拡張デバイスです。このデバイスは、LEDを駆動するときに特に便利です。マイクロコントローラが何も実行していないときは、マイクロコントローラをスリープにして、PWMエキスパンダでLED状態を駆動することができます。
PWMエキスパンダの使用方法の好例は、E-SwitchのPV6F240SSG RGB押ボタンまたはSchurter Electronic Componentsの3-101-399 SPST RGB押ボタンを使用するRGB押ボタン回路でよく見られます(図3)。

図3:SchurterのRGB押ボタンは、押ボタンの周りに赤、緑、青のLEDを備えており、開発者はLEDを使用して、照明カラーパターンを作成できます。これらのタイプのデバイスは、PWM拡張チップによる駆動に最適です。(画像提供:Schurter)
SchurterのRGB押ボタンは、SPST押ボタンの周りに赤、緑、青のLEDを備えており、開発者はLEDを使用して、照明カラーパターンを作成できます。これらのタイプのアプリケーションは、PWM拡張チップに最適です。
I2Cで使用するのに適したPWM拡張チップは、Maxim IntegratedのMAX7315です。MAX7315は、8つのPWMポートとLED輝度調節機能を備えています。これにより、RGBスイッチの駆動に必要な3つのチャンネルに容易に対応し、単一のデバイスで2~3のスイッチといくつかのスタンドアロンLEDを駆動することが可能になります。また、トランジション検出割り込みとして、または汎用出力として使用できる9番目のポートもあります。
MAX7315 I2Cインターフェースは、1つ以上のレジスタを含んでいるため、NXPのPCA8574よりも少し複雑です。したがって、開発者は、スレーブデバイスをアドレス指定し、読み出しまたは書き込みに関与しているメモリアドレスを提供してから、書き込みまたは読み出しを実行する必要があります。図4は、MAX7315のメモリマップを示しています。
|
図4:MAX7315 PWMコントローラには、LED輝度機能を備えた8つの出力ポートがあります。デバイスのレジスタマップはシンプルであり、高度なPWM機能への簡単なアクセスを可能にします。(画像提供:Maxim Integrated)
MAX7315のレジスタマップはシンプルであり、高度なPWM機能への簡単なアクセスを可能にします。
WDT、EEPROM、およびPWMを備えたコンビネーションエキスパンダ
ここで説明したように、I2CバスI/Oエキスパンダは、スタンドアロンデバイスとして使用すると、非常に強力なデバイスとして機能します。つまり、このエキスパンダには、I/OやPWMなどの特定の機能のみが含まれます。Cypress SemiconductorのCY8C9520AマルチポートI/Oエキスパンダなどのエキスパンダでは、単一のICパッケージ内に複数のペリフェラル拡張が含まれます。CY8C9520Aには、20ビット、40ビット、または60ビット拡張の3つのバリエーションがあります。これらのピンは、入力、出力、またはPWMとして使用するように構成できます(図5)。

図5:Cypress SemiconductorのCY8C9520は、EEPROMを備えた20ビット、40ビット、または60ビットI/Oエキスパンダです。このエキスパンダでは、拡張ピンを入力、出力、またはPWMとして構成できます。(画像提供:Cypress Semiconductor)
CY8C9520には、I/O拡張に加えて、シリアル番号などの重要なアプリケーション設定のほか、その他の重要な構成パラメータの保存に使用できるEEPROMも含まれています。
図5を詳しく見ると、GPort 2上にWD6ピンがあるのがわかります。このピンはウォッチドッグタイマ出力ピンであり、マイクロコントローラがCY8C9529ウォッチドッグと通信して「処理」することに失敗したときに、マイクロコントローラをリセットするために使用できます。ウォッチドッグの設定は完全に構成可能であり、アプリケーションコードに堅牢性レベルをさらに追加するときに使用できます。
マイクロコントローラ機能の拡張に関するヒントとコツ
マイクロコントローラの機能の拡張に役立つ多くの手法があります。いくつかの役立つヒントとコツを次に示します。
- I2Cを使用して、外部デバイスとインターフェース接続します。インターフェースはピンを2つだけ必要とし、複数のスレーブデバイスをサポートできます。
- 部品をハードウェアに設計する前に、開発ボードを購入するか、チップを拡張ボードにハンダ付けして、システムのすべてのニーズを満たすかどうかをテストします。
- I2Cバスツールを使用して、拡張デバイスとインターフェースし、その動作方法を学習します。これにより、ソフトウェアの開発が大幅に速くなります。
- ソフトウェア開発中にバスアナライザを使用して、外部デバイスとの通信を監視し、デバッグ時間を最小限にします。
- 可能な場合、外部ウォッチドッグタイマを備えているデバイスを選択します。これは、堅牢性をシステム設計に追加するツールになる場合があります。
- 構成データ以外のデータのオフチップメモリとインターフェースするときは、SPIなどの高速インターフェースを使用します。
- デバイスが否定応答(NAK)を返す場合、またはバスがドラッグダウンされた場合に、マイクロコントローラのI2Cドライバが対応できるようにします。予期しない応答が受信された場合、これらのドライバがエラーを無視して、無限ループに入ることは珍しいことではありません。
まとめ
設計でマイクロコントローラにI/Oを追加できなくなった場合でも、開発者は設計を破棄して、出発点に戻る必要はありません。その代わり、システムに機能を追加できる外部ペリフェラルチップを使用することができます。
免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。


