Skip to content

Commit 1753db3

Browse files
committed
Merge pull request #23 from MeowKJ/dev
1 parent 2edd4b8 commit 1753db3

168 files changed

Lines changed: 442 additions & 15 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,27 @@ build/
8989
.cache/
9090

9191
# Windows reserved name (accidental create)
92-
nul
92+
nul
93+
94+
# Local temporary commit message files
95+
commit_msg*.txt
96+
97+
# pnpm 本地缓存
98+
.pnpm-store/
99+
100+
# 3D 模型与设计文件(另行存放,不纳入本仓库)
101+
Models/
102+
models/
103+
model/
104+
*.shapr
105+
*.blend
106+
*.blend1
107+
*.stl
108+
*.obj
109+
*.step
110+
*.stp
111+
*.3ds
112+
*.fbx
113+
*.dae
114+
*.glb
115+
*.gltf

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "examples/openwch-ch592"]
2+
path = examples/openwch-ch592
3+
url = https://github.com/openwch/ch592.git

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,24 @@
3434

3535
# 概述
3636

37+
**BinaryKeyboard** 为本项目名称(项目名),开源迷你键盘固件与改键工具。
38+
3739
# 快速开始
3840

3941
# 环境
4042

4143
## 有线款
4244

43-
[有线款](./Firmware/CH552G/README.md)
45+
[有线款](./firmware/CH552G/README.md)
4446

4547
## 无线款
4648

47-
[无线款](./Firmware/CH592F/README.md)
49+
[无线款](./firmware/CH592F/README.md)
4850

4951
# 贡献
5052

53+
**分支与流程**:日常开发在 **`dev`** 分支进行,完成后通过 **Pull Request** 合并到 **`main`**
54+
5155
[![Contributors](https://contrib.rocks/image?repo=MeowKJ/BinaryKeyboard)](https://github.com/MeowKJ/BinaryKeyboard/graphs/contributors)
5256

5357
# 许可
@@ -62,7 +66,7 @@
6266
</p>
6367

6468
- **代码(Code)**:遵循 [GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.html)
65-
适用范围:`/Firmware/**``/Software/**`、脚本与示例代码等。
69+
适用范围:`/firmware/**``/tools/studio/**`、脚本与示例代码等。
6670

6771
- **文档与素材(Docs & Assets)**:遵循 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-Hans)
6872
适用范围:`/Hardware/**``/Models/**`

commit_msg.txt

Lines changed: 0 additions & 8 deletions
This file was deleted.

docs/faq.md

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,46 @@
1212

1313
## 3) 改键网页连不上设备
1414

15-
- 尽量用 Chrome / Edge
15+
- 尽量用 Chrome / Edge(需支持 WebHID)
1616
- 检查是否被浏览器权限拦截(HID/USB 权限)
17+
- 无线版:确认已用 USB 连接且键盘处于 USB 模式
18+
19+
## 4) 无线版:Debug Terminal 没有数据
20+
21+
- 在改键工具中打开底部 Debug Terminal,进入设置,开启「HID 日志」并点击保存
22+
- 保存后需在工具内执行一次「保存配置」到设备,日志开关才会持久化
23+
24+
## 5) 无线版:BLE 连接后过一会儿显示未连接
25+
26+
现象:USB 切到 BLE、电脑配对后显示「正在连接」,过几秒或十几秒又变成「未连接」。
27+
28+
**先看断开原因**:用 USB 连接键盘,打开改键工具和 Debug Terminal,开启 HID 日志。再次用蓝牙连接,断开后看终端里**紧接着出现的一条 BLE 事件**`opcode` 应为 `GAP_LINK_TERMINATED``reason` 即断开原因。常见含义:
29+
30+
| reason (hex) | 含义 |
31+
| :----------- | :--- |
32+
| 0x08 | CONNECTION_TIMEOUT(连接/监督超时) |
33+
| 0x16 | LOCAL_HOST_TERMINATED(本机主动断开) |
34+
| 0x3B | UNACCEPTABLE_CONN_PARAMS(主机不接受连接参数更新) |
35+
| 0x13 | REMOTE_USER_TERMINATED(对端用户/系统断开) |
36+
| 0x22 | LMP_LL_RESPONSE_TIMEOUT(链路层无响应) |
37+
38+
**可尝试**
39+
40+
- **0x08 / 超时**:在 `firmware/CH592F/MeowBLE/hid/include/kbd_mode_config.h` 中把 `KBD_BLE_CONN_TIMEOUT``500`(5 秒)改为 `600``800`,重新编译烧录。
41+
- **0x3B / 参数不被接受**:同一文件里可适当放大 `KBD_BLE_CONN_INT_MIN/MAX`(如改为 16~32,即 20ms~40ms),或联系维护者调整连接参数更新时机。
42+
- **0x16 / 本机断开**:多为系统/驱动或省电策略断开,可尝试关闭该设备的「允许关闭此设备以节约电源」、更新蓝牙驱动或换一台设备对比。
43+
44+
## 6) 无线版:BLE 配对完成后键盘卡死(RGB 不更新、按键无反应)
45+
46+
现象:FN 切到 BLE、长按进入广播,电脑连接/配对过程中键盘完全无响应(RGB、普通键、FN 均无反应),需重新上电或拔 USB 才能恢复。最后一条日志可能是 **连接建立后 STATE_CB_EXIT****SECURITY_REQUEST (0xB7)** 成功、或 **PAIR_CB_EXIT**(配对完成/保存绑定之后)。
47+
48+
**可能原因**:在 BLE 栈上下文中执行应用层代码(状态回调、日志、RGB 等)可能引发卡死;或配对/SNV 写路径、WCH BLE 库内部流程存在问题。
49+
50+
**可尝试**
51+
52+
1. **固件已做缓解**:① **状态回调延后**:BLE 状态变化不再在栈上下文中直接调用应用(`onStateChange`),而是写入待处理队列,由主循环 `KBD_Mode_Process` 中取出并执行,从而避免在 BLE 栈里执行 RGB/连接状态等逻辑导致卡死。② 以下路径内默认不再打 BLE 诊断日志:SNV 写、配对/密码回调、安全请求事件、状态回调内日志(宏 `BLE_SNV_LOG_IN_WRITE``BLE_PAIRING_DIAG_LOG``BLE_SECURITY_REQ_DIAG_LOG``BLE_STATE_CB_DIAG_LOG` 均为 0)。需要调试时可把对应宏设为 1 再编译。
53+
2. **关键验证:关闭绑定保存**:在 `firmware/CH592F/MeowBLE/core/include/ble_config.h` 中把 `BLE_SNV` 设为 `FALSE` 后重新编译烧录,再测试“连接但不保存绑定”(每次重连需重新配对):**若此时不再卡死,则问题在 SNV 写入或栈在写完成后的流程**;若仍卡死,则更可能是栈在配对完成回调返回后的其它路径有问题。
54+
3. **更新 BLE 库 / 芯片固件**:查看 WCH 官方是否有 CH592 BLE ROM/SDK 更新或勘误说明,针对配对后死机有无修复或建议。
55+
4. **缩短配对期负载**:确保在配对阶段不要同时做大量配置保存或其它 Flash 写(例如改键工具里暂不点“保存配置”),减少与 SNV 写争用或阻塞主循环的可能。
56+
57+
若你已确认最后一条日志的 opcode(如 0xBA = PAIR_CB_EXIT)和复现步骤,欢迎提 issue 附上终端日志片段,便于进一步排查。

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ hero:
1111
actions:
1212
- theme: brand
1313
text: ⚡ 经典版
14-
link: /classic/
14+
link: /wired/
1515
- theme: alt
1616
text: 📡 无线版
1717
link: /wireless/

docs/wired/dev.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# 经典版固件开发
2+
3+
基于 **CH552G** 芯片的固件开发指南。
4+
5+
## 开发环境
6+
7+
### 推荐工具链
8+
9+
| 工具 | 说明 |
10+
| :---------- | :------------------- |
11+
| Arduino IDE | 借助 CH55xduino 编译 |
12+
13+
### 配置开发环境
14+
15+
1. 安装 Arduino IDE
16+
2. 安装 CH55xduino 库
17+
18+
## 版本配置
19+
20+
`src/config.h` 中选择外形版本:
21+
22+
```c
23+
// 只启用一个
24+
#define USE_BASIC // 基础款
25+
// #define USE_5KEYS // 五键款
26+
// #define USE_KNOB // 旋钮款
27+
```
28+
29+
## 编译与烧录
30+
31+
### 使用 Arduino IDE
32+
33+
1. 打开 `CH552G.ino` 文件
34+
2. 选择板子:**CH552**
35+
3. 在 USB Setting 中选择:**USER CODE w/148B USB ram**
36+
4. 点击编译并上传
37+
38+
## 常见改动点
39+
40+
### 1. 默认键位
41+
42+
修改 `KeysDataHandler.c` 中的按键映射表。
43+
44+
### 2. RGB 灯效
45+
46+
修改 `rgb.c` 中的灯效逻辑,支持 WS2812。
47+
48+
### 3. USB 描述符
49+
50+
修改 `USBConstant.c` 中的设备描述符。
51+
52+
### 4. 音乐节奏游戏延迟问题
53+
54+
修改 `config.h` 中的 DEBOUNCE_THRESHOLD 阈值,默认值为 5,单位为毫秒。如果用于音乐节奏游戏,可将阈值减小或者设置为0。
55+
56+
## HID 协议
57+
58+
经典版使用 USB HID 协议通信:
59+
60+
| Report ID | 功能 | 数据长度 |
61+
| :-------- | :---------- | :------- |
62+
| 1 | 键盘输入 | 8 字节 |
63+
| 2 | 控制器 | 8 字节 |
64+
| 3 | 鼠标输入 | 5 字节 |
65+
| 4 | 主机 → 键盘 | 31 字节 |
66+
| 5 | 键盘 → 主机 | 31 字节 |
67+
68+
::: tip
69+
Report ID 4/5 用于改键工具与键盘通信,修改键位映射。
70+
:::
71+
72+
## 参考资料
73+
74+
- [CH552 数据手册](https://www.wch.cn/products/CH552.html)
75+
- [SDCC 文档](http://sdcc.sourceforge.net/)
76+
- [CH55xduino](https://github.com/DeqingSun/ch55xduino)

docs/wired/flash.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# 经典版固件刷写
2+
3+
## 准备工作
4+
5+
- **WCHISPStudio** - [下载地址](https://www.wch.cn/downloads/WCHISPTool_Setup_exe.html)
6+
- 对应版本的 `.hex` 固件文件 - [GitHub Releases](https://github.com/MeowKJ/BinaryKeyboard/releases)
7+
8+
## 固件文件说明
9+
10+
| 固件文件 | 适用外形 |
11+
| :----------------------- | :------- |
12+
| `ch552_basic_xxx.hex` | 基础款 |
13+
| `ch552_fivekeys_xxx.hex` | 五键款 |
14+
| `ch552_knob_xxx.hex` | 旋钮款 |
15+
16+
> 以 GitHub Releases 的发布文件为准。注意前缀为`ch552_`,不要下错成无线版的`ch592_`
17+
18+
## 刷写步骤
19+
20+
### 软件配置
21+
22+
1. 打开 **WCHISPStudio**
23+
2. 顶部工具栏选择 **MCU系列视图****E8051USB系列**
24+
3. 芯片选择:芯片系列 **CH55x**,芯片型号 **CH552**,下载接口 **USB**
25+
4. 下载文件:目标程序文件1 选择对应的 `.hex` 固件文件
26+
27+
### 硬件操作
28+
29+
5. **按住** PCB 上的 **BOOT** 按钮不松开
30+
6. 保持按住的同时,将 USB-C 插入电脑
31+
7. 松开 BOOT 按钮(此时软件应识别到设备)
32+
33+
::: tip
34+
如果没有识别到设备,请检BOOT按钮是否按下,或者检查USB-C接口是否焊接良好。
35+
:::
36+
37+
### 开始烧录
38+
39+
8. 点击"下载"按钮
40+
9. 等待进度条完成,提示成功
41+
10. 重新拔插 USB,测试键盘

docs/wired/index.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# ⚡ 经典版快速开始
2+
3+
基于 **CH552G** 芯片的 USB 直连版本,即插即用。
4+
5+
## 准备工作
6+
7+
### 你需要
8+
9+
| 工具/材料 | 说明 |
10+
| :-------------- | :----------------------------------- |
11+
| 🔧 电烙铁 + 焊锡 | 焊接 PCB |
12+
| 🖨️ 3D 打印机 | 或者使用 3D 打印服务 |
13+
| 💻 电脑 | 推荐 Windows,没有测试过 macOS/Linux |
14+
| 🔌 USB-C 数据线 | 连接键盘 |
15+
16+
### 下载文件
17+
18+
1. **固件** - 从 [GitHub Releases](https://github.com/MeowKJ/BinaryKeyboard/releases) 下载
19+
- `ch552_basic_xxx.hex` - 基础款
20+
- `ch552_fivekeys_xxx.hex` - 五键款
21+
- `ch552_knob_xxx.hex` - 旋钮款
22+
23+
2. **外壳 STL** - 从 Releases 或 [OSHWHub](https://oshwhub.com/kjpig/Binary-Keyboard) 下载。
24+
25+
3. **烧录工具** - [WCHISPStudio](https://www.wch.cn/downloads/WCHISPTool_Setup_exe.html)
26+
27+
## 复刻流程
28+
29+
### Step 1:3D 打印外壳
30+
31+
- 普通 FDM 打印即可,没有特殊要求。
32+
- 层高 0.2mm
33+
34+
### Step 2:焊接 PCB
35+
36+
1. 焊接 USB-C 接口
37+
2. 按照原理图焊接元器件
38+
3. 焊接按键
39+
40+
::: warning 注意
41+
USB-C接口的焊接难度略大,需要小心。可以寻找相关教程视频学习。我个人推荐使用一些助焊剂帮助焊接。一般复刻失败的原因都是USB-C接口焊接失败。
42+
:::
43+
44+
### Step 3:刷写固件
45+
46+
#### 软件配置
47+
48+
1. 打开 **WCHISPStudio**
49+
2. 顶部工具栏选择 **MCU系列视图****E8051USB系列**
50+
3. 芯片选择:芯片系列 **CH55x**,芯片型号 **CH552**,下载接口 **USB**
51+
4. 下载文件:目标程序文件1 选择对应的 `.hex` 固件文件
52+
53+
#### 硬件操作
54+
55+
5. **按住** PCB 上的 **BOOT** 按钮不松开
56+
6. 保持按住的同时,将 USB-C 插入电脑
57+
7. 松开 BOOT 按钮(此时软件应识别到设备)
58+
59+
#### 开始烧录
60+
61+
8. 点击"下载"按钮
62+
9. 等待进度条完成,提示成功
63+
64+
详细步骤见 [刷写固件](./flash)
65+
66+
### Step 4:组装
67+
68+
1. 将 PCB 装入外壳
69+
2. 盖上盖板,拧紧螺丝
70+
3. 安装轴体
71+
72+
### Step 5:配置键位
73+
74+
1. 用 Chrome / Edge 打开改键工具
75+
2. 点击"连接设备"
76+
3. 选择你的键盘
77+
4. 配置想要的键位映射
78+
5. 点击"写入"
79+
80+
详细步骤见 [改键软件使用](./remap)
81+
82+
## 完成 🎉
83+
84+
插上 USB,享受你的可爱二进制键盘吧!
85+
86+
::: tip 遇到问题?
87+
查看 [常见问题](/faq) 或在 GitHub 提交 Issue。
88+
:::

0 commit comments

Comments
 (0)