ST17H66 Proprietary_Rf 工程说明

A. Smart_Master 发送端

    1. 数据包结构解析
类型 Adv_Type PDU_LEN MAC_Host Adv_Segment0 Adv_Segment1 Net_WorkID Segment_Num Payload
长度(Byte) 1 1 6 3 2 4 2 自定义长度

说明:

    1. PDU_LEN 为 MAC_Host 到 Payload 的长度;
    1. pack_len = PDU_LEN + 2;
    1. pack_len 最大值为 RF_PKT_MAX_LEN(256);
static void smart_rf_data_init(void)
{uint8_t adv_buffer[32];adv_buffer[0] = 0x02;adv_buffer[1] = 0x01;adv_buffer[2] = 0x06;adv_buffer[3] = 0x1B;adv_buffer[4] = 0xFF;adv_buffer[5] = 0x04;adv_buffer[6] = 0x05;adv_buffer[7] = 0x01;adv_buffer[8] = 0x02;adv_buffer[9] = 0x03;adv_buffer[10] = 0xcc; //adv_buffer[11] = 0x00; //adv_buffer[12] = 0x03; //adv_buffer[13] = 0xaa; //adv_buffer[14] = 0x00; //adv_buffer[15] = 0x93; //adv_buffer[16] = 0xaa; //adv_buffer[17] = 0x67; //adv_buffer[18] = 0xF7;adv_buffer[19] = 0xDB;adv_buffer[20] = 0x34;adv_buffer[21] = 0xC4;adv_buffer[22] = 0x03;adv_buffer[23] = 0x8E;adv_buffer[24] = 0x5C;adv_buffer[25] = 0x0B;adv_buffer[26] = 0xAA;adv_buffer[27] = user_data_seq;adv_buffer[28] = user_data_seq >> 8;adv_buffer[29] = user_data_seq >> 16;adv_buffer[30] = user_data_seq >> 24;uint8_t advHead[2] = {0x00, (31 + 6)};//tx buf date updateosal_memcpy(&(phyBufTx[0]), &(advHead[0]), 2);     //copy tx headerosal_memcpy(&(phyBufTx[2]), &(s_pubAddr[0]), 6);   //copy AdvAosal_memcpy(&(phyBufTx[8]), &(adv_buffer[0]), 31); //copy payload
...
}

以上就是SDK中初始化发送包数据格式,phyBufTx[]为RF发射数据缓存,发送的数据需要更新在缓存等待RF发送。

    //phy pktfmt configs_phy.Status = RF_RFPHY_IDLE;s_phy.txIntv = 50;           //mss_phy.rxIntv = 200;          //mss_phy.rxOnlyTO = 10 * 1000;  //uss_phy.rfChn = BLE_ADV_CHN37; //26;//s_pktCfg.pktFmt = RF_PKT_FMT_1M;s_pktCfg.pduLen = 31 + 6;s_pktCfg.crcFmt = LL_HW_CRC_BLE_FMT; //LL_HW_CRC_BLE_FMT;LL_HW_CRC_NULLs_pktCfg.crcSeed = DEFAULT_CRC_SEED;s_pktCfg.wtSeed = WHITEN_SEED_CH37; //DEFAULT_WHITEN_SEED;s_pktCfg.syncWord = DEFAULT_SYNCWORD;VOID osal_start_timerEx(PhyRf_TaskID, PPP_PERIODIC_TX_EVT, 1000);

初始化发送的时间间隔,s_phy.txIntv = 50;
初始化发送的数据长度,s_pktCfg.pduLen = 31 + 6;
VOID osal_start_timerEx(PhyRf_TaskID, PPP_PERIODIC_TX_EVT, 1000);开始发送数据;

    1. 数据发送
static void process_tx_done_evt(void)
{/**37->38->39 adv channel*/uint8 last_index = 0;last_index = user_get_chn_index(s_phy.rfChn);if (last_index < (USER_MAX_CHN_NUMBER - 1)){s_phy.rfChn = User_chanel_Map[last_index + 1][0];s_pktCfg.wtSeed = User_chanel_Map[last_index + 1][1];phy_rf_tx();}else if (last_index == (USER_MAX_CHN_NUMBER - 1)){user_reTx_number++;if (user_reTx_number >= Max_ReTxNumber){user_reTx_number = 0;osal_start_timerEx(PhyRf_TaskID, PPP_PERIODIC_TX_EVT, s_phy.txIntv);s_phy.Status = RF_RFPHY_IDLE;user_update_tx_sequnce();LOG("--next_seq=%d\n\r", user_data_seq);}else{s_phy.rfChn = User_chanel_Map[0][0];s_pktCfg.wtSeed = User_chanel_Map[0][1];phy_rf_tx();}}else{LOG("channel error!!\n\r");s_phy.Status = RF_RFPHY_IDLE;}
}

以上为Rf发送数据的发送流程,每一包数据在一个发送间隔中在3个通道循环发送5组。

void user_update_tx_sequnce(void)
{user_data_seq++;if (user_data_seq > 65535)user_data_seq = 0;SmartRf_Tx_DataBuf.Adv_Seq[0] = user_data_seq;SmartRf_Tx_DataBuf.Adv_Seq[1] = user_data_seq >> 8;osal_memcpy(&(phyBufTx[0]), &SmartRf_Tx_DataBuf, SmartRf_Tx_DataBuf.PduLen + 2);
}

以上为每一包数据发送完后,数据包的数据更新;

B.Smart_Slave 接收端

    1. 初始化接收
    s_phy.Status = RF_RFPHY_IDLE;s_phy.txIntv = 40;           //mss_phy.rxIntv = 10;           //mss_phy.rxOnlyTO = 10 * 1000;  //uss_phy.rfChn = BLE_ADV_CHN37; //26;//s_pktCfg.pktFmt = RF_PKT_FMT_1M;s_pktCfg.pduLen = 31 + 6;s_pktCfg.crcFmt = LL_HW_CRC_BLE_FMT; //LL_HW_CRC_BLE_FMT;LL_HW_CRC_NULLs_pktCfg.crcSeed = DEFAULT_CRC_SEED;s_pktCfg.wtSeed = WHITEN_SEED_CH37; //DEFAULT_WHITEN_SEED;s_pktCfg.syncWord = DEFAULT_SYNCWORD;VOID osal_start_timerEx(PhyRf_TaskID, PPP_PERIODIC_RX_EVT, 2500);

初始化接收间隔,s_phy.rxIntv = 10;
初始化接收长度,s_pktCfg.pduLen = 31 + 6;
VOID osal_start_timerEx(PhyRf_TaskID, PPP_PERIODIC_RX_EVT, 2500);开始接收数据

    1. 接收中断,消息传递
static void phy_rx_data_reportCB(void)
{if (s_taskIdRxCb == NULL)return;ppp_rxPktReport_t *pkt;uint8_t pduLen = phyBufRx[1] + 2;pkt = (ppp_rxPktReport_t *)osal_msg_allocate(sizeof(ppp_rxPktReport_t) + pduLen);uint8_t *p = osal_mem_alloc(pduLen);if (pkt != NULL && p != NULL){pkt->hdr.event = PPP_MSG_DATA_REPORT;pkt->hdr.status = 0xff;pkt->dlen = pduLen;osal_memcpy(p, phyBufRx, pduLen);pkt->pData = p;pkt->rfChn = s_phy.rfChn;pkt->rssi = phyRssi;pkt->carrSens = phyCarrSens;pkt->foff = phyFoff;(void)osal_msg_send(s_taskIdRxCb, (uint8 *)pkt);}
}static void appProcessOSALMsg(osal_event_hdr_t *pMsg)
{switch (pMsg->event){case PPP_MSG_DATA_REPORT:appProcessRxData(((ppp_rxPktReport_t *)pMsg));break;default:// Unknown message - drop it.break;}
}

以上将接收到的数据传递到应用层进行处理。

    1. 应用处理
static void appProcessRxData(ppp_rxPktReport_t *pMsg)
{uint8_t pduLen = pMsg->dlen;if (SmartRF_Device.device_mode == UN_PAIRING_MODE){}else if (SmartRF_Device.device_mode == EN_PAIRED_MODE){}osal_mem_free(pMsg->pData);
}

在应用层将设备分为绑定和未绑定两种状态:设备上电为未绑定状态,将设备靠近发射端,信号强度RSSI值满足筛选条件将设备设置为绑定状态。
接收的数据将会按格式打印。

ST17H66低功耗蓝牙SOC开发(8)—— proprietary_rf工程讲解相关推荐

  1. ST17H66低功耗蓝牙SOC开发(7)—— simpleBleCentral工程讲解(下)

    2.连接过程 2.1 初始化 对主机各个参数进行初始化后,注册simpleBLERoleCB回调,simpleBLERoleCB里面的simpleBLECentralEventCB是设备的事件回调,初 ...

  2. ST17H66 低功耗蓝牙SOC开发(1)—— SDK介绍

    目录 1.资料获取 2.开发环境 3.ST17H66开发SDK获取 4.SDK介绍 4.1 components 4.2 example 4.3 lib 4.4 misc 1.资料获取 伦茨17Hxx ...

  3. ST17H66 低功耗蓝牙SOC开发(3)—— OSAL系统简介

    ST17H66的SDK是基于OSAL系统运行,在开发过程中,不需要对OSAL系统做过多深入了解,只需要知道运行机制和相关API的使用即可,下面介绍一下OSAL系统. 1.OSAL常用术语 (1)资源( ...

  4. Android低功耗蓝牙(BLE)开发(二)

    在上一篇文章Android低功耗蓝牙(BLE)开发(一)中我们了解了BLE的相关概念,这里我们来实际用代码演示安卓进行BLE连接和通讯的功能.本文代码基于Android5.0以上(API 21) 1. ...

  5. 微信小程序低功耗蓝牙(BLE)开发总结

    1.准备 低功耗蓝牙模块:(链接)蓝牙模块购买通道 相关参数数据(UUID表): 需要知道服务ID(serviceID) ,响应特征值 ID(notify characteristic UUID),写 ...

  6. 经典蓝牙与低功耗蓝牙BLE开发基础知识:服务、特征、属性、UUID

    经典蓝牙和低功耗蓝牙BLE的区别 蓝牙大致被认为是1.0 2.0 3.0 4.0版本,不过现在已经不再用版本号区分蓝牙了,蓝牙1.0~3.0都是经典蓝牙,在塞班系统就已经开始使用了.而蓝牙4.0开始就 ...

  7. nRF52832低功耗蓝牙应用开发之入门教程

    nRF52382是挪威的nordic北欧公司推出的一款低功耗蓝牙芯片,该芯片集成多种协议栈,包括蓝牙5.0..2.4G专有协议栈,支持蓝牙mesh组网,空中波特率达到2Mbps,M4内核,主频达到64 ...

  8. 好书推荐:21天入门 低功耗蓝牙5.x开发

    低功耗蓝牙5 及其后续版本围绕物联网创新应用而不断更新迭代,如何高效的学习低功耗蓝牙5 相关知识,并通过实践来掌握其开发方法,是广大学子和开发人员非常感兴趣的内容.作为低功耗蓝牙技术在国内最早推广及应 ...

  9. Android ble covana,Android BLE低功耗蓝牙开发

    最近做了一个智能硬件开发(针灸仪)的项目,有一部分涉及到低功耗蓝牙的开发,就是通过蓝牙和设备进行数据的交互,比如控制改设备的LED的开关,设备的开关机,设置设备的时间和温度等,下面就项目中遇到的坑一一 ...

最新文章

  1. 莱芜市公安局交警支队智能交通项目集成及容灾公开招标公告
  2. 基于PU-Learning的恶意URL检测——半监督学习的思路来进行正例和无标记样本学习...
  3. Nature:揭示人大脑类器官为何缺乏正常人脑特有的细胞亚型和复杂回路
  4. 机房冷热通道系统整体解决方案
  5. python计算汉明距离_有效地使用python计算汉明距离
  6. C# Select SelectMany 区别
  7. mysql 命令 示例,mysql语句大全
  8. java访问oracle集群,JAVA查询Oracle数据库集群连接字符串
  9. python delete_rows,Python:如何刪除以特定字符結尾的行?
  10. JSP如何获取Spring Boot的配置属性
  11. LeetCode(804)——唯一摩尔斯密码词(JavaScript)
  12. 关于iOS 6 中的一些“xxxxxx” is deprecated 问题的解决办法
  13. JQuery iframe页面通过parent方法操作父页面中的元素与方法(实例讲解)
  14. 阿里巴巴Java开发手册(华山版)
  15. java算法——哈希表 电话号码查询系统
  16. [笔记]PLC可程式模拟器1
  17. linux 设置网卡mac地址命令,linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
  18. 纵横算法之二:社招如何面对算法面试
  19. 被晨光搁浅的誓言无声
  20. 国产linux操作系统深度系统20.3发布(推荐)

热门文章

  1. 关于研发效能提升的思考
  2. 系统学习车载仿真测试HiL,成为HiL测试工程师
  3. ERP服务器端安装及配置
  4. nginx三种发行版本的选择
  5. 计算机方向的综述投稿哪个期刊,COMPUTER
  6. python 依据某几列累加求和_Python数据分析(2)-pandas versus excel
  7. 21世纪,计算机的普及与互联网的发展,推进服装企业信息化时代
  8. 基于钻孔数据的地质体建模
  9. 丰田pcwin是什么软件_Windows有哪些软件建议不要安装?
  10. 内蒙古大学计算机科学与技术专业怎么样,内蒙古大学计算机科学与技术怎么样...