6626 可以实现2.4G和BLE共存。 实现上面,可以通过RF事件回调,合理控制2.4G 的开启和关闭,实现在BLE空闲时间,做2.4G 的接收和发送事务处理。 如下代码中 bb_frame_handle() 为RF事件的回调函数,在此通过翻IO口,结合TxEN和RxEN信号,可以观察时序 (1)参考代码 void bb_frame_handle(bool ongoing) { if (ongoing) { //GPIO 10 输出高 drv_gpio_write(OM_GPIO0, BITMASK(PAD_LED_2), GPIO_LEVEL_HIGH); } else { //GPIO 10 输出低 drv_gpio_write(OM_GPIO0, BITMASK(PAD_LED_2), GPIO_LEVEL_LOW); } } /******************************************************************************* * PUBLIC FUNCTIONS */ __RAM_CODES("APP") int main(void) { struct ob_stack_param param = { .max_connection = OB_LE_HOST_CONNECTION_NB, .max_ext_adv_set = OB_LE_HOST_ADV_SET_NUM, .max_att_mtu = OB_LE_HOST_ATT_MTU, .max_gatt_serv_num = OB_LE_HOST_MAX_GATT_SERV_NUM, .max_gatt_write_cache = OB_LE_HOST_ATT_WRITE_CACHE_SIZE, .smp_sc_support = OB_LE_HOST_SC_PAIRING, }; drv_wdt_init(0); board_init(); hardware_init(); drv_rf_init(); evt_init(); evt_timer_init(); shell_init(NULL); nvds_init(0); extern void ebh_smp_fsm_config_per_sc(void); ebh_smp_fsm_config_per_sc(); omble_init(¶m); // drv_rf_txrx_pin_enable(true, 0); //TxEN RxEN使能 obc_bb_frame_ongoing_callback_register(bb_frame_handle); //注册RF事件回调 drv_pmu_xtal32m_change_param(36); (2)BLE广播过程中, bb_frame_ongoing 翻转IO,如下图,可以黄线拉低区间,安排 2.4G 的接收和发送。 每次BLE广播前后,bb_frame_handle 都会触发1次,前后共2次。 bb_frame_handle 触发的提前时间
(3)BLE连接过程中,bb_frame_handle 每在每次连接事件前后都触发1次,前后共2次。在每2次触后的一段时间内,可以安排2.4G收发事务。 bb_frame_handle 触发的提前时间 (4)如果实现2.4G切换控制, 实现参考代码如下。实际项目规划时序时,除了RF工作标志,最好还需要结合系统时间,实现2.4G RF 双向的时序匹配。 char rf_work_flag = 0; //0-2.4G 1-BLE,应用代码据此标志处理RF收发事务 void bb_frame_handle(bool is_ongoing) { if (is_ongoing) { rf_work_flag = 1; //BLE 功能 // 关闭2.4G 功能,此时跑BLE收发功能 om24g_control(OM24G_CONTROL_CLK_DISABLE, NULL); } else { rf_work_flag = 0;//2.4G 功能 // 开启2.4G 功能 drv_pmu_ana_enable(true, PMU_ANA_RF_24G); om24g_control(OM24G_CONTROL_CLK_ENABLE, NULL); //2.4G event handler //drv_evt_set(2p4g_evt) .... } } (5)共存时,优先是BLE,2.4G应用处理最好要做好时序冲突时的规避。 |