WCH CH582M 蓝牙例程 RF_PHY记录


前言

最近在研究沁恒的CH58x系列蓝牙功能,作为一个小白记录一下自己的摸索过程。首先我使用的是CH582M型号两块,RF_PHY例程。
本文简单介绍如何实现数据收发与使用WCH-BLE分析仪抓包。


一、RF_PHY

https://www.cnblogs.com/iot-fan/p/14320405.html
RF_PHY 是wch提供的一个调用底层2.4g收发器的一个接口,可以通过此接口实现更为灵活的通信方式
这种底层,仅仅是BLE的收发器基础上,这意味着,收发器调制解调参数,包括frequency,deviation,symbol_rate,以及packet_handler(preamble,syncword,length,crc,whitening)都是符合蓝牙的底层规范的.
具体的工程可参考官方提供例程对应路径下的工程,如:CH582\EVT\EXAM\BLE\RF_PHY

二、使用步骤

1.使用MounRiver Studio打开例程

MounRiver Sutdio的下载与使用本站有许多教程,此处不再赘述。
给出MounRiver Studio与沁恒BLE例程下载链接:
MounRiver Studio:http://www.mounriver.com
沁恒CH85x BLE例程:https://www.wch.cn/downloads/CH583EVT_ZIP.html
工程界面如下,主函数在APP文件夹
工程主界面
沁恒的蓝牙芯片例程已经将各个函数进行高度封装,不同主从机例程的主函数中,一般都只时一到两个的函数的区别,但是在这一到两个函数中,差别还是很大的

//主函数
int main(void)
{
#if(defined(DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
    PWR_DCDCCfg(ENABLE);
#endif
    SetSysClock(CLK_SOURCE_PLL_60MHz);
#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
#endif
#ifdef DEBUG
    GPIOA_SetBits(bTXD1);
    GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();
#endif
    PRINT("start.\n");
    PRINT("%s\n", VER_LIB);
    CH58X_BLEInit();                        // 初始化蓝牙库
    HAL_Init();
    RF_RoleInit();                          // 配置此设备的角色为RF Role
    RF_Init();
    Main_Circulation();
}

2.对例程进行简单修改并烧录

可以看到主函数内容并不多,我们主要关注HAL_Init() 与RF_Init()这两个函数
其中HAL_Init()注册了HAL层任务,对硬件参数进行初始化,比如RTC的时钟,睡眠唤醒,RF校准等

void HAL_Init()      // 注册HAL层任务,对硬件参数进行初始化,比如RTC的时钟,睡眠唤醒,RF校准等
{
    halTaskID = TMOS_ProcessEventRegister(HAL_ProcessEvent);
    HAL_TimeInit();                                               // 系统定时器初始化
#if(defined HAL_SLEEP) && (HAL_SLEEP == TRUE)
    HAL_SleepInit();
#endif
#if(defined HAL_LED) && (HAL_LED == TRUE)
    HAL_LedInit();
#endif
#if(defined HAL_KEY) && (HAL_KEY == TRUE)
    HAL_KeyInit();
#endif
#if(defined BLE_CALIBRATION_ENABLE) && (BLE_CALIBRATION_ENABLE == TRUE)
    tmos_start_task(halTaskID, HAL_REG_INIT_EVENT, MS1_TO_SYSTEM_TIME(BLE_CALIBRATION_PERIOD)); // 添加校准任务,单次校准耗时小于10ms
#endif
    tmos_start_task( halTaskID, HAL_TEST_EVENT, 1600 );    // 添加一个测试任务
}

而RF_Init()主要就是RF初始化,收发功能的配置

void RF_Init(void)
{
    uint8_t    state;
    rfConfig_t rfConfig;

    tmos_memset(&rfConfig, 0, sizeof(rfConfig_t));
    taskID = TMOS_ProcessEventRegister(RF_ProcessEvent);                 // 注册RF任务,初始化RF功能,以及注册RF的回调函数
    rfConfig.accessAddress = 0x71764129;                                 // 禁止使用0x55555555以及0xAAAAAAAA ( 建议不超过24次位反转,且不超过连续的6个0或1 )
    rfConfig.CRCInit = 0x555555;
    rfConfig.Channel = 8;
    rfConfig.Frequency = 2480000;
    rfConfig.LLEMode = LLE_MODE_BASIC | LLE_MODE_EX_CHANNEL;             // 使能 LLE_MODE_EX_CHANNEL 表示 选择 rfConfig.Frequency 作为通信频点
    rfConfig.rfStatusCB = RF_2G4StatusCallBack;
    rfConfig.RxMaxlen = 251;
    state = RF_Config(&rfConfig);
    PRINT("rf 2.4g init: %x\n", state);
//    { // RX mode
//        state = RF_Rx(TX_DATA, 10, 0xFF, 0xFF);
//        PRINT("RX mode.state = %x\n", state);
//    }

        { // TX mode
            state = RF_Tx(TX_DATA, 10, 0xFF, 0xFF);
            PRINT("TX mode.state = %x\n", state);
        }

    	{ // TX mode
    		tmos_set_event( taskID , SBP_RF_PERIODIC_EVT );
    	}
}

注意对两个不同设备进行烧录时,TX mode与RX mode要分别屏蔽,记录为发送设备与接收设备
本文使用WCHISPStudio进行烧录,烧录过程站内与沁恒官方也有非常详细的介绍,此处不再介绍
WCHISPStudio工具下载地址:https://www.wch.cn/downloads/WCHISPTool_Setup_exe.html

3.通过串口查看数据发送

此为接收设备的串口打印,可以看到例程已经成功跑起来了
打印内容包括接收模式状态、RSSI、接收数据等
接受设备串口打印

4.通过WCH-BLE分析仪抓包

本文使用沁恒官方出产的WCH-BLE分析仪进行抓包,需要额外购买。大概就长这样 也比较轻便

上位机及配套材料下载地址:https://www.wch.cn/downloads/WCH_BLEAnalyzer_zip.html
上位机打开后的界面如下:
在这里插入图片描述
由于本文使用的是RF_PHY例程,不使用蓝牙协议栈。所以这里想要抓包还需要稍微设置一下
1.点击坐上工具栏的小齿轮即硬件设置——>选择自定义2.4G模式
2.自定义2.4G参数设置中Data Channel改为39
3.AccessAddress与CRCInit就是前面RF_Init函数中设置的参数,填写进去(注意,格式中不要加0x)

在这里插入图片描述

确定以后点击开始,就可以看到数据包了
在这里插入图片描述
分享一个小坑
在刚上手时忘记填写CRCInit,会出现满屏的以下情况
在这里插入图片描述
在查关键字FEC ERROR时只有极少的资料,所以也没弄得很明白,下面放原文链接
1.https://e2echina.ti.com/support/wireless-connectivity/bluetooth/f/bluetooth-forum/97644/fcs
2.https://e2echina.ti.com/support/wireless-connectivity/bluetooth/f/bluetooth-forum/77982/packet-sniffer-fce-error

总结

还是颗小白菜 慢慢进步

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AmamiyaYoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值