---
name: project-step1411-tang-nano-9k-bme280-phase2-prep-2026-08-26
description: "STEP 1411 (2026-08-26) — 藤本さん directive (P2-prep) 選択で 実行、 STEP 1410 Phase 1 続編。 BME280 hardware 未購入 状態で I2C master 完全実装 + BME280 read state machine + PC 側 Bosch 補正演算 code-complete。 Gowin build 1,179 LUT/939 FF/14-26% PASS (packed vector refactor 後)、 SRAM Program は FTDI cable driver state issue で defer (USB re-plug 必要)、 BME280 到着後 別 STEP で 30 秒 で 実測差替可能。"
metadata: 
  node_type: memory
  type: project
  originSessionId: 9d6c89fd-6964-47dc-8daa-a59c1d27f973
  modified: 2026-08-26T00:30:56.258Z
---

# STEP 1411 — Tang Nano 9K BME280 Phase 2 code-only prep (2026-08-26)

## 起点

藤本さん directive 「(P2-prep) 推奨」 選択で 実行。 BME280 未購入 状態で Phase 2 code を code-complete で 用意。

## 実装 (7 file、 hardware/phase-c/09-tang-nano-9k-bme280-phase2-prep/)

- `i2c_master.v` (~330 行) — 単一 master 状態機 (START/WRITE/READ/STOP/RESTART/ACK/NACK/timeout、 100 kHz、 open-drain oe/o pair)
- `bme280_reader.v` (~330 行) — BME280 read state machine (chip_id 0xD0 → ctrl_hum 0xF2 → ctrl_meas 0xF4 → wait 50ms → calib TP 0x88-0xA1 26B → calib H 0xE1-0xE7 7B → raw 0xF7-0xFE 8B → snapshot_valid pulse → wait 1s → repeat)
- `bme280_top.v` (~300 行) — top: I2C + reader + UART packet emitter 統合、 open-drain 疑似 wiring (scl_oe/sda_oe pair → inout pad)、 double-buffer snapshot、 1 秒毎 emit
- `uart_tx.v` (~75 行) — Phase 1 STEP 1410 copy
- `tang_nano_9k.cst` — pins: clk 52, LED1-4 10/11/13/14, uart_tx 17, i2c_scl 33, i2c_sda 34
- `build.tcl` — Gowin V1.9.12.02_SP2
- `pc_bme280_reader.py` (~230 行) — pyserial recv + Bosch datasheet 全 T/P/H 補正演算 (Python double) + human-readable print

## Verify (2026-08-26 実測)

### Build (Gowin V1.9.12.02_SP2)

初回 build error → fix:
- unpacked array port `output reg [7:0] calib_tp [0:25]` を Gowin synth が 拒否 (EX3373/EX3998)
- **fix**: packed vector `output reg [207:0]` に refactor、 write: `calib_tp[read_idx*8 +: 8] <= i2c_data_out;`、 read: `buf_calib_tp[idx*8 +: 8]`

Build 成功:
- **Logic 1,179/8,640 LUT (14%)** — Phase 1 の 7 倍 (I2C master + reader FSM 追加)
- **Register 939/6,693 (15%)**
- CLS 1,086/4,320 (26%)
- Bitstream 2,070,608 bytes
- Warning TA1132 (cosmetic)

### SRAM Program — DEFER

- Command: `programmer_cli.exe --cable "Gowin USB Cable(FT2CH)" --cable-index 1 --device GW1NR-9C --operation_index 2 --fsFile bme280_top.fs`
- Error: **Cable failed to open via the channel** (device 認識済み IDCODE 0x1100481B、 channel open 失敗)
- FTDI channel B Device Manager 状態 = **Error** (channel A OK、 別 process holding 検索 hit なし)
- 原因: FTDI driver state stuck (STEP 1410 pyserial 使用後 の Windows FTDI stack 状態異常 と 推定)
- 対処: USB cable **一旦 抜いて 数秒後 再挿入** で 復帰見込 (Zadig/FT_PROG 変更不要、 STEP 1410 で VCP auto-bind 既 verify 済)
- Scope 判断: 本 STEP は 「code-only prep」 で build verify 完了で 十分、 program + UART 実測 は 別 STEP に defer

## UART packet format (BME280 到着後 使用)

- 検出時: `BME:C=60,E=0000,TP=<52 hex>,H=<14 hex>,R=<16 hex>\r\n` (~109 chars/sec)
- 未検出: `BME:C=00,E=<4 hex>,NO_ACK\r\n` (~24 chars/sec)

## BME280 wiring (Phase 2 実行時)

- Tang Nano 9K pin 33 → BME280 SCL (+ 10 kΩ pull-up to 3.3V)
- Tang Nano 9K pin 34 → BME280 SDA (+ 10 kΩ pull-up to 3.3V)
- 3.3V / GND / SDO=GND (I2C 0x76) / CSB=3.3V (I2C mode)

## Honest scope (8 条)

1. BME280 hardware 未購入 = 実測データ ゼロ
2. SRAM Program 未実行 = FTDI cable driver state issue、 USB re-plug 後 別 STEP
3. UART 実測 未確認 = NO_ACK packet 出力 verify 未
4. I2C master untested vs real slave = simulation なし、 hardware handshake は 別途 verify
5. PC 側 補正演算 untested = 実 calib coeff + raw なし で unit test 未
6. I2C address 想定 = 0x76 (SDO=GND default) 前提、 個体差で 0x77 の 可能性
7. Bosch 補正 double 実装 = Python float、 datasheet の 32-bit fixed-point Q 実装 と 若干 の 数値差可能性 (実用 tolerance)
8. novelty ゼロ = BME280 wire-up は 電子工作 定番

## 次段 (defer、 藤本さん judgment 待ち)

1. **SRAM Program 再試行** = USB re-plug 後 index 2 実行、 NO_ACK packet 出力確認 (別 STEP or 別 session)
2. **BME280 発注** = 秋月 109421 (¥1,180) + jumper 4 本 + 10 kΩ 抵抗 2 本 (~¥2,000 目安)
3. **Phase 2 実測差替** = BME280 到着 → 物理配線 → SRAM Program → pc_bme280_reader.py で 実測 T/H/P、 STEP 1407 mock 値 と 比較 (STEP 1412+ candidate)
4. **Phase 3** = benchtop-mcp v0.9-alpha real hardware 統合 (serialbridge subprocess、 mock → real 差替、 hardware_available:True flag)

## Artifact

- `hardware/phase-c/09-tang-nano-9k-bme280-phase2-prep/` (7 file、 source のみ commit、 .fs は gitignore)
- `public/tools/step-1411-tang-nano-9k-bme280-phase2-prep/index.html` (~13 KB)
- `dist-renderer/tools/step-1411-tang-nano-9k-bme280-phase2-prep/index.html` (mirror)
- 公開 URL: https://rei-aios.pages.dev/tools/step-1411-tang-nano-9k-bme280-phase2-prep/

## 継承 discipline

- [[feedback-all-research-site-reflection-default]] 2026-08-06 protocol 遵守
- [[feedback-no-rush-publication]] 継承 (実 hardware 発注 は 藤本さん judgment 待ち)
- [[feedback-world-uniqueness-claim-controllable]] 継承 (「初」 主張ゼロ、 個人電子工作 定番 pattern)
- [[feedback-projection-self-audit-pattern]] SAC-4 継承
- [[feedback-phase-c-silicon-existence-claim]] 継承 (物理 silicon 系譜 5 例目 candidate、 program 完了 後)

## Related

- [[project-step1410-tang-nano-9k-uart-i2c-scaffold-phase1-2026-08-26]] (直接の 前段)
- [[project-step1407-benchtop-v08-akizuki-wireup-mock-2026-08-26]] (差替対象 mock)
- [[project-step1406-akizuki-i2c-spi-uart-wireup-candidates-2026-08-26]]
- [[project-step1409-rei-scout-akizuki-catalog-proposal-2026-08-26]]
