feat: HDMI-Tool 启动时强制扩展显示拓扑 + 收录波形/注入脚本
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
# 0x606E 位交换自动化测试 — 经 RP2040 注入器
|
||||
# ============================================================
|
||||
# 流程: 读基线 -> 写各交换位并校验 -> 读回确认 -> 收尾还原
|
||||
# 注意: LA1010 波形对照按 doc/architecture/rgb_bit_swap_test.md §1.1 手工比对;
|
||||
# 本脚本负责寄存器侧的全部操作与校验, 打印每步期望的 LA 现象。
|
||||
# 用法: python bitswap_auto.py [COM口]
|
||||
# python bitswap_auto.py COM9 full 额外跑 G 通道(0x40)与 R 通道(0x20)
|
||||
|
||||
import serial, sys, time
|
||||
|
||||
PORT = sys.argv[1] if len(sys.argv) > 1 else 'COM9'
|
||||
FULL = len(sys.argv) > 2 and sys.argv[2].lower() == 'full'
|
||||
|
||||
BANK, REG = '60', '6E'
|
||||
STEPS = [ # (写值, 含义, 写入后 HDMI-Tool 应投的图, LA 预期变化 vs 基线)
|
||||
('00', '关闭交换(基准)', 'solid_0000AA / solid_000055',
|
||||
'D0:AA=13%/55=84%, D1:AA=72%/55=0.9% (基线)'),
|
||||
('80', 'B通道镜像', 'solid_0000AA',
|
||||
'与基线互换: D0 应变 ~84%, D1 应变 ~0.9%'),
|
||||
]
|
||||
if FULL:
|
||||
STEPS[1] = ('20', 'R通道镜像(6ch挂D23/D16时测)', 'solid_AA0000',
|
||||
'D23/D16 占空比互换')
|
||||
STEPS.append(('40', 'G通道镜像(6ch挂D15/D8时测)', 'solid_00AA00',
|
||||
'D15/D8 占空比互换'))
|
||||
STEPS.append(('80', 'B通道镜像', 'solid_0000AA',
|
||||
'D0/D1 与基线互换'))
|
||||
|
||||
|
||||
def xact(ser, cmd, wait=3.0):
|
||||
"""发命令收完整回显(注入含重试可能耗时数秒)"""
|
||||
ser.reset_input_buffer()
|
||||
ser.write((cmd + '\n').encode())
|
||||
lines = []
|
||||
t0 = time.time()
|
||||
while time.time() - t0 < wait:
|
||||
ln = ser.readline().decode('utf-8', 'replace').strip()
|
||||
if ln:
|
||||
lines.append(ln)
|
||||
if ln.startswith('=') and ('读回' in ln or ':' in ln):
|
||||
break
|
||||
return lines
|
||||
|
||||
|
||||
def check(lines, expect_val):
|
||||
"""从回显提取 读回=XX 并与期望比较"""
|
||||
for ln in lines:
|
||||
if '读回=' in ln:
|
||||
rb = ln.split('读回=')[1].strip()
|
||||
ok = rb.upper() == expect_val.upper()
|
||||
return ok, rb
|
||||
return False, None
|
||||
|
||||
|
||||
ser = serial.Serial(PORT, timeout=1)
|
||||
time.sleep(0.5)
|
||||
print('== 0x606E 位交换自动化 == 端口 %s' % PORT)
|
||||
print(xact(ser, 's')[0])
|
||||
|
||||
log = []
|
||||
fails = 0
|
||||
try:
|
||||
# 0) 通信预检
|
||||
lines = xact(ser, 'r %s %s' % (BANK, REG))
|
||||
ok, rb = check(lines, '00')
|
||||
print('[预检] 读 0x%s%s -> %s (期望默认 00)' % (BANK, REG, rb))
|
||||
if not ok:
|
||||
print(' !! 预检值不是 00 —— 若刚做过实验未还原请先还原; 继续执行')
|
||||
|
||||
for val, meaning, img, expect in STEPS:
|
||||
print('\n--- 写 %s (%s) ---' % (val, meaning))
|
||||
lines = xact(ser, 'w %s %s %s' % (BANK, REG, val), wait=6.0)
|
||||
for ln in lines:
|
||||
print(' ' + ln)
|
||||
ok, rb = check(lines, val)
|
||||
if not ok:
|
||||
fails += 1
|
||||
print(' !! 校验失败(读回 %s != %s), 跳过此步' % (rb, val))
|
||||
log.append((val, 'FAIL', rb))
|
||||
continue
|
||||
log.append((val, 'OK', rb))
|
||||
print(' [寄存器侧 OK] 读回=%s' % rb)
|
||||
print(' [现在请投] %s' % img)
|
||||
print(' [LA 预期] %s' % expect)
|
||||
if val != '00':
|
||||
input(' >>> 抓完波形按回车继续...')
|
||||
|
||||
# 收尾还原
|
||||
print('\n--- 收尾: 写 00 还原 ---')
|
||||
lines = xact(ser, 'w %s %s 00' % (BANK, REG), wait=6.0)
|
||||
ok, rb = check(lines, '00')
|
||||
print(' 读回=%s %s' % (rb, 'OK' if ok else 'FAIL'))
|
||||
if not ok:
|
||||
fails += 1
|
||||
finally:
|
||||
ser.close()
|
||||
|
||||
print('\n== 结果汇总 ==')
|
||||
for val, st, rb in log:
|
||||
print(' 写%s: %s (读回 %s)' % (val, st, rb))
|
||||
print('失败步骤: %d' % fails)
|
||||
Reference in New Issue
Block a user