BLE跳频机制在2.4G键鼠中的应用

目录

WCH的键鼠方案中,1K/8K方案均包含了稳定有效的2.4G跳频方案。

接下来通过几个问答,引入沁恒键鼠方案中2.4G跳频机制的说明。

 

问①:如何检测当前环境中的信道拥堵情况?

答①:BLE协议中,这项工作主要交给BLE主机;2.4G方案中则交给dongle接收头来完成。沁恒的2.4G库中封装了API,以2MHz为间隔,扫描2.4G频段的信道能量,输出良好信道频谱数组。扫描一轮40个信道,需要3~4ms,可分组扫描不必一次扫完。

信道扫描接口:

/*先声明,再使用*/
/*******************************************************************************
 * @fn          BLE_CheckHoppingMap
 *
 * @brief
 *
 * input parameters
 *
 * @param       rssi -  干扰信息阈值.
 *              map - bit0-bit39 1-表示通道有效,即需要检测的通道
 *
 * output parameters
 *
 * @param       map - bit0-bit39 1-表示通道无大于设定阈值rssi的干扰信息
 *
 * @return      None.
 */
int8_t  BLE_CheckHoppingMap( int8_t rssi, uint8_t map[] ) 





//测试代码块:
    {
        extern  int8_t  BLE_CheckHoppingMap( int8_t rssi, uint8_t map[] );

        // 需要检测的通道,bit0-bit39 1-表示通道有效,即需要检测的通道
        uint8_t  map[5] = {0xFF,0XFF,0XFF,0XFF,0XFF};

        // -85 为设定的干扰信号阈值,即检测能量大于-85认为有干扰信息
        BLE_CheckHoppingMap( -85, map );
        for(int i=0;i<5;i++ )
        {
            for(int j=0;j<8;j++ )
            {
                if( map[i]&(1<<j) )
                {
                    PRINT("channel %d ok\n",(i*8 + j));
                }
                else
                {
                    PRINT("channel %d bad\n",(i*8 + j));
                }
            }
        }
        PRINT("\n");
    }

/*
输出结果
channel 0 ok
channel`1`ok
channel 2 ok
channel 3 ok
channel`4 ok
channel 5 ok
channel 6 ok
channel`7 ok
channel 8 ok
channel 9 ok
channel 10 ok
channel 11 ok
channel 12`ok
channel 13 ok
channel 14 bad
channel 15 bad
channel 16`bad
channel`17 bad
channel 18 bad
channel 19 ok
channel 20 ok
channel 21 ok
channel`22`ok
channel 23 ok
channel 24 ok
channel 25 ok
channel 26 ok
channel 27`ok
channel 28 ok
channel 29 ok
channel`30 ok
channel 31 ok
channel 32 ok
channel 33 ok
channel`34 ok
channel 35 ok
channel 36 ok
channel 37`ok
channel 38 ok
channel`39 ok
*/
View Code

 

问②:如何实现信道拥堵情况的实时监控?

答②:在使用当前已同步的良好信道频谱通信OK时,dongle不会主动扫描信道。

若每次跳频轮到某个信道,都会产生连续丢包,接连发生3轮,则dongle判断当前使用的信道频谱被污染,需要重新扫描一轮信道。

以8K方案为例,每1ms跳频一次,每次在某个信道通信,除了交互键鼠键值,至少会产生一次心跳包交互,可用于判断信道是否拥堵。

 

问③:如何同步良好信道频谱?

答③:信道同步发生在2个时间点。

一是在dongle上电后,配对/连接握手前,会扫描获得良好信道,在dongle与键鼠连接时做同步。

二是问题②中,dongle检测到信道污染,扫描获得新一组良好信道后,根据已被污染的信道的通信情况——

若双方仍能按已被污染的信道跳频交互,dongle会发起新信道的同步;

若污染严重,在已污染信道频谱中无法同步新信道,待断连后重连时做同步。

 

bfd62ef496856fd6dd13406c7b6a744c

 

关于跳频算法:
BLE的跳频机制已经十分成熟,沁恒的2.4G跳频算法直接参考了BLE5.0协议。

image

 

问①:hop_Inc跳频信道增量有什么作用?
答①:BLE单个信道宽度为2M,可以根据hop_Inc参数推算出大致的跳频宽度。hop_Inc取值范围:5~16。已知当前信道+已知hop_Inc,可以推算下一个频点的位置。

问②:已经扫描到良好信道后,直接在良好信道中逐个跳频通信可以吗?
答②:扫描到的良好信道中,会存在相邻信道。突发例如wifi信道宽度达20MHz的干扰时,逐个跳频可能会导致连续多次跳频通信失败。
 
问③:为什么需要两次取模运算?直接在良好信道中取模运算一次不就可以得到下一信道?
答③:两次取模起到“全局随机+局部过滤”的作用。
如果仅在全局信道中取模运算,能保证跳频信道的均匀分布,但跳频到不良信道时,易丢包。
如果仅在良好信道中取模运算,能保证通信质量,但当良好信道数量和跳频增量间存在倍数关系时,比如当良好信道数量为3n,跳频增量为n时,那么只会在3n个信道中的3个信道间跳频,信道利用效率低,易被跟踪。
posted @ 2026-03-25 19:18  JayWell  阅读(2)  评论(0)    收藏  举报