I2Cへのアクセス:コマンド0x88、ステータス0x89

I2Cデバイスにアクセスできる UART コマンドの使用方法です。

この機能で出来るのはI2C対応のセンサーから値を読む等の数バイトの送信、または数バイトの受信です。例えば温度センサーを起動して、温度データを取得することができます。

連続モードでのみ動作し、間欠モードには対応していません。
複数の送受信により連続的に処理される複雑なコマンド群の処理には適していません。
インタラクティブモードではない通常時は、入力のエコーバックやエラー等の表示はありません。また入力にはタイムアウト(約1秒)が有りますのでターミナル機能でコピー&ペーストするようにしてください。また必ず終端は CRLF(0x0d 0x0a)となります。ターミナルの設定を確認してください(TeraTerm の規定値は CRLF ではありません。)

入力データフォーマット(外部マイコン→TWELITE)

1: 1バイト: 無線デバイスのアドレス (0xDB: 自分自身, 0x00 ~ 0x7F, 0x00:親機, 0x78: 全子機)
2: 1バイト: 0x88
3: 1バイト: 要求番号(応答メッセージにそのまま出力される識別子)
4: 1バイト: コマンド (0x1: 書き込み, 0x2: 読み出し, 0x4: 書き込み&読み出し)
5: 1バイト: I2Cアドレス (1010100 なら 0x54)
6: 1バイト: I2Cコマンド (最初のコマンドバイト)
7: 1バイト: データサイズ (無い時は 0)
8: Nバイト: データ (データサイズが0のときは、本フィールドは無し)
9: 1バイト: チェックサム

:DB88010123230055
 ^1^2^3^4^5^6^7^9

コマンド=0x4は、指定のI2Cコマンド+データ無しの書き込みを実施した直後、データサイズ 分の読み出しを実施する複合コマンドです。

UART 接続したモジュールに対し (1)、I2C の処理を行う(2)。応答確認用の値(3)は 0x01 で、書き込み(4, 0x01) を実行する。スレーブデバイスのアドレス(5) は 0x23、 続くコマンド(6) も 0x23を送付する。追加的なデータ転送 (7, 8) は無し。 UART コマンドのチェックサム(9) は 0x55 である。

:78880101232300B8
 ^1^2^3^4^5^6^7^8

上記 I2C コマンドを 0x78 アドレスの子機に送付する。

※ 0x78 アドレスの場合複数子機が電波範囲にいる場合は、全子機が応答する。特定子機を指定したい場合は 1 ~ 100 のアドレスを設定にて割り付ける。

出力データフォーマット(TWELITE→外部マイコン)

1: 1バイト: 無線デバイスのアドレス
2: 1バイト: 0x89
3: 1バイト: 要求番号
4: 1バイト: コマンド (0x1: Write, 0x2: Read, 0x4: Write&Read)
5: 1バイト: 0:FAIL, 1:SUCCESS
6: 1バイト: データサイズ (無い時は 0)
7: Nバイト: データ (データサイズが0のときは、本フィールドは無し)

送信と同様の応答が戻ります。

実行例 (SHT21 温湿度センサー)

レジスタの読み込みコマンド(一括)
E7コマンド後に読み出し

:7888AB0440E70129

レジスタ値は 0x3A

:7889AB0401013A14

レジスタ書き込み
E6コマンド+1バイト(0xBB)書き込み

:7888AB0140E601BB72

成功

:7889AB01010052

温度測定
温度測定開始

:7888AB0140F30021

応答(成功)

:7889AB01010052

3バイト読み出し

:7888AB0240000310

応答 6E107B -->(0x6E10*17572+32768)/65536-4685=2870=28.70℃

:7889AB0201036E107B55

湿度測定
湿度測定開始

:7888AB0140F5001F

応答(成功)

:7889AB01010052

3バイト読み出し

:7888AB0240000310

応答 829A18 -->(0x829A*12500+32768)/65536-600=5777=57.77%

:7889AB020103829A181A

チェックサムの計算方法

データ部の各バイトの和を8ビット幅で計算し、2の補数をとります。つまりデータ部の各バイトの総和+チェックサムバイトを8ビット幅で計算すると0になります。チェックサムバイトをアスキー文字列2文字で表現します。

例えば 00A01301FF123456 では 0x00 + 0xA0 + ... + 0x56 = 0x4F となり、この2の補数は0xB1 です。(つまり 0x4F + 0xB1 = 0)

※ チェックサムを省略し替わりに X を入力できます。(例 :780100112233X)

使用例

TWELITE
TWELITE
DIP
DIP
UART
UART
CUE
CUE
ARIA
ARIA
PAL
PAL
STICK
STICK
spot
SPOT
R3
R3
STARTER KIT
STARTER KIT
アンテナ
アンテナ
製品一覧
製品一覧

モノをつなぐ無線

モノをつなぐ無線
モノの無線
導入事例
導入事例
選び方
選び方
小型
小型
省電力
省電力
多数接続
多数接続
コントロール
コントロール
モニタリング
モニタリング
ソフトウエア
ソフトウエア
親機
親機
中継機
中継機
子機
子機
始め方
始め方

評価開発環境

STAGE
STAGE
STAGE APP
STAGE APP
interactive
アプリ設定
アプリ書換
アプリ書換
プログラミング
プログラミング