ユーザー向けI2Cレジスタ一覧¶
このページはULSA EVOをI2Cスレーブとして使うホスト実装者向けに、ユーザー向け公開レジスタだけをまとめています。外部接続では端子配列と信号電圧条件を確認してください。USB有線計測のみで使う方はUSB有線計測とコマンドを参照してください。
この一覧は、公開I2C仕様書Rev 1.5(2026-09-01)のレジスタマップです。
最小読み出し手順¶
- WHOAMI (0xFF) が0xEAであることを確認します。
- REG_VERSION (0x01) が、この一覧の現行値0x0Bであることを確認します。
- STATUS (0x03) のDATA_READYが1、ERROR_ACTIVEが0であることを確認します。
- 0x20から14 byteの計測snapshotを読みます。
- DATA_SEQ (0x20)が前回値から変わったら新しい測定値です。
以下は、この手順で使うレジスタと設定・状態コードの参照表です。
| アクセス権 | 意味 |
|---|---|
| R | 読み出し専用 |
| W | 書き込み専用 |
| R/W | 読み出し・書き込み可能 |
| R/W draft | 読み書き可能な未保存設定。永続化にはSAVE_CONFIGが必要 |
| — | 予約または非公開。読み書きしない |
アドレス空間の全体像¶
範囲内でも個別表にないレジスタは未定義です。予約領域には読み書きしません。
バスの基本仕様¶
| 項目 | 仕様 |
|---|---|
| 役割 | 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の場合は値を通常計測として制御に使わず、予約領域を操作して復旧しないでください。