コンテンツにスキップ

ユーザー向けI2Cレジスタ一覧

このページはULSA EVOをI2Cスレーブとして使うホスト実装者向けに、ユーザー向け公開レジスタだけをまとめています。外部接続では端子配列と信号電圧条件を確認してください。USB有線計測のみで使う方はUSB有線計測とコマンドを参照してください。

この一覧は、公開I2C仕様書Rev 1.5(2026-09-01)のレジスタマップです。

最小読み出し手順

  1. WHOAMI (0xFF) が0xEAであることを確認します。
  2. REG_VERSION (0x01) が、この一覧の現行値0x0Bであることを確認します。
  3. STATUS (0x03) のDATA_READYが1、ERROR_ACTIVEが0であることを確認します。
  4. 0x20から14 byteの計測snapshotを読みます。
  5. DATA_SEQ (0x20)が前回値から変わったら新しい測定値です。

以下は、この手順で使うレジスタと設定・状態コードの参照表です。

アクセス権 意味
R 読み出し専用
W 書き込み専用
R/W 読み出し・書き込み可能
R/W draft 読み書き可能な未保存設定。永続化にはSAVE_CONFIGが必要
— 予約または非公開。読み書きしない

アドレス空間の全体像

0x00から0xFFまでの公開I2Cレジスタ領域を、情報、計測、設定、予約、コマンドに分けたマップ

範囲内でも個別表にないレジスタは未定義です。予約領域には読み書きしません。

バスの基本仕様

項目 仕様
役割 ULSA EVOがI2Cスレーブ、ホストがマスター
既定アドレス 7bit、0x50(8bitアドレスを要求するAPIではwrite 0xA0、read 0xA1)
レジスタアドレス 8bit
バス速度 400 kHzを基準。実配線で信号品質を確認
信号レベル SDA/SCLは内部10 kΩプルアップ(3.3V系)。USBの5Vを信号線に加えない
ホストtimeout 50 ms以上を基準。clock stretchを許容
複数byte値 リトルエンディアン(下位バイト先)。符号付き整数は2の補数
1回のread ホスト側は最大32 byteを推奨

レジスタ領域

アドレス範囲 用途 アクセス
0x00–0x1F デバイス情報・状態 読み出し
0x20–0x2D 計測snapshot 読み出し
0x2E–0x3F 予約 使用しない
0x40–0x5F 設定・周期 個別表に示す項目のみ
0x60–0xAF 予約 使用しない
0xB0–0xEF 予約 使用しない
0xF0–0xFF コマンド・状態 個別表に示す項目のみ

範囲内でも、個別表にないレジスタは未定義です。予約領域の値に依存したり、書き込んだりしないでください。

デバイス情報: 0x00–0x1F

Addr Len 名前 型 説明 アクセス権
0x00 1 DEVICE_ID uint8 固定値0xEA R
0x01 1 REG_VERSION uint8 レジスタmap版(0xFEと同じ) R
0x02 1 PRODUCT_MODEL_CODE uint8 ASCII: B=Basic R
0x03 1 STATUS uint8 状態bit field。後述 R
0x04 1 ERR_CODE uint8 センサー・計測状態コード R
0x05 1 NODE_ID uint8 ユーザー表示用Node ID R
0x06 1 PRODUCT_REV_SUFFIX uint8 型番revision suffix、0–255 R
0x07 1 PRODUCT_DESTINATION_CODE uint8 ASCII: J=Japan、G=Global、E=EU、U=US、C=China R
0x08–0x0B 4 FIRMVER uint32 リトルエンディアンのSemVer versionCode R
0x0C–0x11 6 SERIAL_NUM uint8[6] 製品シリアル識別子 R
0x12 1 ACTIVE_I2C_ADDR uint8 現在有効な7bitアドレス R
0x13 1 CMD_RESULT_SEQ uint8 完了したCMD要求の世代番号 R
0x14–0x17 4 FWREV uint32 FIRMVERとは別の単調増加firmware revision R
0x18–0x1F 8 Reserved — 予約 —

FIRMVERはリトルエンディアンのuint32です。上位byteが0x7Eであることを確認し、残るbyteをmajor、minor、patchとして復元します。FWREVはFIRMVERとは別の単調増加revisionです。

計測snapshot: 0x20–0x2D

0x20から14 byteを連続して読むと、1回の公開計測snapshotを取得できます。

Addr Len 名前 型 アクセス権 変換・意味
0x20–0x21 2 DATA_SEQ uint16 R 公開snapshot更新番号
0x22–0x23 2 WIND_DIR uint16 R 風向、整数degree、0–359
0x24–0x25 2 WIND_SPD_X100 int16 R raw / 100 = 風速m/s
0x26–0x27 2 NOSE_VEL_X100 int16 R raw / 100 = 最終風速を筐体基準0°軸へ射影した符号付き成分m/s(絶対風速 × cos(筐体基準風向))
0x28–0x29 2 SND_VEL_X10 uint16 R raw / 10 = 音速m/s
0x2A–0x2B 2 VIRT_TEMP_X100 int16 R raw / 100 = 音仮温度°C
0x2C–0x2D 2 BRD_TEMP_X100 int16 R raw / 100 = 基板温度°C(音仮温度とは別)
0x2E–0x3F 18 Reserved — — 予約。snapshotに含めない

DATA_SEQが前回と同じなら新しいsampleではありません。STATUS.DATA_READY (bit7)=0は有効なsnapshotがまだない状態です。DATA_READYはreadではクリアされません。ERROR_ACTIVE (bit3)=1の値や、無効と示されたゼロ値を無風として扱わないでください。

I2C_OUTPUT_RATE_HZ (0x48) とI2C_OUTPUT_INTERVAL_MS (0x49–0x4A)で公開周期を確認します。周期より速くreadしても新しい測定値は増えません。厳密な一貫性が必要なら、readの前後でDATA_SEQを比較し、値が変わっていれば再読します。

設定・出力周期: 0x40–0x5F

ホストから書き込める設定は0x40–0x43の4項目だけです。値を書いただけでは永続化されず、明示的なSAVE_CONFIGが必要です。

Addr Len 名前 型 有効値 アクセス権・意味
0x40 1 CFG_NODE_ID uint8 0–255 R/W draft、表示用Node ID
0x41 1 CFG_AVG_CYCLE uint8 1, 4, 8, 16, 32, 64 R/W draft、平均化回数
0x42 1 CFG_WIND_DIR_INSTALL_MODE uint8 0=Normal、1=Inverted R/W draft。保存・再起動後に反映
0x43 1 CFG_I2C_ADDR uint8 0x08–0x77 R/W draft。新しい7bitアドレス。保存・再起動後に反映
0x44 1 CFG_I2C_SLAVE_ENABLED uint8 0–1 Rのみ。I2C有効状態
0x45 1 CFG_MEAS_INTERVAL_MS uint8 製品定義 Rのみ。参考計測周期
0x46 1 CFG_FLAGS uint8 bit field Rのみ。下表
0x47 1 CFG_OUTPUT_RATE_HZ uint8 Hz Rのみ。設定上の外部出力rate
0x48 1 I2C_OUTPUT_RATE_HZ uint8 Hz Rのみ。I2Cの公開snapshot rate
0x49–0x4A 2 I2C_OUTPUT_INTERVAL_MS uint16 ms Rのみ。公開snapshot周期、リトルエンディアン
0x4B–0x5F 21 Reserved — — 使用しない

CFG_FLAGS (0x46): bit0 CONFIG_DIRTY(draft未保存)、bit1 REBOOT_REQUIRED、bit2 EEPROM_BUSY、bit3–7 Reserved。

CFG_I2C_SLAVE_ENABLED、周期やUART設定、製品情報、serial、較正値はこのI2C設定操作では変更できません。I2Cアドレスを変える場合は新しい値を控え、接続ホスト側も一致させます。

コマンド・状態・識別: 0xF0–0xFF

Addr Len 名前 型 アクセス権 説明
0xF0 1 CMD uint8 W 下表のcommand
0xF1 1 CMD_STATUS uint8 R 最後のCMD/write結果
0xF2 1 CMD_LOCK uint8 W 危険commandを一回許可する0xA5キー
0xF3 1 LAST_ERROR uint8 R 最後のI2C interface error
0xF4–0xFD 10 Reserved — — 予約
0xFE 1 REG_VERSION uint8 R 0x01と同じ
0xFF 1 WHOAMI uint8 R 固定値0xEA

CMD (0xF0):

値 名前 CMD_LOCK 動作
0x00 NOP 不要 何もしない
0x01 SAVE_CONFIG 必要 4つのI2C書込み対象設定を永続化
0x02 DISCARD_CONFIG 不要 未保存draftを破棄
0x03 RESTORE_CONFIG_DEFAULTS 必要 4つのI2C設定を既定値のdraftへ戻す
0x04 CLEAR_ERROR 不要 I2C interface error状態をクリア

SAVE_CONFIG/RESTORE_CONFIG_DEFAULTSではCMD_RESULT_SEQ (0x13)を事前に読みます。必要ならCMD_LOCK=0xA5を書いてからCMDを送り、世代番号が変化した後でCMD_STATUS、LAST_ERROR、CFG_FLAGSを再読します。CMD_LOCKは誤操作防止用で、認証機能ではありません。

RESTORE_CONFIG_DEFAULTSはEEPROM全体の初期化ではありません。対象はNode ID、平均化回数、風向取付、I2Cアドレスの4項目のみで、実行直後は未保存draftです。永続化する場合だけSAVE_CONFIGを続けます。UART設定、製品情報、serial、較正値は対象外です。

CMD_STATUS (0xF1)

値 名前 説明
0x00 OK 成功
0x01 BUSY 処理中。後で再試行
0x02 LOCKED CMD_LOCKが必要
0x03 INVALID_REGISTER 不正または予約address
0x04 INVALID_VALUE 値が許容範囲外
0x05 INVALID_COMMAND 未対応command
0x06 EEPROM_BUSY 保存処理中
0x07 ERROR 失敗。LAST_ERRORを確認
0x08 REBOOT_REQUIRED 保存成功。再起動後に反映

LAST_ERROR (0xF3)

値 名前 説明
0x00 NONE エラーなし
0x01 READ_TIMEOUT read timeout
0x02 UNSUPPORTED_WRITE 未対応write
0x03 GENERAL_CALL General Call受信
0x04 BUS_ERROR I2C bus error
0x05 ARBITRATION_LOST arbitration loss
0x06 OVERRUN overrun
0x07 TIMEOUT I2C timeout
0x08 I2C_INIT_ERROR I2C初期化失敗
0x09 INVALID_REGISTER 不正・予約registerへの書込み
0x0A INVALID_VALUE 範囲外の値
0x0B LOCKED CMD_LOCKなしの危険command
0x0C WRITE_BUSY writeを受付不可
0x0D EEPROM_SAVE EEPROM保存失敗

STATUS (0x03)

bit 名前 意味
7 DATA_READY 計測snapshotあり。readでクリアされない
6 CALIB_ACTIVE 較正中
5 CONFIG_MODE UART設定またはcommand prompt中
4 EEPROM_BUSY 不揮発保存中
3 ERROR_ACTIVE FWまたはセンサーerrorあり
2 I2C_WRITE_LOCKED UART操作または保存中でI2C write不可
1–0 Reserved 無視

ERR_CODE (0x04)

値 名前 説明
0x00 E_ABNORMAL NTC/温度換算等の異常。計測snapshot無効
0x01 E_NORMAL 温度安全状態は正常
0x02 E_LOWTEMP 低温状態。snapshotの妥当性を確認
0x04 E_HIGHTEMP 高温状態。snapshotの妥当性を確認
0x08 E_HIGHWIND 高風速状態

ERROR_ACTIVE=1の場合は値を通常計測として制御に使わず、予約領域を操作して復旧しないでください。

外部インターフェース概要へ戻る / LPへ戻る