I2Cへのアクセス:コマンド0x88、ステータス0x89
I2Cデバイスにアクセスできる UART コマンドの使用方法です。
この機能で出来るのはI2C対応のセンサーから値を読む等の数バイトの送信、または数バイトの受信です。例えば温度センサーを起動して、温度データを取得することができます。
入力データフォーマット(外部マイコン→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コマンド後に読み出し
レジスタ値は 0x3A
レジスタ書き込み
E6コマンド+1バイト(0xBB)書き込み
成功
温度測定
温度測定開始
応答(成功)
3バイト読み出し
応答 6E107B -->(0x6E10*17572+32768)/65536-4685=2870=28.70℃
湿度測定
湿度測定開始
応答(成功)
3バイト読み出し
応答 829A18 -->(0x829A*12500+32768)/65536-600=5777=57.77%
チェックサムの計算方法
データ部の各バイトの和を8ビット幅で計算し、2の補数をとります。つまりデータ部の各バイトの総和+チェックサムバイトを8ビット幅で計算すると0になります。チェックサムバイトをアスキー文字列2文字で表現します。
例えば 00A01301FF123456 では 0x00 + 0xA0 + ... + 0x56 = 0x4F となり、この2の補数は0xB1 です。(つまり 0x4F + 0xB1 = 0)
※ チェックサムを省略し替わりに X を入力できます。(例 :780100112233X)