feat: I2C-Lab v0.1.0 代码入库——RP2040 PIO 被动监控 probe 固件(pico-sdk C, 250MHz 双核) + Fluent 上位机(事务流/波形快照/CSV/演示模式);release/ 交付物(exe/UF2/BIN/zip)不入库、本地保留待真机验收发布;根 README 工具表与 agent.md 登记;I2C-Inject README 标注后续并入 I2C-Lab;移除误登记的 OBI-1/ui-style-demo 相关内容

This commit is contained in:
2026-10-13 15:41:29 +08:00
parent 74469cfe66
commit 42ff258b35
25 changed files with 3292 additions and 20 deletions
+31
View File
@@ -0,0 +1,31 @@
;
; bus_watch.pio — I2C 总线被动边沿捕获(RP2040 PIO)
; ==================================================
; 思路同 pico-examples 的 logic_analyser: 硬件只做最难的"确定性捕获"
; (电平变化即压入 FIFO), 协议解码(I2C 状态机)留给 CPU——与 PC 端
; i2cdec.py 共享同一套算法语义(源自 I2C-Inject 真机验证的
; i2c_sniff_decode.py)。
;
; 接线约定(沿用 I2C-Inject): GP8=SDA, GP9=SCL, 共地, 不加上拉,
; 纯输入不驱动(开漏总线零干扰)。
; 引脚映射: in_base = GP8 → ISR/X/Y 的 bit0=SDA bit1=SCL。
;
; 每个 FIFO 字 = 新电平值(0..3)。时间戳由 CPU 取(边沿间隔 ≥ 500ns,
; 核1 专职轮询, 抖动远小于 1us)。
; 环形轮询 5 条指令 @250MHz = 20ns/圈, 可分辨 ~40ns 毛刺;
; push noblock: FIFO 满则丢当前沿(Y 已更新, 后续沿仍连续可解,
; CPU 侧以"双位同变"启发式统计疑似丢沿)。
.program bus_watch
top:
mov isr, null ; ISR 清零(低 2 位待填)
in pins, 2 ; ISR[1:0] = SCL<<1 | SDA
mov x, isr
jmp x != y, changed ; 电平有变 -> 送出
jmp top ; 无变 -> 继续盯
changed:
mov y, x ; 先更新基线(即使 push 被丢也不失步)
push noblock ; 送出新电平(FIFO 满则丢弃)
jmp top