RXduino  1.20a
RXduinoマニュアル 最終更新日 平成26年6月29日
Public メソッド | Static Public メソッド | すべてのメンバ一覧
クラス TwoWire

2線式シリアルインタフェース(Wire または I2Cと呼ばれる)を扱うためのライブラリ。
このライブラリは tkdn_i2c.h で定義されたライブラリをC++でラッパしたものである。
このライブラリを使うにはリンカオプションで -lwire を指定する。 [詳細]

#include <wire.h>

Public メソッド

 TwoWire ()
 コンストラクタ。Wireクラスのオブジェクトを作成する。 [詳細]
 
void assignSdaScl (int sda_pin, int scl_pin)
 SDA,SCLピンの割り当て任意のピンに変更する [詳細]
 
void begin ()
 I2Cマスターとして初期化する [詳細]
 
void begin (int address)
 I2Cスレーブとして初期化する [詳細]
 
int requestFrom (unsigned char address, int count)
 I2Cデバイスに対して受信シーケンスを発行し、データを読み出す [詳細]
 
int available ()
 受信バッファ内に溜まっているデータ数を調べる [詳細]
 
int read ()
 受信バッファからデータを1バイト取り出す [詳細]
 
void beginTransmission (unsigned char address)
 I2Cデバイスに対して送信を開始するための準備をする [詳細]
 
int write (unsigned char data)
 送信バッファの末尾に1バイトのデータを追加する [詳細]
 
int write (int data)
 送信バッファの末尾に数値を追加する [詳細]
 
int write (char *str)
 送信バッファの末尾に文字列送信を追加する [詳細]
 
int write (unsigned char *data, int quantity)
 送信バッファの末尾にデータブロックを追加する [詳細]
 
unsigned char endTransmission ()
 ターゲットデバイスに対してI2Cの送信シーケンスを発行する [詳細]
 
void setFrequency (int freq)
 I2Cの周波数を変更する [詳細]
 

Static Public メソッド

static unsigned long getVersion (version_info *vi)
 ライブラリのバージョン情報を取得する [詳細]
 

説明

2線式シリアルインタフェース(Wire または I2Cと呼ばれる)を扱うためのライブラリ。
このライブラリは tkdn_i2c.h で定義されたライブラリをC++でラッパしたものである。
このライブラリを使うにはリンカオプションで -lwire を指定する。

覚え書き
内蔵RIICモジュールを使うのではなく、GPIOを使って構築されている。
スレーブモードでの使用はできない。
サンプルコード

wire.h46 行で定義されています。

コンストラクタとデストラクタ

TwoWire::TwoWire ( )

コンストラクタ。Wireクラスのオブジェクトを作成する。

デフォルトではSDA=AN4番ピン(P44)、SCL=AN5番ピン(P45)に割り当てられる(Arduinoと同じ)。
RXduinoではピン番号は assignSdaScl() で変更できる。

関数

static unsigned long TwoWire::getVersion ( version_info vi)
static

ライブラリのバージョン情報を取得する

引数
[out]vi拡張情報が必要ならばversion_info構造体へのポインタを与える。
構造体の各フィールドがセットされて戻る。各フィールドは文字列へのポインタだが、
static constな文字列を指すので、ユーザプログラムでfreeしてはならない。
拡張情報が不要ならばNULLを指定してもよい
戻り値
バージョン番号を1バイトずつ詰めた16進数で返す 例えば、バージョン1.00ならば、0x01000000を返す バージョン1.23ならば0x010203となる。 メジャーバージョン.マイナーバージョン.サブバージョン.デバッグバージョン
void TwoWire::assignSdaScl ( int  sda_pin,
int  scl_pin 
)

SDA,SCLピンの割り当て任意のピンに変更する

引数
sda_pinSDA(データ端子)のピンの番号。任意のピンが使用できる。
scl_pinSCL(クロック端子)のピンの番号。任意のピンが使用できる。
戻り値
なし
覚え書き
SDA端子はACKを受信する時に内蔵プルアップが有効になるので、外付けのプルアップ抵抗がなくてもそれなりに通信はできるが、より安定した高速動作のためにはプルアップ抵抗を外付けすることが望ましい
void TwoWire::begin ( )

I2Cマスターとして初期化する

戻り値
なし
void TwoWire::begin ( int  address)

I2Cスレーブとして初期化する

警告
この機能は実装されていない
戻り値
なし
TODO:
いずれI2Cスレーブモードを作る必要があるだろう
int TwoWire::requestFrom ( unsigned char  address,
int  count 
)

I2Cデバイスに対して受信シーケンスを発行し、データを読み出す

読み出したデータ数は available() 関数で確認する。バッファ中のデータは read() 関数で読み出す。

引数
addressターゲットデバイスのアドレス(7bit)
RD/WRを示すビットは含まず、0~0x7Fまでの純粋なアドレスを与えること。
count読み出したいデータのバイト数。範囲は0~260。260以上の値を指定した場合は260に切り捨てられる。
戻り値
実際に受信したバイト数。ターゲットデバイスがNACKを返した場合は、countで指定した値に満たなくても終了する。
int TwoWire::available ( )

受信バッファ内に溜まっているデータ数を調べる

戻り値
データ数(バイト単位)
int TwoWire::read ( )

受信バッファからデータを1バイト取り出す

戻り値
データがある場合は0~255を返す。データがない場合は-1を返す。
void TwoWire::beginTransmission ( unsigned char  address)

I2Cデバイスに対して送信を開始するための準備をする

覚え書き
この関数は送信バッファを初期化するだけで、実際の動作は行わない。繰り返し呼ぶと、送信バッファが先頭に戻る。
引数
addressターゲットデバイスのアドレス(7bit)
RD/WRを示すビットは含まず、0~0x7Fまでの純粋なアドレスを与えること。
戻り値
なし
int TwoWire::write ( unsigned char  data)

送信バッファの末尾に1バイトのデータを追加する

覚え書き
この関数は送信バッファにデータを溜めるだけで、実際の動作は行わない
引数
data送信したいデータ
戻り値
成功したら1を返す。送信バッファ(260バイト)に空き容量が無ければ失敗して0を返す
int TwoWire::write ( int  data)

送信バッファの末尾に数値を追加する

覚え書き
この関数は送信バッファにデータを溜めるだけで、実際の動作は行わない
引数
data送信したいデータ
戻り値
成功したら送信したバイト数(バッファに溜めたバイト数)を返す。送信バッファ(260バイト)に空き容量が無ければ失敗して0を返す
int TwoWire::write ( char *  str)

送信バッファの末尾に文字列送信を追加する

覚え書き
この関数は送信バッファにデータを溜めるだけで、実際の動作は行わない
引数
str送信したい文字列
戻り値
成功したら送信したバイト数(バッファに溜めたバイト数)を返す。送信バッファ(260バイト)に空き容量が無ければ失敗して0を返す
int TwoWire::write ( unsigned char *  data,
int  quantity 
)

送信バッファの末尾にデータブロックを追加する

覚え書き
この関数は送信バッファにデータを溜めるだけで、実際の動作は行わない
引数
data送信したいデータ
quantity送信したいデータ数
戻り値
成功したら送信したバイト数(バッファに溜めたバイト数)を返す。送信バッファ(260バイト)に空き容量が無ければ失敗して0を返す
unsigned char TwoWire::endTransmission ( )

ターゲットデバイスに対してI2Cの送信シーケンスを発行する

I2Cの送信はこの関数を実行して初めて実際に行われる。
送信されるターゲットアドレスは beginTransmission() 関数で指定したもの。 送信データは write() 関数でバッファに格納されたもの。

戻り値
戻り値は以下のとおり
  • 0: 成功
  • 1: 送信バッファ溢れ
  • 2: スレーブアドレス送信時にNACKを受信
  • 3: データ送信時にNACKを受信
  • 4: その他のエラー
void TwoWire::setFrequency ( int  freq)

I2Cの周波数を変更する

空ループで測っている。タイマを使ってキャリブレーションしているので、それなりに正確な値が出るはず。

引数
[in]freqクロックの周波数をHz単位で指定する。有効な値は1~200000程度。基本的にソフトでやっているので400kHzは出ない。
戻り値
なし