0 ZigBee无线通信概念实验、抓包

2024-01-11 17:28

本文主要是介绍0 ZigBee无线通信概念实验、抓包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

胜达电子学习笔记:lesson5

ZigBee无线通信概念实验、抓包

  • 5.无线通信概论
    • 5.1 理解 Lesson5-Send
      • `main`:主函数
      • `halRfInit`:射频初始化
      • `RFSend`:无线数据发送出去
      • SendPacket 数组
    • 5.2 理解 Lesson5-Receive
      • RevRFProc() 无线接收函数
    • 5.3 抓包软件Packet Sniffer
    • 5.4 如何改成发送字符串?

5.无线通信概论

✔ 掌握 ZigBee 网络里的相关重要概念,打造自己的无线通信,并掌握捕捉查看空气中的 IEEE802.15.4 无线协议。
✔ 掌握怎么用胜达 USBDongle 抓无线数据包。

新定义:信道、载波、频段

  1. zigbee无线通信,需要高频的载波来提高发射效率,zigbee模块之间要可以正常的收发,接收模块必须把接收频率设置和发射模块的载波频率一致。
  2. ZIgBee有27个载波可以进行通信,载波叫做信道(无线通信的通道)。这些载波的频率落在某些频率区段,我们把这些区段叫做频段。但TI所有支持Zigbee底层协议的芯片只能在2.4G频段的16个信道里进行通信。
    1. 2.4G频段:16个信道
      1. 11 - 2405M
      2. 12 - 2410M
      3. ··
      4. 26 - 2480M
    2. 915M评断/896M评断 11个信道
  3. 网络地址:在zigbee无线局域网里,每一模块都一个在该网络里有唯一的2个字节的地址,这个地址叫做网络地址或网络短地址。
  4. PANID:2字节的编码,用来区别不同的ZigBee无线局域网,也叫个域网ID(可能好几个zigbee是一个网络,另外几个zigbee是另一个网络)

ZigBee向外发送信号,是通过高频载波(信道)发射出去的(发送模块)
而发射出去后,想要被另一个的设备接受,那么另一个设备(接受模块)也要调成发射出去相同的载波频率
载波频率=信道,落在某些频段上

关于频段、信号、载波频率的关系理解图如下

image.png

5.1 理解 Lesson5-Send

main:主函数

功能:初始化相关配置和 while 循环
注意:设置本模块地址的大小端模式

void main()
{LS164_Cfg();//74LS164控制数码管的初始化Init32M(); //主时钟晶振工作在32M KeysIntCfg(); halRfInit();//无线通信的初始化  初始化相关的寄存器,配置工作信道,和PANIDSHORT_ADDR0=0x50;SHORT_ADDR1=0x20;//设置本模块地址  设置本模块的网络地址0x2050//大小端模式问题,LS164_BYTE(1); while(1);
}

halRfInit:射频初始化

功能:无线通信初始化,初始化相关寄存器,配置工作信道 和 PANID

void halRfInit(void)
{//默认配置EA=0;FRMCTRL0 |= 0x60;// Recommended RX settings  TXFILTCFG = 0x09;AGCCTRL1 = 0x15;FSCAL1 = 0x00;// enable RXPKTDONE interrupt  RFIRQM0 |= 0x40;//把射频接收中断打开// enable general RF interruptsIEN2 |= 0x01;//信道与载波对应关系:11对应2405M,12对应2410M···25对应2475MFREQCTRL =(11+(25-11)*5);//(MIN_CHANNEL + (channel - MIN_CHANNEL) * CHANNEL_SPACING);   //设置载波为2475MPAN_ID0=0x07;PAN_ID1=0x20; //0x2007   //个域网ID
//halRfRxInterruptConfig(basicRfRxFrmDoneIsr);    RFST = 0xEC;//清接收缓冲器RFST = 0xE3;//开启接收使能 EA=1;    
}

初始化我们需要改两个地方的内容:

  1. FREQCTRL:这里是信道与载波的对应关系,需要改成我们需要的载波
  2. PAN_ID0 和PAN_ID1:这里是 PANID 即个域网 ID(区分不同的网络的标识符,只有相同 PANID 的设备才能进行组网连接)

RFSend:无线数据发送出去

功能:放在按键中断服务函数中,当按键被按下时,触发这个函数,将我们需要发送的数据给发送出去。
image.png

RFST = 0xE9; //这个寄存器一旦被设置为0xE9,发送缓冲区的数据就被发送出去

//pstr:需要发送的字符串
//len:字符串长度
void RFSend(char *pstr,char len)
{char i;RFST = 0xEC; //确保接收是空的,接收缓冲区清空RFST = 0xE3; //清接收标志位while (FSMSTAT1 & 0x22);//等待射频发送准备好RFST = 0xEE;//确保发送队列是空RFIRQF1 &= ~0x02;//清发送标志位
//为数据发送做好准备工作for(i=0;i<len;i++){//②把SendPacket数组的数据全部发出去RFD=pstr[i];}  //循环的作用是把我们要发送的数据全部压到发送缓冲区里面RFST = 0xE9; //这个寄存器一旦被设置为0xE9,发送缓冲区的数据就被发送出去while(!(RFIRQF1 & 0x02) );//等待发送完成RFIRQF1 = ~0x02;//清发送完成标志
}

SendPacket 数组

1111.png

char SendPacket[]={0x0c,0x61,0x88,0x00,0x07,0x20,0xEF,0xBE,0x20,0x50,SENDVAL};
//第一个字节0x0C含义,这个自己后面还有12个字节要发送(10+2)还有两个CRC校验码自动附加(SendPacket总共是11个字节)
//第5 6个字节表示的是PANID   0x07 + 0x20
//第7 8个字节是无线模块目标设备的网络地址 0xBEEF
//第9 10就是本地模块的网络地址 0x
//11 个字节是我们有用的数据
// CRC码 12 13个字节 是硬件自动追加

5.2 理解 Lesson5-Receive

RevRFProc() 无线接收函数

功能:当进入接收中断时,进入这个函数,读取 SendPacket 数组,获取SENDVAL值

void RevRFProc()
{static char len;static char  ch;len=ch=0;RFIRQM0 &= ~0x40;IEN2 &= ~0x01;EA=1;len=RFD;//读第一个字节判断这一串数据后面有几个字节;//len=0x0C 12while (len>0) {//只要后面还有数据那么就把他都从接受缓冲区取出来ch=RFD;if(3==len)//倒数第三个数据是发送内容{//如果倒数第三个字节等于7,那么我们把LED0取反//执行相关操作,此时ch就是SENDVAL值LS164_BYTE(ch);}len--;}     EA=0;// enable RXPKTDONE interruptRFIRQM0 |= 0x40;// enable general RF interruptsIEN2 |= 0x01;        
}

5.3 抓包软件Packet Sniffer

注意:抓包前将仿真器与 **Receive **端相连
step1:选择合适的 ZigBee 型号(CC2530 选第二个)
image.png
step2:依次点击 1-2-3,注意 ② 中需要选择合适的信道,配置好后点击 ③,然后抓取 Send 端发来的数据,如下图中的黄色块中的数据 05为 Send 端发来的数据。
image.png

5.4 如何改成发送字符串?

难点在于:要改一部分代码(先记下来要改哪些,以后自己再重新设计程序)
蓝色表示修改的是 Send 端
红色表示修改的是 Receive 端
image.png
image.png
image.png
最终效果:
image.png

再次提醒:抓包的话是将仿真器连接到 Receive 端

这篇关于0 ZigBee无线通信概念实验、抓包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/595129

相关文章

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

计算机网络基础概念 交换机、路由器、网关、TBOX

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么?二 、交换机三、路由器四、网关五、TBOXTelematics BOX,简称车载T-BOX,车联网系统包含四部分,主机、车载T-BOX、手机APP及后台系统。主机主要用于车内的影音娱乐,以及车辆信息显示;车载T-BOX主要用于和后台系统/手机APP通信,实现手机APP的车辆信息显示与控

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

【机器学习-一-基础概念篇】

机器学习 定义分类算法 应用 定义 机器学习最早是被Arthur Samuel 提出的一个概念,指计算机无需明确编程即可学习的研究领域。1950年他发明的跳棋程序,这个人机对弈游戏让他的声名鹊起,机器学习这个概念才进入大众的是视线。 在这个跳棋程序里,他编程了一种算法,这个程序与Arthur下了数万次跳棋,计算机逐渐学会了下在哪里有更大的可能会赢得比赛,哪里会输,通过这种方法,最

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。