当前文档版本为v0.3.0,您可以访问 开发中 的文档以获取最近可能的更新。

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 系统框图

image

1.2.1 软件工作流程:

image

  • 其中组包模块包含一个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 硬件环境

  1. PAN1080 EVB板子两个,其中一个作为发送端,一个接收端(dongle)

    • P30_UART0_TX、P31_UART0_RX (uart0 log打印)

    • P46_SWD_CLK、P47_SWD_DAT (swd下载口)

  2. USB:P02_USB_DM、P03_USB_DP,其中usb线对应关系如下

    • 红线:电源正极(接线上的标识为:+5V或VCC)

    • 白线:DM数据线(标识为:Data-或USB Port -)

    • 绿线:DP数据线(标识为:Data+或USB Port +)

    • 黑线:接地(标识为:GROUND或GND)

  3. Secure CRT(串口打印窗口)

  4. 带BLE功能电脑

  5. usb抓包工具,bushound 或者usbmonitor

  6. 上报率测试工具,MouseTest.exe(仅部分电脑可以达到上报率1KHz)

  7. 逻辑分析仪

1.4 软件环境

  1. 测试源文件目录

    • 鼠标发送端:..\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 性能指标

  1. 支持有线最大1KHz上报率,2.4G 1KHz,蓝牙130Hz。

  2. 通信距离(待定)

1.7 测试用例

1.7.1 编译命令

mouse端编译下载命令

  1. 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等器件支持。

  2. 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等器件支持。

  3. mouse rf-only in band mode:

    脚本位置:
    .\sdk_quick_build_samples\solutions\model_mouse_prf_only.bat
    

    说明: 此case下rf lib使能,仅rf工作发送数据,rf工作在带内,发送固定画圈数据。此case作为测试case固定画圈。

  4. mouse usb-only mode:

    脚本位置:
    .\sdk_quick_build_samples\solutions\model_mouse_usb_only.bat
    

    说明: 此case下无lib使能,发送固定画圈数据。此case作为测试case固定画圈。

  5. mouse ble-only mode:

    脚本位置:
    .\sdk_quick_build_samples\solutions\model_mouse_ble_only.bat
    

    说明: 此case下ble lib使能,发送固定画圈数据。此case作为测试case固定画圈。

  6. mouse rf-enhance in band mode:

    脚本位置:
    .\sdk_quick_build_samples\solutions\model_mouse_prf_enhance.bat
    

    说明: 此case下,rf使用enhance模式并在1ms内出现无应答时重传。此case作为测试case固定画圈。

  7. 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端编译命令:

  1. mouse rf-only normal mode:

    脚本位置:
    .\sdk_quick_build_samples\solutions\usb_dongle.bat
    

    说明: 此case下仅rf工作接收数据,rf工作在带内,rf接收数据发送给usb。

  2. mouse rf-only in band mode:

    脚本位置:
    .\sdk_quick_build_samples\solutions\usb_dongle_prf_retransmission.bat
    

    说明: 此case下仅测试模式专用,rf工作接收数据,rf工作在带内,rf判断接收数据得第一byte是否于前一包数据的id一致,一致则不发送给usb。

  3. mouse rf-enhance in band mode:

    脚本位置:
    .\sdk_quick_build_samples\solutions\usb_dongle_prf_enhance.bat
    

    说明: 此case下rf收到数据后上报给usb端并给tx端发送ack包,不切换频率。

  4. 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模式鼠标基础功能及上报率

测试流程

  1. 执行鼠标端mouse ble-usb mode编译命令,下载程序。

  2. 鼠标端断开usb,进入ble模式,开始广播,同时观察是否触发usb plug out中断。

  3. 打开电脑“开始->设置->设备->蓝牙和其他设备->添加蓝牙和其他设备”,找寻设备名称为pan ble mouse的蓝牙设备,点击连接。或者打开nrfConnect app搜寻pan ble mouse设备,连接此设备,至配对成功。

  4. 打开MouseTest.exe工具,移动鼠标,测试ble模式下上报率

  5. 鼠标端插入usb,进入usb模式,可以观察是否触发usb plug in中断,同时搜寻ble广播设备是否已经没有名称为pan ble mouse的蓝牙设备。

  6. 打开MouseTest.exe工具,移动鼠标,测试usb模式下上报率。

  7. 多次循环执行usb插拔以测试能否正确识别是何种模式生效。

测试结果

  1. 断开usb,ble模式使用Mouse Test工具观测上报率,最大上报率约为130Hz

  2. 插入usb,上报率为1KHz

  3. image

  4. 循环插拔usb,可切换模式

1.7.4 rf-usb模式鼠标基础功能及上报率

测试流程

  1. 执行鼠标端mouse rf-only in band mode编译命令,下载程序。

  2. 执行dongle端mouse rf-only normal mode编译命令,下载程序。

  3. 鼠标端断开usb,进入2.4G私有模式,同时观察是否触发usb plug out中断。

  4. 打开MouseTest.exe工具,移动鼠标,测试2.4G私有模式下上报率。

  5. 鼠标端插入usb,进入usb模式,可以观察是否触发usb plug in中断。

  6. 打开MouseTest.exe工具,移动鼠标,测试usb模式下上报率。

  7. 多次循环执行usb插拔以测试能否正确识别是何种模式生效。

测试结果

  1. 断开usb,rf模式使用特定电脑上(实验室台式机)的Mouse Test工具观测上报率,最大上报率约为998Hz

  2. image

  3. 插入usb,上报率为1KHz

  4. 循环插拔usb,可切换模式

1.7.5 rf-only带内测试模式上报率

测试流程

  1. 执行鼠标端mouse rf-only in band mode编译命令,下载程序。

  2. 执行dongle端mouse rf-only in band mode编译命令,下载程序。

  3. 发送端按住复位不释放,dongle端USB插入等待设备在pc设备管理器上显示。

  4. dongle 端复位,释放发送端reset,这里主要是需要等待dongle端的usb完成初始化,避免被rf中断打断。

  5. 打开bushound或者Mouse Test工具,测试上报率情况。

  6. 测试tx发送两次数据需要的时间(扩展,需要修改代码,用逻辑分析仪抓取时间间隔)。

扩展测试代码添加

  1. 在..\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
    
  2. 编译后逻辑分析仪抓取时间间隔

测试结果

  1. rf模式使用特定电脑上(实验室台式机)的Mouse Test工具观测上报率,最大上报率约为1KHz

  2. 两次发送的时间总耗时约为400us

  3. image

$$ 单次发送时间 = pre_tx + tx + post_tx $$

$$ 两次发送时间 = 单次发送时间 * 2 + software_delay(上图中两次高电平中的低电平时间,软件设置为160us,可缩短) $$

1.7.6 usb-only模式鼠标上报率

测试流程

  1. 执行鼠标端mouse usb-only mode编译命令,下载程序。

  2. 鼠标端断开usb,观察是否触发usb plug out中断。

  3. 鼠标端插入usb,观察是否触发usb plug in中断。

  4. 将GPIO P23杜邦线接地,先不让usb上报数据。

  5. GPIO P23杜邦线接高电平,打开MouseTest.exe工具,测试usb模式下上报率。

  6. 多次循环执行usb插拔以测试能否正确识别USB。

  7. 将GPIO P23杜邦线接地,等待电脑灭屏。

  8. 在串口显示USB isr in: Suspend evt信息后,拉高P23,观察电脑是否亮屏并自动画圈。

  9. 多次执行步骤7,8,观察是否每次都能亮屏画圈。

测试结果

  1. 断开usb,鼠标不动作,触发plug out中断。

  2. 插入usb,触发plug in中断,最大上报率为1KHz。

  3. 循环插拔usb,可正确识别usb设备。

1.7.7 ble-only模式鼠标上报率

测试流程

  1. 执行鼠标端mouse ble-only mode编译命令,下载程序。

  2. 打开电脑“开始->设置->设备->蓝牙和其他设备->添加蓝牙和其他设备”,找寻设备名称为pan ble mouse的蓝牙设备,点击连接。或者打开nrfConnect app搜寻pan ble mouse设备,连接此设备,至配对成功。

  3. 打开MouseTest.exe工具,测试ble模式下上报率。

测试结果

  1. 断开usb,鼠标不动作,触发plug out中断。

  2. 插入usb,触发plug in中断,最大上报率为135Hz

  3. image

  4. 循环插拔usb,可正确识别usb设备。

1.7.8 rf-enhance模式带重传跳频的上报率

测试流程

  1. 执行鼠标端mouse rf-freq-hop in band mode编译命令,下载程序。

  2. 执行dongle端mouse rf-freq-hop in band mode编译命令,下载程序。

  3. 发送端按住复位不释放,dongle 端复位,再释放发送端reset,这里主要是需要等待dongle端的usb完成初始化,避免被rf中断打断。

  4. 打开bushound或者Mouse Test工具测试上报率情况。

  5. 测试是否能在1ms内重传完成。

  6. 测试跳频机制是否正常。测试case中tx端每间隔1ms改变一次频点,如果在1ms内发送一次数据后未正常收到ack,那么此时频点不改变,同时再次发送与第一次发送的数据相同的包,收到ack后跳频。rx端在接收数据并发送完成数据后改变频率。

测试结果

  1. 此模式为带重传跳频机制的上报,在mouse test工具上最大上报率约为1KHz

  2. 跳频重传功能正常

  3. image

上图中00为发送端的tx,01为发送端rx,02为接收端tx,03为接收端rx,从图中可见发送端的第三个波形在第一次发送时没有ack发出,rx在异常后,tx发送端在很短时间内紧接着又发送了一次数据(数据相同,因为未对发送数据作重新载入)并成功接收了数据,第二包数据发送时tx和rx的频点均未发生改变,及至下一次发送时频点才发生改变。