Solution: Multi-mode Mouse¶
重要
此例程仅存在于特殊版本的SDK中,如有需要请联系Panchip。
1.1 概述¶
本文主要介绍PAN1080 鼠标解决方案的设计,方案主体包含发送端与接收端两部分,其中接收端仅为rf模式服务,发送端可以根据实际使用选择BLE模式/2.4G私有模式/USB模式进行交互,其中:
BLE模式下仅蓝牙工作,交互对象可以是PC或其他支持蓝牙的设备。
2.4G私有模式仅private rf工作,接收端为usb dongle,接收端需设置为相同工作频点,rf接收数据并上报给usb发送。
USB模式仅SOC自带usb模块工作。
1.2 系统框图¶
1.2.1 软件工作流程:¶
其中组包模块包含一个1ms的定时器,用于定时采集sensor/qdec/kscan的实时数据并完成鼠标数据包组包操作,最后将数据发送给收发模块的发送端。
其中收发模块中BLE模式的发送端收到软件给出的数据,判别BLE连接状态,在连接时将数据发送给接收端,否则进行其他异常处理,BLE模式下接收端为pc或者支持蓝牙的设备。
其中收发模块中2.4G私有模式的发送端收到软件给出的数据并发送给dongle端,dongle端收到数据并回复ack数据包给发送端,dongle端跳频,发送端收到数据后跳频。若未回复,发送端进行重传,其中2.4G私有模式下接收端仅为usb dongle。
其中收发模块中USB模式的发送端收到软件给出的数据并在下一个usb sof开始发送,其中USB模式下接收端为pc或者其他host设备。
1.3 硬件环境¶
PAN1080 EVB板子两个,其中一个作为发送端,一个接收端(dongle)
P30_UART0_TX、P31_UART0_RX (uart0 log打印)
P46_SWD_CLK、P47_SWD_DAT (swd下载口)
USB:P02_USB_DM、P03_USB_DP,其中usb线对应关系如下
红线:电源正极(接线上的标识为:+5V或VCC)
白线:DM数据线(标识为:Data-或USB Port -)
绿线:DP数据线(标识为:Data+或USB Port +)
黑线:接地(标识为:GROUND或GND)
Secure CRT(串口打印窗口)
带BLE功能电脑
usb抓包工具,bushound 或者usbmonitor
上报率测试工具,MouseTest.exe(仅部分电脑可以达到上报率1KHz)
逻辑分析仪
1.4 软件环境¶
测试源文件目录
鼠标发送端:..\BLE-Group\PAN1080\pan1080-dk-internal\01_SDK\zephyr\samples_panchip\solutions\model_mouse
接收端:..\BLE-Group\PAN1080\pan1080-dk-internal\01_SDK\zephyr\samples_panchip\solutions\usb_dongle
1.5 软件功能点¶
功能点描述 |
工作模式 |
备注 |
---|---|---|
BLE-USB模式鼠标常规功能 |
ble-usb mode |
此模式下BLE模块和USB模块均打开,2.4G模块不工作,可切换模式,需要鼠标外围如sensor等支持 |
2.4G-USB模式鼠标常规功能 |
rf-usb mode |
此模式下2.4G模块和USB模块均打开,BLE模块不工作,可切换模式,需要鼠标外围如sensor等支持 |
2.4G-ONLY上报率 |
rf-only in band mode |
此模式下仅2.4G模块打开,BLE模块和USB模块不工作,鼠标上报固定画圈数据 |
USB-ONLY上报率 |
usb-only mode |
此模式下仅USB模块打开,BLE模块和2.4G模块不工作,鼠标上报固定画圈数据 |
BLE-ONLY上报率 |
ble-only mode |
此模式下仅BLE模块打开,USB模块和2.4G模块不工作,鼠标上报固定画圈数据 |
2.4G 私有模式重传功能 |
rf-enhance in band mode |
需要鼠标外围如sensor等支持,测试模式已支持 |
2.4G 私有模式跳频功能 |
rf-freq-hop in band mode |
需要鼠标外围如sensor等支持,测试模式已支持 |
电池电量检测 |
ble-usb mode或者rf-usb mode |
需要外围电路支持 |
模式切换 |
ble-usb mode或者rf-usb mode |
需要鼠标外围如sensor等支持 |
RGB呼吸灯(扩展) |
暂不支持 |
暂不支持 |
1.6 性能指标¶
支持有线最大1KHz上报率,2.4G 1KHz,蓝牙130Hz。
通信距离(待定)
1.7 测试用例¶
1.7.1 编译命令¶
mouse端编译下载命令:
mouse ble-usb mode:
脚本位置: .\sdk_quick_build_samples\solutions\model_mouse_ble_usb.bat
说明: 此case下ble lib使能,case在拔出usb后通过ble发送数据并在PC上显示鼠标操作,插入usb时关闭ble扫描并通过usb发送数据。此case需要鼠标sensor等器件支持。
mouse rf-usb mode:
脚本位置: .\sdk_quick_build_samples\solutions\model_mouse_prf_usb.bat
说明: 此case下rf lib使能,case在拔出usb时通过rf发送数据并在PC上显示鼠标操作,插入usb时关闭rf发送流程并通过usb发送数据。此case需要鼠标sensor等器件支持。
mouse rf-only in band mode:
脚本位置: .\sdk_quick_build_samples\solutions\model_mouse_prf_only.bat
说明: 此case下rf lib使能,仅rf工作发送数据,rf工作在带内,发送固定画圈数据。此case作为测试case固定画圈。
mouse usb-only mode:
脚本位置: .\sdk_quick_build_samples\solutions\model_mouse_usb_only.bat
说明: 此case下无lib使能,发送固定画圈数据。此case作为测试case固定画圈。
mouse ble-only mode:
脚本位置: .\sdk_quick_build_samples\solutions\model_mouse_ble_only.bat
说明: 此case下ble lib使能,发送固定画圈数据。此case作为测试case固定画圈。
mouse rf-enhance in band mode:
脚本位置: .\sdk_quick_build_samples\solutions\model_mouse_prf_enhance.bat
说明: 此case下,rf使用enhance模式并在1ms内出现无应答时重传。此case作为测试case固定画圈。
mouse rf-freq-hop in band mode:
脚本位置: .\sdk_quick_build_samples\solutions\model_mouse_prf_freq_hop.bat
说明: 此case下,rf使用enhance模式并在1ms内出现无应答时重传,1ms跳频一次。此case作为测试case固定画圈。
dongle端编译命令:
mouse rf-only normal mode:
脚本位置: .\sdk_quick_build_samples\solutions\usb_dongle.bat
说明: 此case下仅rf工作接收数据,rf工作在带内,rf接收数据发送给usb。
mouse rf-only in band mode:
脚本位置: .\sdk_quick_build_samples\solutions\usb_dongle_prf_retransmission.bat
说明: 此case下仅测试模式专用,rf工作接收数据,rf工作在带内,rf判断接收数据得第一byte是否于前一包数据的id一致,一致则不发送给usb。
mouse rf-enhance in band mode:
脚本位置: .\sdk_quick_build_samples\solutions\usb_dongle_prf_enhance.bat
说明: 此case下rf收到数据后上报给usb端并给tx端发送ack包,不切换频率。
mouse rf-freq-hop in band mode:
脚本位置: .\sdk_quick_build_samples\solutions\usb_dongle_prf_freq_hop.bat
说明: 此case下rf收到数据后上报给usb端并给tx端发送ack包,同时切换频率。
1.7.2 测试case¶
1.7.3 ble-usb模式鼠标基础功能及上报率¶
测试流程
执行鼠标端mouse ble-usb mode编译命令,下载程序。
鼠标端断开usb,进入ble模式,开始广播,同时观察是否触发usb plug out中断。
打开电脑“开始->设置->设备->蓝牙和其他设备->添加蓝牙和其他设备”,找寻设备名称为pan ble mouse的蓝牙设备,点击连接。或者打开nrfConnect app搜寻pan ble mouse设备,连接此设备,至配对成功。
打开MouseTest.exe工具,移动鼠标,测试ble模式下上报率
鼠标端插入usb,进入usb模式,可以观察是否触发usb plug in中断,同时搜寻ble广播设备是否已经没有名称为pan ble mouse的蓝牙设备。
打开MouseTest.exe工具,移动鼠标,测试usb模式下上报率。
多次循环执行usb插拔以测试能否正确识别是何种模式生效。
测试结果
断开usb,ble模式使用Mouse Test工具观测上报率,最大上报率约为130Hz
插入usb,上报率为1KHz
循环插拔usb,可切换模式
1.7.4 rf-usb模式鼠标基础功能及上报率¶
测试流程
执行鼠标端mouse rf-only in band mode编译命令,下载程序。
执行dongle端mouse rf-only normal mode编译命令,下载程序。
鼠标端断开usb,进入2.4G私有模式,同时观察是否触发usb plug out中断。
打开MouseTest.exe工具,移动鼠标,测试2.4G私有模式下上报率。
鼠标端插入usb,进入usb模式,可以观察是否触发usb plug in中断。
打开MouseTest.exe工具,移动鼠标,测试usb模式下上报率。
多次循环执行usb插拔以测试能否正确识别是何种模式生效。
测试结果
断开usb,rf模式使用特定电脑上(实验室台式机)的Mouse Test工具观测上报率,最大上报率约为998Hz
插入usb,上报率为1KHz
循环插拔usb,可切换模式
1.7.5 rf-only带内测试模式上报率¶
测试流程
执行鼠标端mouse rf-only in band mode编译命令,下载程序。
执行dongle端mouse rf-only in band mode编译命令,下载程序。
发送端按住复位不释放,dongle端USB插入等待设备在pc设备管理器上显示。
dongle 端复位,释放发送端reset,这里主要是需要等待dongle端的usb完成初始化,避免被rf中断打断。
打开bushound或者Mouse Test工具,测试上报率情况。
测试tx发送两次数据需要的时间(扩展,需要修改代码,用逻辑分析仪抓取时间间隔)。
扩展测试代码添加
在..\modules\hal\panchip\panplat\pan1080\prf\src\comm_prf.c中,panchip_prf_init函数中打开注释代码
#if 1 // o_pp_phy_drv_ll_rx_phy_en PRI_RF_WRITE_REG_VALUE(PRI_RF, TEST_MUX02, TST_MUX_SELECT_09, 0x32); SYS->P2_MFP |= SYS_MFP_P21_LL_DBG09; // o_pp_phy_drv_ll_tx_phy_en PRI_RF_WRITE_REG_VALUE(PRI_RF, TEST_MUX02, TST_MUX_SELECT_10, 0x31); SYS->P0_MFP |= SYS_MFP_P04_LL_DBG10; // pp_acc_addr_match PRI_RF_WRITE_REG_VALUE(PRI_RF, TEST_MUX02, TST_MUX_SELECT_08, 0x33); SYS->P2_MFP |= SYS_MFP_P20_LL_DBG08; // i_phy_drv_ll_rx_clk PRI_RF_WRITE_REG_VALUE(PRI_RF, TEST_MUX03, TST_MUX_SELECT_12, 0x35); SYS->P2_MFP |= SYS_MFP_P26_LL_DBG12; // i_phy_drv_ll_rx_data PRI_RF_WRITE_REG_VALUE(PRI_RF, TEST_MUX03, TST_MUX_SELECT_13, 0x34); SYS->P1_MFP |= SYS_MFP_P16_LL_DBG13; #endif
编译后逻辑分析仪抓取时间间隔
测试结果
rf模式使用特定电脑上(实验室台式机)的Mouse Test工具观测上报率,最大上报率约为1KHz
两次发送的时间总耗时约为400us
$$ 单次发送时间 = pre_tx + tx + post_tx $$
$$ 两次发送时间 = 单次发送时间 * 2 + software_delay(上图中两次高电平中的低电平时间,软件设置为160us,可缩短) $$
1.7.6 usb-only模式鼠标上报率¶
测试流程
执行鼠标端mouse usb-only mode编译命令,下载程序。
鼠标端断开usb,观察是否触发usb plug out中断。
鼠标端插入usb,观察是否触发usb plug in中断。
将GPIO P23杜邦线接地,先不让usb上报数据。
GPIO P23杜邦线接高电平,打开MouseTest.exe工具,测试usb模式下上报率。
多次循环执行usb插拔以测试能否正确识别USB。
将GPIO P23杜邦线接地,等待电脑灭屏。
在串口显示USB isr in: Suspend evt信息后,拉高P23,观察电脑是否亮屏并自动画圈。
多次执行步骤7,8,观察是否每次都能亮屏画圈。
测试结果
断开usb,鼠标不动作,触发plug out中断。
插入usb,触发plug in中断,最大上报率为1KHz。
循环插拔usb,可正确识别usb设备。
1.7.7 ble-only模式鼠标上报率¶
测试流程
执行鼠标端mouse ble-only mode编译命令,下载程序。
打开电脑“开始->设置->设备->蓝牙和其他设备->添加蓝牙和其他设备”,找寻设备名称为pan ble mouse的蓝牙设备,点击连接。或者打开nrfConnect app搜寻pan ble mouse设备,连接此设备,至配对成功。
打开MouseTest.exe工具,测试ble模式下上报率。
测试结果
断开usb,鼠标不动作,触发plug out中断。
插入usb,触发plug in中断,最大上报率为135Hz
循环插拔usb,可正确识别usb设备。
1.7.8 rf-enhance模式带重传跳频的上报率¶
测试流程
执行鼠标端mouse rf-freq-hop in band mode编译命令,下载程序。
执行dongle端mouse rf-freq-hop in band mode编译命令,下载程序。
发送端按住复位不释放,dongle 端复位,再释放发送端reset,这里主要是需要等待dongle端的usb完成初始化,避免被rf中断打断。
打开bushound或者Mouse Test工具测试上报率情况。
测试是否能在1ms内重传完成。
测试跳频机制是否正常。测试case中tx端每间隔1ms改变一次频点,如果在1ms内发送一次数据后未正常收到ack,那么此时频点不改变,同时再次发送与第一次发送的数据相同的包,收到ack后跳频。rx端在接收数据并发送完成数据后改变频率。
测试结果
此模式为带重传跳频机制的上报,在mouse test工具上最大上报率约为1KHz
跳频重传功能正常
上图中00为发送端的tx,01为发送端rx,02为接收端tx,03为接收端rx,从图中可见发送端的第三个波形在第一次发送时没有ack发出,rx在异常后,tx发送端在很短时间内紧接着又发送了一次数据(数据相同,因为未对发送数据作重新载入)并成功接收了数据,第二包数据发送时tx和rx的频点均未发生改变,及至下一次发送时频点才发生改变。