CH58x三模键盘模组方案测试体验(CH555主控)
前言:
去年B站稚晖君的瀚文键盘一经推出,给键盘客制化圈子带来了不小的影响。在此之前,键盘客制化一般指外壳、轴体的选择,很少有针对键盘软件功能做新颖的开发。功能性的开发似乎已经进入了瓶颈阶段,来回折腾开发也只是围绕在灯光律动、屏幕等软件功能。稚晖君的瀚文键盘是最基本的有线键盘,然而功能上却异常丰富:灯光/自带屏幕/与上位机通信可调等功能。从终端用户可二次开发阐释何为客制化这一最基本的概念。
笔者在了解了稚晖君的方案后,又实际测试体验了几款高流量的键盘方案,发现软件功能仍然存在很大的问题。最明显的如PWM调光,肉眼可见的屏闪,灯光切换缓慢,以及在不开灯光时1000mAh电池只能使用1~2周。虽然其凭借优秀的外观收获不少的拥趸,但笔者认为,作为客制化键盘最需要打磨的优先是功能性,其他如外观、铝坨坨、声优轴等都是为功能服务的。
带着这样的目的,笔者专门在键盘方案市场寻找了几款方案,都是针对功能性需求开发的,本次也给大家带来其中一款介绍:沁恒CH58x三模模组方案(CH555主控)。
原理:
基本功能框架:CH555作为主控完成键扫+灯光等效果;CH582作为无线模块完成无线双模功能(2.4G+BLE)。
CH555作为可二次开发的芯片提供给终端进行二次开发,键扫、灯光、上位机配套均由此芯片完成。
CH582作为模块提供给终端直接进行指令的调配使用。CH582也可以实现键扫和简单灯光的闪烁功能。听原厂工程师说,为了实现2.4G模式上报率达到1Khz,所以CH582只作为无线透传使用,其他功能均放在了主控芯片完成。可以实现2.4G作为电竞需求使用。整体来看,这也符合资源与性能的配置要求。
如需要CH582单芯片实现三模功能,则适当牺牲灯光、上报率等性能,即可实现。
具体指令集参考如下:
灯光效果演示:
本次收到是方案板是半成品,包括软硬件。硬件用开发板搭建,听说原厂硬件已经绘制好了,可以自行打样(然而没有给我打样版本...)。据原厂工程师说这两个板子可以实现键盘的基本功能🐶
灯光效果专门找了一块CH555作为主控的DEMO板进行演示。
效果图如下:
无线连接:
①BLE连接
接下来使用CH555控制CH582通过串口(预留SPI)实现无线HID控制传输。
CH555通过串口1映射(P1.6/P1.7)(115200),发送控制命令;
CH582通过串口1映射(PB12/PB13)(115200),接收上位机控制命令。通过串口0(PB7)(921600)观察调试结果。
具体接线如下:
CH555 - CH582:P1.6(RXD1_) - PB13;P1.7(TXD_1) - PB12
测试BLE的功能,测试连接和键值A的发送。
发送以下指令:
/*实际使用时需要判断每一条指令发送后的返回值是否符合标准。
符合标准则发送下一条指令,否则重新发送上条指令。
以下仅进行简单功能验证参考。*/
UART1_SendStr(CMD_reload, (UINT8)sizeof(CMD_reload)); //恢复出厂
mDelaymS(20);
UART1_SendStr(CMD_clrpair, (UINT8)sizeof(CMD_clrpair)); //清除配对信息
mDelaymS(20);
UART1_SendStr(CMD_free, (UINT8)sizeof(CMD_free)); //模组切换到空闲状态
mDelaymS(20);
UART1_SendStr(CMD_ble_1, (UINT8)sizeof(CMD_ble_1)); //模组切换到蓝牙设备1
mDelaymS(20);
UART1_SendStr(CMD_pair, (UINT8)sizeof(CMD_pair)); //进入配对模式
mDelaymS(00);
UART1_SendStr(CMD_adc, (UINT8)sizeof(CMD_adc)); //模组采集电量,返回电压值
mDelaymS(1000);
while(1){
mDelaymS(1000);
UART1_SendStr(CMD_kbd_bit_a, (UINT8)sizeof(CMD_kbd_bit_a)); //发送全键盘的按键A
mDelaymS(2);
UART1_SendStr(CMD_kbd_bit_releas, (UINT8)sizeof(CMD_kbd_bit_releas)); //发送完成后及时释放
}
使用电脑和手机均可连接并可以接收到数据。
②2.4G连接
接下来测试2.4G功能和传输的速度。
传输的指令跟BLE基本类似:
void main(void)
{
CfgFsys();
mDelaymS(20);
mInitSTDIO(); /* 为了让计算机通过串口监控演示过程 */
CH555UART0Alter(); //串口0引脚映射
printf("ID=%02X\n", (UINT16)CHIP_ID);
printf("UART demo start ...\n");
CH555UART1Init(); //串口1初始化
CH555UART1Alter(); //串口1引脚映射
UART1_SendStr(CMD_free, (UINT8)sizeof(CMD_free));
mDelaymS(20);
UART1_SendStr(CMD_rf, (UINT8)sizeof(CMD_rf));
mDelaymS(20);
UART1_SendStr(CMD_adc, (UINT8)sizeof(CMD_adc));
mDelaymS(1000);
while(1){
mDelayuS(400);
UART1_SendStr(CMD_kbd_bit_a, (UINT8)sizeof(CMD_kbd_bit_a));
mDelayuS(400);
UART1_SendStr(CMD_kbd_bit_releas, (UINT8)sizeof(CMD_kbd_bit_releas));
mDelayuS(400);
UART1_SendStr(CMD_kbd_bit_s, (UINT8)sizeof(CMD_kbd_bit_s));
mDelayuS(400);
UART1_SendStr(CMD_kbd_bit_releas, (UINT8)sizeof(CMD_kbd_bit_releas));
}
while(1){
};
}
同时另外拿了一块板子烧录Dongle代码。
烧录后将Dongle后上电即可建立连接(注意主机非睡眠状态,连接的时候保持醒来)。
建立连接后通过2.4G发送数据,每隔400us上传一个键值。键值上传到Dongle后再通过USB传给主机。实测可以达到1KHz的速率。
如下图使用沁恒的USB分析仪抓包可以看到对应的速度。
功耗测试:
功耗测试因为手上只有开发板,无法直接测试,因此直接借用官方的测试结果。
①BLE功耗:
测试项目 测试模式 |
广播平均功耗(mA) | 工作平均功耗(mA) | 快速发键功耗(mA) | 长按单键功耗(mA) | 低功耗休眠(uA) | 深度休眠(uA) | |
B L E |
模组1 | 7.48-7.52 | 8.12-8.13 | 8.14-8.18 | 8.15-8.17 | 149.12-165.39 | 6.38-7.42 |
模组2 | 7.42-7.43 | 8.10-8.13 | 8.22-8.23 | 8.17-8.18 | 144.73-166.82 | 6.53-6.74 | |
模组3 | 7.44-7.45 | 8.12-8.13 | 8.15-8.21 | 8.16-8.18 | 150.14-171.63 | 6.41-6.51 |
②2.4G功耗:
测试项目 测试模式 |
2.4G未连接功耗(mA) | 2.4G配对阶段功耗(mA) | 2.4G连接后正常使用功耗(mA) | 快速发键功耗(mA) | 长按单键功耗(mA) | 低功耗休眠(uA) | 深度休眠(uA) | |
2.4G |
模组1 | 6.92-6.93 | 17.85-17.86 | 11.71-11.76 | 11.42-11.43 | 11.46-11.51 | 143.27-144.95 | 5.57-5.62 |
模组2 | 6.91-6.97 | 17.63-17.88 | 11.66-11.72 | 11.47-11.51 | 11.37-11.47 | 143.88-144.09 | 5.46-5.60 | |
模组3 | 6.91-6.94 | 17.85-17.87 | 11.54-11.56 | 11.47-11.48 | 11.45-11.48 | 144.11-145.29 | 5.32-5.67 |
总结:
上面对基础功能进行了测试,主要围绕键盘最基本的功能,灯光配置/功耗配置/上报率等,听原厂工程师提到还有上位机工具可以diy键盘的配置功能,接下来进行尝试再测试看看效果。
目前整体的测试效果还是比较满意的,上报率达到1KHz正好符合笔者的电竞需求,配上RGB灯光加持,已经迫不及待看到成品了!