You are viewing an older revision! See the latest version
welcome
I2Cサンプルブックのページヘようこそ!¶
CQ出版『トライアルシリーズ(トランジスタ技術 2015年4月号増刊)・LED/モータからA-D/D-A変換まで2線インターフェースI2Cで数珠つなぎ! - マイコンにプラス! シリアル拡張IC サンプルブック[基板付き]』に関連した情報をまとめたページです.
公開コード¶
この本に収録されたサンプルの,データシート,基本操作例のコード,クラスライブラリ(一部非対応)を下の公開コードの一覧の表にまとめます.
2種類の公開コード¶
基本操作例のコード¶
表中の「基本操作例のコード」は書籍内で紹介された各サンプルデバイスの操作例コード公開ページへのリンクです.mbed-SDKで提供されるI2CのAPIを直接操作して,デバイス内部のレジスタにアクセスしてみる例になっており,よりハードに近い部分を通してのデバイスの挙動を理解するのに良い例となっています.各コード公開ページ内の「Import this program」ボタンを押すことで,サンプルコードをそのまま自分のコンパイラページに取り込み,すぐに試してみることができます.
クラスライブラリ¶
もう一つのプログラム例「クラスライブラリ」は,コンポーネントページへのリンクとなっています.
コンポーネントはmbed環境で使うことのできる「ソフトウェア部品」です.
各デバイスに対応したソフトウェア部品はクラスとして用意されいるので,各クラスによりインスタンスを作成し,APIを呼び出すだけで,デバイスの操作ができるようになっています.
各デバイス用クラスにはHelloWorldプログラム(API使用例サンプル)も用意されています.
また「I2Cサンプルブック対応クラスライブラリ」に,このサンプルブック用に用意されたクラスライブラリの使い方や,ちょっとしたコツをまとめました.合わせてご覧ください.
さらにGPIOエキスパンダとLEDコントローラについては,これらをさらに使いやすくする高水準APIも設けました.このAPIの使い方は「I2Cサンプルブック対応クラスライブラリ:GPIOエキスパンダ,LEDコントローラ用 高水準API」のページに解説があります.
公開コードの一覧¶
I2Cのピン指定について
このサンプルブックに用意されたサンプルコードの動作確認は,すべて青mbed (mbed LPC1768)で行われています.このため,サンプルコードのI2Cピンの指定はSDA=p28,SCL=p27を使用するようになっています.p28
,p27
をそれぞれSDA,SCLとして使う設定は黄mbed (mbed LPC11U24)やトラ技ARMライタ (TG-LPC11U35-501)でもそのまま使うことができます.
もちろん,mbed Enabledなプラットフォームであれば,適宜ピンの指定を変更さえすれば動作します(するはずです).
たとえば基本操作例のコードのI2Cインスタンスやクラスライブラリのデバイス・インスタンスを宣言する際のp28
,p27
の部分を他のピン指定に置きかえます.次のコードは,いくつかのプラットフォームに対応したI2Cインスタンス,PCAL9555クラス・インスタンスの宣言例です.
使えるピンとそのピン名は..
I2Cが使えるピンとそのピン名は,各プラットフォーム(基板)によって違います.これについてはそれぞれの解説ページで確認してください.
// 青mbed (mbed LPC1768),黄mbed (mbed LPC11U24),トラ技ARMライタ (TG-LPC11U35-501) I2C i2c( p28, p27 ); // I2Cインスタンスを作成 PCAL9555 gpio( p28, p27 ); // PCAL9555インスタンスを作成
青mbed (mbed LPC1768),
黄mbed (mbed LPC11U24),
トラ技ARMライタ (TG-LPC11U35-501)
で SDA=pin28,SCL=pin27
青mbed (mbed LPC1768)であればSDA=p9,SCL=p10を使うこともできます.
// mbed LPC1114FN28 I2C i2c( dp5, dp27 ); // I2Cインスタンスを作成 PCAL9555 gpio( dp5, dp27 ); // PCAL9555インスタンスを作成
mbed LPC1114FN28で SDA=pin5,SCL=pin27
// Switch Science mbed LPC824 I2C i2c( dp4, dp5 ); // I2Cインスタンスを作成 PCAL9555 gpio( dp4, dp5 ); // PCAL9555インスタンスを作成
Switch Science mbed LPC824で SDA=pin4,SCL=pin5
// Arduinoピン互換品 (LPCXpresso824-MAX,LPCXpresso1549,LPCXpresso11U68,Freescale-FRDMシリーズ,ST-Nucleoシリーズなど) I2C i2c( D14, D15 ); // I2Cインスタンスを作成 PCAL9555 gpio( D14, D15 ); // PCAL9555インスタンスを作成
LPCXpresso824-MAX, LPCXpresso1549, LPCXpresso11U68, Freescale-FRDMシリーズ, ST-Nucleoシリーズ などで SDA=D14,SCL=D15
mbed-SDK関連¶
mbed APIの使い方¶
書籍内の記事「サンプルコードを使ってみる」内の「mbed APIの使い方」の節で紹介した内容は,mbedのハンドブックページの内容を元にしています.
mbedの公式I2C API解説はこちらのページを参照ください.(菅工房さんによる日本語翻訳ページはこちら)
I2C APIで接続されたデバイスの内部レジスタを読み書きする具体的な解説はこちらのページ:「I2Cアクセス例」(ページ後半に日本語版あり)にも用意されています.
mbed SDKの中身¶
「mbed SDKの中身」の節で紹介したコードへのリンクも紹介します.
mbed SDKのコードはオープンソース・プロジェクトとしてGitHubで開発・管理されています.
mbedのオンラインコンパイラで使われるmbed SDKは,このGitHubの状態を適宜オンライン環境に持ってくる形で更新されます.
最新mbed SDKのソースは以下のリンクで確認できます.
https://github.com/mbedmicro/mbed/tree/master/libraries/mbed
I2CのAPI定義は
https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/api/I2C.h
"I2C.h"は"mbed.h"をインクルードすれば,その中でインクルードされるようになっています.
https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/api/mbed.h
I2C APIの実装部分は
https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/common/I2C.cpp
実際のI2Cの動作の実装は,ターゲットとするマイコン毎に異なるため,各マイコンに対応した部分を見る必要があります.記事で紹介されている「青mbed:mbed LPC1768」の実装は
https://github.com/mbedmicro/mbed/tree/master/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC176X
さらにこのディレクトリの中の「i2c_api.c」にI2C動作が書かれています. https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC176X/i2c_api.c
mbed.orgサイト内でのmbed-SDKのソースコード確認
記事内ではGitHubでのコードを紹介しましたが,mbed.org内のオンライン環境でも,これと同じコードがmbed-srcという名のソースコード付きのライブラリとして公開されており,ここでも中身を確認することができます.
このライブラリはプログラムにインポートして使うこともできます.たとえばmbed-SDKに何らかの変更が必要になった際には,そのような使い方も可能です.
Import librarymbed-src
mbed library sources
I2C仕様¶
I2Cの仕様へのリンクを載せておきます.
(日本語版はRev.5,英語版ではRev.6となっています.5と6の違いは,図41と図42の訂正だけなので,Rev.5を参照いただいてもほぼ問題ありません)
UM10204 I2C-bus specification and user manual(英語版)
UM10204 I2C バス仕様およびユーザーマニュアル(日本語版)