CH592同時使用藍牙和射頻的問題

我司現(xiàn)在做的一個產(chǎn)品是藍牙和2.4G雙模通訊的,用的是MCU+藍牙芯片+XN297的組合,目前有降成本的壓力,考慮升級換到CH592。我們這個產(chǎn)品的需求是藍牙枚舉為HID鍵盤,2.4G的Dongle也枚舉為HID鍵盤,當(dāng)有數(shù)據(jù)向PC上報時,如果藍牙和2.4G都連接,則同時向藍牙和2.4GDongle發(fā)送按鍵報文。

現(xiàn)在想確認(rèn)CH592一顆芯片是否能完成以上同時發(fā)送的功能?這里指的同時發(fā)送可以接受是異步,比如RF先發(fā),BLE再發(fā),前后幾百毫秒以內(nèi)都是可以的


目前我收集到的信息有:

1、在這篇帖子“在CH579/CH573/CH583/CH32V208/CH32F208 上使用RF_PHY使用 https://www.cnblogs.com/iot-fan/p/14320405.html”

里面提到了RF可以和BLE同時使用a.JPG

? 但是這個RF_PHY的歷程比較簡單,沒有實現(xiàn)設(shè)備和Dongle綁定握手的環(huán)節(jié)


2、在這篇帖子里“ CH582/CH592_EVT中RF_Device(從機)例程詳解_底層自動跳頻管理_支持一對七通訊(兩顆IC可互通)https://www.cnblogs.com/azou/p/18129426”

我下載測試了,確實兩個CH592板子可以綁定并通訊


3、我想要的是在藍牙實現(xiàn)的基礎(chǔ)上也可以調(diào)用RF庫進行綁定并通訊

所以 我測試了在一個BLE的工程中加入RF_device工程中的"libCH59xRF.a"庫和配套的代碼,發(fā)現(xiàn)編譯不過,出現(xiàn)大量報錯,主要是為RF庫和BLE庫中的很多函數(shù)命名系統(tǒng),重復(fù)定義


4、應(yīng)該如何做呢?

貴司是否可以提供一個兼具BLE和RF庫的工程?

若上述工程不能提供,貴司是否可提供綁定流程如何實現(xiàn)的?我可以在Dongle上跑RF_host的工程然后在device上基于RF_PHY工程改一改,兩個能對接上不?

您好,

第1點中博客所演示的程序均可以在CH592EVT包中獲取,鏈接:CH592EVT.ZIP - 南京沁恒微電子股份有限公司 (wch.cn)

BLE文件夾中對應(yīng)的BLE例程為HID_Keyboard,RF例程為RF_PHY(自己做跳頻)/RF_PHY_HOP(跳頻已做好),只需按照博客的說明將兩個工程合并使用,并且自己做好狀態(tài)切換管理(BLE和RF共用的一方,處理會稍復(fù)雜一些,但難度并不高),目前我們還沒有遇到過一起使用的項目需求,因此暫時沒有例程提供,只能您自己先做嘗試。


第2點中的RF獨立庫的做法,不可以與BLE庫存在于同一個工程中,也就是說BLE和RF同時只能跑一個,當(dāng)初開發(fā)這個庫的目的也是為了縮減RF通訊項目的開發(fā)周期,因此給出了一版比較簡單且易于理解使用的demo,但受限于CH592的RAM容量只有26KB,合到一起的話,可用RAM會很少,所以沒有合并在一起,不過最新芯片CH584/CH585已經(jīng)合并到一起了。


我今天繼續(xù)嘗試了一下,我發(fā)現(xiàn)在RF_Device中調(diào)用RF獨立庫的API,其實存在于BLE庫中,所以我嘗試只使用BLE庫進行了編譯,可以編譯通過

在main中進行了如下初始化

??? PRINT("%s\n", VER_LIB);
??? CH59x_BLEInit();
??? HAL_Init();
??? GAPRole_PeripheralInit();
??? HidDev_Init();
??? HidEmu_Init();
??? RF_Init();
??? Main_Circulation();

其中RF_Init直接復(fù)制于RF_Device

void RF_Init(void)
{
??? rfTaskID = TMOS_ProcessEventRegister( RF_ProcessEvent );
??? tmos_memset( gPBound_t, 0, sizeof(gPBound_t) );
??? gPBound_t[BOUND_ID].rssiMax = -127;
??? // 庫初始化
??? RF_LibInit( RF_ProcessCallBack );
??? // 綁定信息初始化
??? InitBoundInfo( );
#if(defined HAL_SLEEP) && (HAL_SLEEP == TRUE)
??? RF_SleepInit();
#else
??? // 定時器初始化,用于演示定時發(fā)送數(shù)據(jù),演示睡眠時不啟用
??? TMR0_TimerInit( (GetSysClock() / RF_TEST_PERIDOC)+1 );
??? TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END); // 開啟中斷
??? PFIC_EnableIRQ(TMR0_IRQn);
#endif

??? PRINT("%s\n",VER_LIB);
??? PRINT("rf mode----------- Device -----------\n");
??? tmos_start_task(rfTaskID, RF_START_BOUND_EVENT,MS1_TO_SYSTEM_TIME(1));
//#if(defined RF_CALIBRATION_ENABLE) && (RF_CALIBRATION_ENABLE == TRUE)
//??? tmos_start_task(rfTaskID, RF_REG_INIT_EVENT, 800); // 添加校準(zhǔn)任務(wù),單次校準(zhǔn)耗時小于10ms
//#endif
}

1、由于校準(zhǔn)在BLE工程中已經(jīng)有執(zhí)行,所以刪除了RF中的校準(zhǔn)任務(wù)

2、且在RF初始化過程中沒有調(diào)用TMOS_Init相關(guān),因為我猜測藍牙在CH59x_BLEInit內(nèi)部應(yīng)該是調(diào)用過TMOS_Init了

3、為TMOS的工作棧增加了1K的空間 改為:#define
BLE_MEMHEAP_SIZE? (1024*7)

4、引出了在#include "CH59xBLE_LIB.h"中為定義的API,但實際上這些API在BLE庫中存在,在頭文件中聲明加入了RF_Device的所有功能API,結(jié)構(gòu)體聲明和庫中函數(shù)聲明

如:

bStatus_t RFRole_LibInit( rfRoleConfig_t *pConf );

bStatus_t RFRole_Shut(void );

bStatus_t RFRole_SetParam( rfRoleParam_t *pConf );

bStatus_t RFBound_StartHost( rfBoundHost_t *pConfig );

bStatus_t RFBound_StartDevice( rfBoundDevice_t *pConfig );


移植以后,雖然RAM占用增多,但是并沒有超過芯片容量,甚至還有3K的剩余空間(足夠我這邊的用戶應(yīng)用使用了)
Memory region???????? Used Size? Region Size? %age Used
?????????? FLASH:????? 169440 B?????? 448 KB???? 36.93%
???????????? RAM:?????? 23092 B??????? 26 KB???? 86.73%
?? text?????? data??????? bss??????? dec??????? hex??? filename
?167964?????? 1476????? 11684???? 181124????? 2c384??? CH592_BLE_HID_RF.elf

所以我認(rèn)為RAM空間應(yīng)該不是什么大問題


但是現(xiàn)在搞完以后,并不能正常工作,應(yīng)該是庫內(nèi)某些資源出現(xiàn)了沖突。

表現(xiàn)為藍牙能廣播但是連不上,RF和host不能綁定通訊。

由于庫是閉源的,我沒法繼續(xù)追蹤故障原因,工程上傳附件了,貴司可以幫忙看看嗎?

@TECH_ZZY

論壇上傳好像有問題 傳到網(wǎng)盤了

鏈接: https://pan.baidu.com/s/1nvvZjnvHSK-AhhPw86dozg?pwd=ithn 提取碼: ithn


不行的,兩個庫文件就算函數(shù)名相同,實際功能是有區(qū)別的


我分別測試了 “RF例程為RF_PHY(自己做跳頻)/RF_PHY_HOP(跳頻已做好),只需按照博客的說明將兩個工程合并使用”

發(fā)現(xiàn)和藍牙整合在一起的情況下,不跳頻的可以使用。但是跳頻的不行,會報錯CRC錯誤,串口輸出調(diào)試結(jié)果如下。麻煩幫忙看下

1729056888104667.jpg

1729056888442092.png



自動跳頻例程可能確實無法與BLE共存。

RF_PHY例程在可用的情況下也可自主實現(xiàn)跳頻,

可在雙方約定的條件下,至于雙方如何約定,比如定一個數(shù)據(jù)包協(xié)議,在發(fā)送方發(fā)送指定跳頻數(shù)據(jù)包給接收端,且在收到接收端的應(yīng)答數(shù)據(jù)后,雙方切換通訊頻點,完成跳頻,至于多長時間跳頻一次,可自行管理,其他約定方式也可自行嘗試。

跳頻配置可按如下處理:

? ? ? ? uint8_t state;

? ? ? ? rfConfig_t rfConfig;

? ? ? ? tmos_memset(&rfConfig, 0, sizeof(rfConfig_t));

? ? ? ? rfConfig.Frequency = 2480000;//頻點選擇,當(dāng)前參數(shù)2480000=2.480GHZ,參數(shù)范圍:2402000~2480000

? ? ? ? state = RF_Config(&rfConfig);

通過state返回值查看是否設(shè)置成功。


學(xué)習(xí)了,最近也在關(guān)注這個


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频