リファレンスデザイン4267
に含まれる内容: 試験済み回路 回路図 説明 ソフトウェア
実証済みのI²Cバスの実装
筆者:
Ted Salazar, Applications Engineering Manager
要約:このアプリケーションノートは、I²Cバスの歴史を簡単にレビューし、その次にバス上のマスタとスレーブ間で通信を容易にする実証されたI²C構成を紹介します。例として、回路図とコードを挙げています。付録1には参考のためにこのアプリケーションノートの中で使われた用語の意味を収録しています。
はじめに
Inter IC (I²C)バスは、並列データラインの数を減らすことによってエレクトロニクス製品を簡素化するために1980年代初期にPhilips Semiconductorによって開発されました。1992年にPhilips®によってリリースされたI²Cバス規格のバージョン1.0は、複数のIC間通信に用いられるにシンプルな2線式双方向バスについて定義されました。1998年までに、I²CバスはICとIC間の低速通信のデファクトスタンダードになりました。その時点で、50以上のライセンス会社がこのI²Cインタフェース規格を使用し、1000以上の異なったICに搭載されました。
このアプリケーションノートで紹介するI²Cバスの構成は、バス上のスレーブデバイスとの簡単な通信の確実性が実証されています。それぞれの実装では回路図とコードの例を挙げています。読者は以下の文書を十分理解している必要があります。
「The I²C-Bus Specification」 Version 2.1、2000年1月発行、
Philips Semiconductor document #9398 393 40011
「The I²C-bus and how to use it」、1995年4月発行、
Philips Semiconductor document #98-8080-575-01
「System Management Bus (SMBus™) Specification」, Version 2.0、2000年8月発行
背景と議論
I²Cバスは、標準モード、ファーストモード、または高速(Hs)モードとして動作することができ、それぞれの最大データレートは100kbps (標準モード)、400kbps (ファーストモード)、1.7Mbps (Cb = 400pFのHsモード)、および3.4Mbps (Cb = 100pFのHsモード)です。
オリジナルの標準モードは7ビットのアドレッシングを取り入れて112のスレーブアドレスを可能にしました。I²Cバスシステムによって更に多数のスレーブデバイスを要求されたために、追加のスレーブアドレスを割り当てるために10ビットアドレッシングが導入されました。
ファーストモードはスレーブデバイスに有効な機能を追加しました。最大のデータレートを4倍の400kbpsにしました。ファーストモードI²Cはまた、多くの場合I²Cバス接続される同様のバス、すなわち、更に高いデータレートとはもはや互換のないバスのサポートを中止しました。スパイクノイズを抑制するためにファーストモードデバイスはシュミットトリガによる入力を採用しています。さらに、パワーが取り除かれた時にI²Cバス上のスレーブデバイスのSCL とSDA ラインはハイインピーダンスにすることが要求されました。
Hsモードは、主にデータレートを標準モードより最大36倍速くするために開発されました。Hsモードで動作するI²CバスにおいてはSCLラインの上のローからハイへの遷移における変化が最も重要な影響を与えています。標準とファーストモードで用いられるプルアップ抵抗はHsモード規格に対応する立ち上り時間を十分に速くすることができないのでほとんどのHsモードシステムのSCLライン上ではアクティブプルアップを用いなければなりません。他の変化として標準またはファーストモードの8ビットマスタコードを送出するために、HsモードマスタのHsモード互換性要求があります。もしマスタコードに続くアクノーリッジ(I²Cフレームの中のビット名)が直ちに来なければ、停止が起こるまですべての通信はHsモードにとどまっています。図1 の波形は、Hsモードに入るためのマスタコードの使用を説明しています。
図1. これらの波形は標準またはファーストモードI²CからHsモードへの移行を示します。
実証済みのI²Cオンチップペリフェラルの実装
PIC18F442マイクロコントローラ(µC)は、標準とファーストモードをサポートするI²Cのペリフェラルを内蔵しています。図2 は、16ビットシリアル出力ADC (MAX1169 )を通してサンプルを収集するためにペリフェラルを使用するアプリケーション回路の例を示しています。データはPIC®によって受け取られると直ちにファームウェアのUART によって115kボーで送信されます。RS-232 トランシーバ(MAX3232E )のデータはパーソナルコンピュータの標準シリアルポートによって受信することが可能です。PICのオンチップペリフェラルにファーストモードI²Cを実装するために必要なすべてのアセンブリソースファイルはI2C_on_chip_asm.zip ファイルの中に含まれています。MPLAB IDEバージョン6.10.00と呼ばれるツールは、図2の回路図に用いるアセンブリコードを開発するために使います。
図2. PIC18F442 µCに内蔵のI²Cペリフェラルは16ビットADC (MAX1169)に接続します。
実証済みのビットバンギングI²Cの実装
MAXQ2000 は標準モード、ファーストモード、および1.7MHzのHsモードI²C信号をビットバンギングすることができる低電力の16ビットRISC µCです。図3 は3つのすべてのモードにおいてI²Cマスタとして動作するMAXQ2000の標準回路を示します。アクティブプルアップは、1.7MHzのHsモードをサポートするためにMAXQ2000に内蔵されています。I2C_bit_bang_asm.zip ファイルは、µCのGPIO ラインを使って、標準とファーストモードI²Cシステムをビットバングするのに必要なすべてのアセンブリソースファイルを含んでいます。
図3. この回路図(MAXQ2000ローパワーLCD µCに基づく)は、標準、ファースト、またはHsモードで動作可能なI²Cマスタを図示しています。
MAXQ2000のI²Cファームウェアにおけるデフォルトクロック速度は100kHzでありますが、µCの16MHzのシステムクロックはビットバングされたI²Cインタフェースを400kHzもの速さで動作することを可能にします。以下のコード例はどのように割込みイベントを捕らえるか、そして簡単な割込みサービスルーチンにおいてそれらをどのように扱うかを示します。使用された開発ツールはMAX-IDEバージョン1.0 (作成日:2004年11月18日)でマキシムのウェブサイト から無料でダウンロードすることができます
I2C_bit_bang_c.zip ファイルは、MAXQ2000のGPIOラインを使っている標準またはファーストモードI²Cリンクがビットバングするために必要とされるすべてのCソースファイルを含んでいます。この図3の例は、maxqi2c.hおよびmaxqi2c.c の2つのファイルから成るmaxqi2cライブラリに基づいています。プロジェクトに追加される時に、これらのファイルによって、100kHzまたは400kHzのI²CはいずれのGPIOピンの操作も可能になります。しかし特定速度のI²Cを実現するCコードのためには図3におけるY1は16MHzの代わりに20MHzの水晶でなければなりません。MAXQ2000バージョン1.12B (FAE版)のためのIAR組込みWorkbench® IDEはここで使われた開発ツールです。MAXQ2000 (4Kのスタート版) IAR組込みWorkbenchの無料コピーは登録後IARのウェブサイト からダウンロードすることができます。
HSI2C_bit_bang_asm_c.zip ファイルはMAXQ2000 GPIOラインを使って1.7MHzのHsモードI²Cリンクをビットバングするのに必要なすべてのアセンブリおよびCソースファイルを含んでいます。アセンブリとCコードを混在させることによって、この例におけるソースコードは各コードタイプの長所を最大限に生かすことができます。アセンブリはスピードを最適化し、Cはほんの数行のコードで多くの実行を達成します。タイミングが重要なHsモードI²C受信機能(hsi2cRecv)はアセンブリソースファイルhsi2c.asmで定義されます。
メインのCソースファイルはMAXQ2000のUARTを115.2kボーに初期化します。1.7MHzのHsモードI²Cリンクを実現するソースコードのために、図3におけるY1は20MHzの水晶でなければなりません。メインのCソースファイルは必要な時にhsi2cRecv機能を呼び、printfファンクションはデータをオンチップUARTから転送します。データフォーマットは8-N-1に設定します。Rowley CrossWorks IDEバージョン1.0 (2つのライセンスにコピー)はこの例で使用された開発ツールです。CrossWorks IDEを入手するには、Rowley Associates Limitedに連絡するか、そちらのウェブサイト を閲覧してください。
実証済みのI²C IP辺コアペリフェラルの実装
DI2CMと呼ばれるI²C IPコア(Digital Core Designによる)は多くのCPLDとFPGA デバイスに使われています。DI2CM IPコアはパラレルインタフェースをI²Cインタフェースに変換し、3.4MHzのクロックと同等速度の能力がある真のHsモードマスタを実装しています。図4 のAltera® EPM3256AQC208-10 CPLDの応用回路はDI2CM IPコアを含んでいます。この回路は1.7MHzと3.4MHzのHsモードI²Cの両方との互換性を実現するために40MHzの水晶発振器(U3)を必要とします。出力イネーブルを備えた3ステートのロジックバッファはDI2CM IPコアがSCLラインにアクティブプルアップを作ることを可能にし、そのままHsモードI²Cにも必要です。アクティブハイとアクティブローの両方にメモリマップされたパラレルインタフェースに対応するためにU5、U6、およびU7にはロジックインバータが用いられます。
画像の拡大 (PDF, 841KB)
図4. 図に示されている、Altera EPM3256AQC208-10 CPLD のDI2CM IPコアはI²C Hsモードマスタを実装しています。
HSI2C_IP_core_asm.zip ファイルは、Altera EPM3256 CPLDにプログラムされたDI2CM IPコアと68HC16のメモリマップされたパラレルインタフェースを接続することによって達成されるHsモードI²Cマスタを実装するために必要なすべてのアセンブリソースファイルを含んでいます。この例において使われた開発ツールはMotorola® 68HC Macro Assemblerバージョン4.1です。
結論
I²Cバスは、現在業界で最も広く使われているシリアルバスであるため、システム設計者がすぐに適用可能な実証済みの実装手法を求めてわずかな種類のそれらを利用するのは当然のことと言えます。オンチップであれ、ビットバングされたものであれ、またはIPコアであれ、どの実装手法を選択するかは、結局はシステムプロセッサに大きく依存します。しかし、すでに実証済みで、動作が確認されたものを使う方法ほど簡単なものはありません。その意味で、このアプリケーションノートはこれら3つの方法について具体的な実装例を紹介しました。
付録1:用語の定義
CPLD:complex programmable logic device (コンプレックスプログラマブルロジックデバイス)
DI2CM:Digital Core Design社の HsモードI²C IP コア
FPGA:field-programmable gate array (フィールドプログラマブルゲートアレイ)
GPIO:general-purpose input outputs (汎用入出力)
hsi2cRecv:アセンブリ言語で記述されたHsモードI²C受信機能
Hs-mode:ハイスピードI²Cモード
IC:integrated circuit (集積回路)
IDE:integrated development environment (統合開発環境)
IP:intellectual property (知的財産)
I²C:Inter-ICバス
MAXQ2000:低電力の16ビットRISC マイクロコントローラ
RS-232:Recommended Standard #232
SCL:I²Cバス のハードウェアシリアルクロックライン
SDA:I²Cバス のハードウェアシリアルデータライン
UART:universal asynchronous receiver transmitter (汎用非同期レシーバトランスミッタ)
µC:マイクロコントローラ
8-N-1:8ビット、ノンパリティー、および1ストップビット
参考文献
Philips Semiconductor Staff、 「The I²C-Bus Specification」 Version 2.1、2000年1月発行、Philips Semiconductor document #9398 393 40011
Philips Semiconductor Staff、 「The I²C-bus and how to use it」、1995年4月発行、Philips Semiconductor document #98-8080-575-01
SBS Implementers Forum、「System Management Bus (SMBus ) Specification」 Version 2.0、2000年8月発行
Ted Salazar著、マキシムのアプリケーションノート2394 「PICマイクロコントローラ用のMAX1169 ADCのインタフェース 」
Ted Salazar著、マキシムのアプリケーションノート3568 「MAXQ2000およびMAX4397を使用して安価なオーディオ/ビデオソースセレクタを作成 」
マキシムのアプリケーションノート3588 「MAXQ2000マイクロコントローラのソフトウェアI²Cドライバ 」
マキシムのアプリケーションノート3561 「MAX-IDEの使用にあたって 」
Digital Core Design Staff、「DI2CM I²C Bus Controller Master, HDL Core Specification」 Version 2.25.ma
同様の記事が2007年8月8日「Embedded.com」のウェブサイトに掲載されました。
AlteraはAltera Corporationの登録商標および登録サービスマークです。 IAR Embedded WorkbenchはIAR Systems ABの登録商標です。 MotorolaはMotorola Trademark Holdings, LLCの登録商標および登録サービスマークです。 PhilipsはKoninklijke Philips Electronics N.V. Ltd.の登録商標です。 PICはMicrochip Technology Incorporatedの登録商標です。
フィードバックをお寄せください。 内容に満足されましたか、あるいは満足されていませんか?もっと良いページにできると思いますか?あるいは、単なるコメントでも結構です。フィードバックをお待ちしています。 —マキシムはお客様からいただく訂正、提案を元に改善していきます。
このページを評価し、フィードバックを送信する。
APP 4267: Feb 24, 2009
リファレンスデザイン4267,
AN4267,
AN 4267,
APP4267,
Appnote4267,
Appnote 4267