当前位置: 首页 > news >正文

cc2530 Basic RF 讲解 和点灯讲解(1_1)

1. Basic RF 概述

Basic RF 是 TI 提供的一套简化版的无线通信协议栈,旨在帮助开发者快速搭建无线通信系统。它基于 IEEE 802.15.4 标准的数据包收发,但只用于演示无线设备数据传输的基本方法,不包含完整功能的协议。Basic RF 的功能限制包括不提供多跳、设备扫描、Beacon,以及不同种类的网络设备(如协调器、路由器等)3。

2. Basic RF 工作原理
  • 启动:创建一个 basicRfCfg 数据结构并初始化其成员,然后调用 basicRfInit() 函数进行协议初始化。
  • 数据发送:创建一个 buffer,将 payload 放入其中,然后调用 basicRfSendPacket() 函数发送。
  • 数据接收:上层通过 basicRfPacketIsReady() 函数检查是否收到新的数据包,然后调用 basicRfReceive() 函数将收到的数据复制到 buffer 中。
  • 数据帧结构:数据包结构包括前导码(Preambles)、帧开始定界符(SFD)、长度、帧控制字段、序列号、PAN ID、目的地址、源地址、有效载荷和帧校验序列(Frame check sequence)3。
3. Basic RF 的限制
  • Basic RF 不支持多跳和设备扫描。
  • 所有节点同级,只实现点对点传输。
  • 传输时仅等待信道空闲,不执行 802.15.4 CSMA-CA 要求的两次 CCA 检测。
  • 不重传数据。

4.Basic RF 操作环节

Basic  RF 操作依次包括启动,发送,接收三个环节

4-1启动

启动环节包括

  1. 初始化开发板的硬件
  2. 设置无线网络ID
  3. 设置无线通信的通信信道号
  4. 设置无线通信的接收和发送 模块地址
  5. 若有必要,设置无线通信的网络加密等级
定义位置

在 CC2530 Basic RF 的配置中,网络的结构体通常用于存储和初始化网络相关的参数。

找到图中的文件,可以看到其网络配置的结构体

其每个定义的意思和作用

typedef struct {uint16 myAddr;          //本机地址  范围0x0000~0xffff ,作为识别本模块的地址uint16 panId;            //网络ID   范围 0x0000~0xffff , 接收和发送模块此参数必须一致uint8 channel;            //通信信道号 范围 11~26 , 接收和发送模块此参数必须一致uint8 ackRequest;        //应答信号#ifdef SECURITY_CCM        //是否加密,预定义时取消了加密uint8* securityKey;        //密钥  两方必须一致uint8* securityNonce; //IV/Nonce值  //各一个随机数即可 (它会发送给对方在配合密钥即可解密)#endif
} basicRfCfg_t;
初始文件实现的位置

在main函数中可以看到如下的几个定义它就是其上方的定义值

// Config basicRFbasicRfConfig.panId = PAN_ID;               //#define PAN_ID                0x2007basicRfConfig.channel = RF_CHANNEL;         //#define RF_CHANNEL                25      // 2.4 GHz RF channelbasicRfConfig.ackRequest = TRUE;            //#define TRUE 1
硬件初始化

在主函数中可以看到  ( halBoardInit(); )函数它是 对硬件IO的初始化  位置在  hal_board.c 文件中

发送函数(按键函数来解释其发送过程)

函数

static void appSwitch()        开关函数
{pTxData[0] = LIGHT_TOGGLE_CMD;    //要发送的数据basicRfConfig.myAddr = SWITCH_ADDR;    //本机地址if(basicRfInit(&basicRfConfig)==FAILED) {    //初始化RFHAL_ASSERT(FALSE);    //设置断言}// Keep Receiver off when not needed to save powerbasicRfReceiveOff();    //关闭接收模式// Main loopwhile (TRUE) {    //TRUE = 真if(halButtonPushed()==HAL_BUTTON_1){    //调用按键函数 判断是否按下basicRfSendPacket(LIGHT_ADDR, pTxData, APP_PAYLOAD_LENGTH);    //调用发送函数// Put MCU to sleep. It will wake up on joystick interrupthalIntOff();    //关闭中断halMcuSetLowPowerMode(HAL_MCU_LPM_3); // Will turn on global  //打开全局// interrupt enablehalIntOn();    //开启中断}}
}

接收函数(LED灯函数来解释其接收过程)
static void appLight()
{// Initialize BasicRFbasicRfConfig.myAddr = LIGHT_ADDR;    //本机地址if(basicRfInit(&basicRfConfig)==FAILED) {    初始化方法与发送环节一样HAL_ASSERT(FALSE);}basicRfReceiveOn();    //开启接收// Main loopwhile (TRUE) {    //一直循环while(!basicRfPacketIsReady());    //判断是否有数据if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0) {//检查数据是否完整if(pRxData[0] == LIGHT_TOGGLE_CMD) {//处理数据halLedToggle(1);}}}
}

http://www.lryc.cn/news/469956.html

相关文章:

  • Android H5页面性能分析策略
  • 【前端面试】Typescript
  • 程序语言的内存管理:垃圾回收GC(Java)、手动管理(C语言)与所有权机制(Rust)(手动内存管理、手动管理内存)
  • 研究生论文学习记录
  • 毕业设计选题:基于Django+Vue的图书馆管理系统
  • #网络安全#NGSOC与传统SOC的区别
  • GCN+BiLSTM多特征输入时间序列预测(Pytorch)
  • LinkedList和链表之刷题课(下)
  • ollama 在 Linux 环境的安装
  • C语言二刷指针篇
  • LeetCode题练习与总结:回文对--336
  • CesiumJS 案例 P7:添加指定长宽的图片图层(原点分别为图片图层的中心点、左上角顶点、右上角顶点、左下角顶点、右下角顶点)
  • Redis 主从同步 问题
  • 【SQL Server】探讨 IN 和 EXISTS之间的区别
  • 清理pip和conda缓存
  • git rebase和merge的区别
  • 【elkb】linux麒麟v10安装ELKB 8.8.X版本(ARM架构)
  • bluez hid host介绍,连接键盘/鼠标/手柄不是梦,安排
  • GPT打数模——电商品类货量预测及品类分仓规划
  • 华为OD机试 - 螺旋数字矩阵 - 矩阵(Python/JS/C/C++ 2024 D卷 100分)
  • 分类预测 | GCN图卷积神经网络多特征分类预测(MATLAB)
  • FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持
  • App相关技术以及打包
  • 【unity】【游戏开发】Unity代码不给提示怎么办?
  • Kubernetes固定Pod IP和Mac地址
  • 计算机组成原理之数据的对齐和大/小端存放方式、计算机中数据对齐的具体方式有哪些
  • 【学术论文投稿】Windows11开发指南:打造卓越应用的必备攻略
  • 【毕业论文+源码】基于SSM(Spring + Spring MVC + MyBatis)的房屋租赁系统
  • 【golang】解析 JSON到指定结构体
  • 设计模式——过滤器模式