键盘项目2.4G模式丢键问题排查
一、2.4G模式键盘的“丢键”,多数是RF断连导致。
在开发过程中,可根据异常比例/规律,排查断连原因,常见的原因有:发射功率偏低(焊接不良、静电损坏天线IO等)、dongle/键盘端的时钟同步异常(代码阻塞运行/操作flash太久太频繁等)。无法杜绝断连的强干扰环境下,为了尽量减少断连对使用者的干扰,键鼠demo中有“缓存键值+回连上报”的机制,断连后快速重试回连并上传缓存的键值,来减小用户感知。
当发生断连,且回连慢时,会发生卡键(如敲击键盘被识别为长按)、丢键(连续快速敲击键盘,次数超过了键盘端的缓存队列长度)的情况。
规避方案:
①键盘/dongle端使用LP库时,参数部分调节,通过减小心跳包间隔的方式来增强对2.4G强阻塞信道的判别灵敏度。代价是键盘的功耗会相应增加一些。
dongle端:将bound.pertime参数调小,越小越好,最小为1,可修改心跳包间隔为2ms一包。配置为1时需要尽量减少打印日志等时间开销。
键盘端:bound.speed参数配置为5。
②当收发包数据量大,单包包长较长时(超过32字节/包)可以分为多个短包,减小长包发送期间被干扰的概率。
③若仍在强干扰环境下发生断连,可以切换到8K库,来减少断连次数(功耗和按键延迟会更高)。
二、若在未发生断连的情况下,也会发生“敲下键盘,电脑未接收到键值”的情况。
此时就需要仔细排查一下键值包传递路径,排查在哪个环节丢包了。
2.4G模式下,键盘键值报表的传递路径:
①键盘键扫程序捕捉到按键按下,生成一串键值报表。
②键盘端通过2.4GRF射频信号发出。
③dongle端收到RF键值报表。
④dongle将RF包转为USB包,上传给电脑。
在中间环节②③处增加打印一些日志,可以帮助排查故障发生在键盘端还是dongle端。
针对②环节:在键盘端的rf_send_data函数中,if( !(pDMATxGet->Status & STA_DMA_ENABLE) )内,输出待发出的RF包内容、待发出RF包的计数;在RF_ProcessCallBack回调函数中,if( sta & RF_STATE_TX_FINISH )内,输出已发出的包数量计数。
针对③环节:在dongle端的RF_ProcessCallBack回调函数中,if( sta & RF_STATE_RX )内,输出已接收到的RF包内容、已接收到的RF包数量。
未发生断连时,键盘/dongle端的RF收发包数量,RF收发包内容应该是一致的。
若②中已发生异常,往DMA中填入的包内容异常,可向前排查键扫功能、DMA缓存是否已满等情况。
若③中未发生异常,可向后排查dongle端的RF转USB包功能是否异常,可以在access_relay_rf_to_usb函数中检查rf_get_data是否正常获取到RF数据,是否误调用rf_delete_data函数导致未来得及转发的键值数据被删除。
浙公网安备 33010602011771号