手柄绑定后反复掉线,报 PIN or Key Missing (0x06)
报错信息
Encryption Change: PIN or Key Missing (0x06)
现象
手柄能配对成功,但随即不断掉线重连,dmesg 或蓝牙日志里反复出现 Encryption Change: PIN or Key Missing (0x06),始终创建不出输入设备——也就是说 padd 永远拿不到摇杆数据。
从表现上看很像手柄坏了或者板子的蓝牙芯片有问题。
原因
这通常是配置过度导致的,不是硬件故障。
Microduck 在处理 aic8800 无线芯片的绑定问题时有两级方案:
| 方案 | 做什么 | 适用 |
|---|---|---|
--pause-btd-on-pair |
配对时暂停 btd、给适配器断电重启 |
大多数受影响的板子 |
--weird-ble |
包含上面的暂停,并额外设置 Privacy = device |
少数连暂停也不够的板子 |
官方文档对这个报错有明确说明:
在只需要暂停的板子上设
Privacy = device会产生比不加任何参数更糟的失败:手柄能绑定上,然后不断掉线并报Encryption Change: PIN or Key Missing (0x06),永远创建不出输入设备。
也就是说,看到这个报错,说明你用了 --weird-ble,但这块板子其实只需要暂停。
解决
去掉 --weird-ble,改用 --pause-btd-on-pair 重新 provision:
./scripts/provision-board.sh --pause-btd-on-pair pierre@192.168.1.42
它会在 /var/lib/robot/weird-ble 留一个标记文件,除此之外不改任何东西。有这个标记的板子上,sudo robotctl pad pair 会自己完成剩下的流程——停 btd、给适配器断电重启、配对、重启 btd,并在过程中打印它在做什么。
在两种配置之间移动板子的完整命令表,在官方的 install-dev.md 里。
排查顺序
遇到手柄绑定问题时,从最轻的方案开始试:
- 先确认手柄真的进了配对模式——Xbox 手柄要按顶部的 Sync 键到快闪,慢闪只是开机。
- 确认手柄的绑定槽位没被占用。Xbox 手柄只能保存一个主机绑定,一次失败的配对会让它留着一个本板子已经没有的密钥。把它配到笔记本上再删除,可以消耗并释放这个槽位——只切到配对模式做不到。
- 试
--pause-btd-on-pair。 - 只有在暂停也无效时才上
--weird-ble。
备注
如果你实际遇到并复现了这个问题,欢迎补充具体的板子批次和 BlueZ 版本——用
pad-stack-report.sh
的 --fingerprint 输出对比两块板子最有说服力。