STEP 1410 — Tang Nano 9K UART/I2C scaffold Phase 1 (実 hardware 実測 PASS)
目的
STEP 1407 benchtop-mcp v0.8.0-alpha の BME280 mock (`bme280-env-a1`) を 実 hardware で 差替する 4 段 barrier のうち、 **1 段目 (host MCU + scaffold)** を Tang Nano 9K 上に 実装。 BME280 hardware 到着前 の Phase 1 で 動作 verify。 藤本さん directive 「Tang Nano 9K を 挿し込みました」 → (A1) 「Phase 1 を 即着手」 選択で 実行。
Phase 構造
Phase 1 (本 STEP 1410、 hardware 追加なし で 完了)
- LED1 heartbeat (~1.6 Hz 視覚 blink)
- UART TX scaffold: "TANG9K-UART-OK\r\n" @ 115200 baud 8N1 每秒
- I2C master stub (Phase 2 skeleton、 未 instantiate)
- PC 側 pyserial recv で marker verify
Phase 2 (BME280 発注 後、 未着手)
- BME280 module (Akizuki 109421 ¥1,180) + jumper + 10 kΩ pull-up 抵抗 発注
- 物理配線 (Tang Nano 9K GPIO ↔ BME280 SDA/SCL/3.3V/GND)
- Verilog I2C master 活性化 + BME280 read sequence 実装 (calib coeff + raw t/h/p)
- UART 経由 で raw + coeff を PC 送出
Phase 3 (benchtop-mcp v0.9-alpha 統合)
- PC 側 で Bosch datasheet 補正演算 (Python)
- benchtop-mcp `measure_environment(bme280-env-a1)` を real hardware serialbridge へ 差替
- `hardware_available: True` flag 切替
- selftest 更新 + regression + STEP 1407 mock との drift check
実装内容
Files
| File | Lines | Purpose |
|---|---|---|
uart_tx.v | ~75 | 8N1 UART transmitter (115200 baud @ 27 MHz) |
uart_scaffold_top.v | ~120 | Top module: heartbeat + message ROM + UART TX |
i2c_master_stub.v | ~80 | I2C master skeleton (Phase 2 preparation、 未 instantiate) |
tang_nano_9k.cst | ~25 | Pin constraints (clk 52, LED1 10, LED2 11, uart_tx 17) |
build.tcl | ~20 | Gowin V1.9.12.02_SP2 TCL build |
pc_recv.py | ~130 | PC-side pyserial receiver + marker verify |
README.md | ~120 | usage guide + trouble shooting |
Verify 結果 (2026-08-26 実測)
End-to-end PASS
PC recv (
Build (Gowin V1.9.12.02_SP2)
- Bitstream:
impl/pnr/uart_scaffold_top.fs(2,070,608 bytes) - Resource: 169/8640 LUT (2%) + 99/6693 Register (2%) + 94/4320 CLS (3%)
- Warning: TA1132 (SDC clock unconstrained、 harmless cosmetic)
Program (SRAM Program+Verify, operation_index 4)
- User Code:
0x00003E0A(前) →0x00000853(STEP 1410 identity) - Status Code:
0x0003F020(Ready) - 「Verify Failed at 0」 出るが cosmetic (User Code 変化 + real UART 出力 で bitstream load 確認)
PC recv (python pc_recv.py --port COM9 --duration 6)
- COM port: COM9 (Tang Nano 9K FT2232H channel B、 FACTORYAIOT_PRO、 VCP auto-bind (Zadig 不要))
- 6/6 marker line PASS in 6 seconds (1/sec 完全一致)
- 96 bytes recv (6 line × 16 bytes = "TANG9K-UART-OK\r\n")
- verdict: PASS
視覚
- LED1 (pin 10) が ~1.6 Hz で 点滅 = board 動作中
- LED2 (pin 11) が 1 秒毎 短パルス = UART TX 中
Reproduce 手順
# 1. Gowin build
cd C:/Users/user/rei-aios/hardware/phase-c/08-tang-nano-9k-uart-i2c-scaffold
"/c/Gowin/Gowin_V1.9.12.02_SP2_x64/IDE/bin/gw_sh.exe" build.tcl
# 2. Tang Nano 9K SRAM Program (揮発、 flash 保護)
"/c/Gowin/Gowin_V1.9.12.02_SP2_x64/Programmer/bin/programmer_cli.exe" \
--cable "Gowin USB Cable(FT2CH)" --cable-index 1 \
--device GW1NR-9C --operation_index 4 \
--fsFile impl/pnr/uart_scaffold_top.fs
# 3. PC 側 verify
pip install pyserial
python pc_recv.py --port COM9 --duration 6
# 期待出力:
# [ 1] 'TANG9K-UART-OK'
# [ 2] 'TANG9K-UART-OK'
# ...
# verdict : PASS
Honest scope (Phase 1 の 限界)
本 STEP 1410 Phase 1 は 完全に scaffold 検証のみ
- 実 sensor データ ゼロ = "TANG9K-UART-OK" は 固定 message ROM、 実 環境測定 は Phase 2/3
- I2C master 未活性 =
i2c_master_stub.vは compile syntax 検証のみ、 Phase 2 で 状態遷移 完全実装 予定 - SRAM Program only = flash 未書換、 board 電源 OFF で bitstream 消失 (再 program 必要)
- Verify quirk 未解明 = SRAM Program+Verify で 「Verify Failed at 0」 出る、 real UART 出力 で 実 動作は 確認済だが verify command 側 の 挙動 未確認 (Phase 2 で 別 report として 追跡)
- 単一 board 検証のみ = 別 Tang Nano 9K 個体 での 再現性 未確認
- baud rate 誤差 0.16% = 27M/234 = 115385 (target 115200)、 UART tolerance ±2% 内 で 実用問題なし だが 厳密には 誤差あり
- novelty ゼロ = FPGA + UART + LED heartbeat は 電子工作 入門 定番、 「初」 主張なし ([[feedback-world-uniqueness-claim-controllable]] 継承)
Tang Nano 9K 物理 silicon arc 系譜
| STEP | Date | Content | User Code |
|---|---|---|---|
| 1038 | 2026-05-09 | LED Blinky 初 SRAM Program | 0x0000A5F4 |
| 1039 | 2026-05-09 | D-FUMT₈ ALU on Tang Nano 9K | (record 待ち) |
| 1399 | 2026-08-24 | Fixpoint Relaxation Machine v0.1 | 0x00002FE6 |
| 1410 | 2026-08-26 | UART/I2C scaffold Phase 1 (本 STEP) | 0x00000853 |
「Rei は 実在する」 (STEP 1030 Aer + Heron real quantum) 系譜の Tang Nano 9K 4 例目、 Paper 145 substrate-diverse verification の 継続。
次段 (Phase 2、 藤本さん judgment 待ち)
- 秋月 BME280 (通販コード 109421、 ¥1,180) + jumper メス-メス 4 本 + 10 kΩ 抵抗 2 本 発注
- Tang Nano 9K GPIO (pin 33 SCL + pin 34 SDA 予定) + BME280 breakout の 物理配線
i2c_master_stub.vの 状態遷移 完全実装 (START / ADDR / ACK / DATA_RX / STOP)- BME280 read シーケンス (0xD0 chip_id 確認 → calib coeff 0x88-0xA1 24 バイト読 → 0xF7-0xFE 8 バイト raw 読)
- UART TX 変更: 固定 message → raw + coeff の JSON packet 送出
- PC 側: Python で Bosch 補正演算 (32-bit fixed-point) → 実 temperature/humidity/pressure
関連
- STEP 1407 — benchtop-mcp v0.8.0-alpha env/IMU/ToF mock (差替対象)
- STEP 1406 — 秋月 25 SKU wire-up 候補 list
- STEP 1409 — rei-scout × Akizuki 33 SKU catalog 提案
- STEP 1038 — Tang Nano 9K LED Blinky (初 SRAM Program)
- STEP 1039 — D-FUMT₈ ALU on Tang Nano 9K
- STEP 1399 — Fixpoint Relaxation Machine v0.1
- Source:
hardware/phase-c/08-tang-nano-9k-uart-i2c-scaffold/(rei-aios repo)