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();//无线通信的初始化  初始化相关的寄存器,配置工作信道,和PANID

    SHORT_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 interrupts
    IEN2 |= 0x01;
    
    //信道与载波对应关系:11对应2405M,12对应2410M···25对应2475M
    FREQCTRL =(11+(25-11)*5);//(MIN_CHANNEL + (channel - MIN_CHANNEL) * CHANNEL_SPACING);   
                     //设置载波为2475M
    PAN_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 12

    while (len>0) 
    {//只要后面还有数据那么就把他都从接受缓冲区取出来
        ch=RFD;
        if(3==len)//倒数第三个数据是发送内容
        {//如果倒数第三个字节等于7,那么我们把LED0取反
            //执行相关操作,此时ch就是SENDVAL值
           LS164_BYTE(ch);
        }
        

        len--;
     }     
    EA=0;
    // enable RXPKTDONE interrupt
    RFIRQM0 |= 0x40;
    // enable general RF interrupts
    IEN2 |= 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 端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310672.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#基础:通过QQ邮件发送验证码到指定邮箱

一、控制台程序 using System; using System.Net; using System.Net.Mail;public class EmailSender {public void SendEmail(string toAddress, string subject, string body){// 设置发件人邮箱地址以及授权码string fromAddress "xxxxxqq.com";string password …

SIT1050ISO具有隔离功能,1Mbps,高速 CAN 总线收发器

➢ 完全兼容“ ISO 11898 ”标准&#xff1b; ➢ 内置过温保护&#xff1b; ➢ 100kV/s 瞬态抗扰度&#xff1b; ➢ 显性超时功能&#xff1b; ➢ -40V 至 40V 的总线故障保护&#xff1b; ➢ I/O 电压范围支持 3.3V 和 5V MCU &#xff1b; ➢ 低环路延迟…

MS6001S1A低功耗、低噪声 CMOS 轨到轨输入输出运算放大器

MS6001S1A 运算放大器具有极低功耗&#xff0c;轨到轨输入输出&#xff0c;低 的输入失调电压和低的电流噪声。具体表现为可工作在幅度为 1.8V 到 5V 的单电源或者双电源条件&#xff0c;低功耗和低噪声使得 MS6001S1A 能够用在可移动设备上&#xff0c;输入输出的轨到…

【YOLO系列】 Smooth L1 Loss、IOU、GIOU、DIOU、CIOU(附代码实现)

Smooth L1 Loss、IOU、GIOU、DIOU和CIOU都是用于评估模型预测准确性的指标&#xff0c;但它们在计算方式和应用场景上有所不同。 一、Smooth L1 Loss Smooth L1 Loss主要用于回归问题&#xff0c;是由微软的Ross Girshick大神在Fast R-CNN论文中提出的。将Smooth L1 Loss之前应…

vue.js环境在window和linux安装

nodei官网&#xff1a;https://nodejs.org/en/download/ 一.windows环境下安装vue 1&#xff1a;node安装 在node.js的官网上下载node的安装包&#xff0c;下载下来之间安装即可&#xff0c;在命令行输入 npm -vnode -v 如下表示安装成功 2&#xff1a;cnpm安装 npm inst…

怎么修改照片尺寸的?分享3个实用的工具!

在数字时代&#xff0c;照片已经成为我们记录生活、分享经历的重要方式。然而&#xff0c;不同的平台和应用对照片尺寸的要求各不相同&#xff0c;这就需要我们经常对照片进行修改。本文将为您介绍如何修改照片尺寸&#xff0c;以及一些实用的工具。 一、手机应用 手机应用同样…

Backtrader 文档学习-Strategy with Signals

Backtrader 文档学习-Strategy with Signals backtrader可以不通过重写策略的方式触发交易&#xff0c;尽管重写策略是首选通用的方式。 下面介绍通过使用信号也是可以实现交易触发的。 1.定义signal import backtrader as btdata bt.feeds.OneOfTheFeeds(datanamemydatana…

非常好用的个人工作学习记事本Obsidian

现在记事本有两大流派&#xff1a;Obsidian 和Notion&#xff0c;同时据说logseq也很不错 由于在FreeBSD下后两种都没有相关ports&#xff0c;所以优先尝试使用Obsidian Obsidian简介 Obsidian是基于Markdown文件的本地知识管理软件&#xff0c;并且开发者承诺Obsidian对于个…

手机直连卫星及NTN简介

一、手机直连卫星的发展现状 近日&#xff0c;华为推出了支持北斗卫星短报文的Mate 50旗舰机、P60系列&#xff0c;苹果也跟Globalstar&#xff08;全球星&#xff09;合作推出了支持卫星求救的iPhone14&#xff0c;最亮眼的还是华为的。这几款产品揭开了卫星通信探索消费领域…

Aigtek高压放大器的工作原理和指标应用介绍

高压放大器是一种用于放大高压信号的电子设备&#xff0c;具有高压输出&#xff0c;低噪声&#xff0c;高精度&#xff0c;高稳定性&#xff0c;高可靠性&#xff0c;低功耗&#xff0c;低成本等的优点&#xff0c;所以才被广泛应用在磁场探测、电磁脉冲放大、电磁波放大、电磁…

omics简介

omics简介 公众号pythonic生物人写的系列文章介绍了组学的相关内容&#xff0c;本文仅做了一个简单的知识框架&#xff0c;供后面遇到对应问题&#xff0c;快速查阅。欢迎大家去关注原作者。 这篇文章也非常值得阅读&#xff1a;肿瘤NGS行业新人如何构建自己的知识体系-思考问题…

Win系统搭建Elasticsearch实现公网远程访问本地服务

文章目录 系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎&#xff0c;它提供了一个分布式、多…

攒机需要考虑的问题

昨天需要为单位进行一些计算机的升级&#xff0c;既可以搭配出新电脑&#xff0c;也为原来的计算机进行一些升级&#xff0c;就是攒机一些配置。 记得2000年左右经常看这方面的文章&#xff0c;了解一些内容&#xff0c;后面单位应用基本上都是整机&#xff0c;也不需要攒机&am…

华为云优惠券怎么领取(华为云优惠券领取入口)

华为云作为全球领先的云计算服务提供商&#xff0c;为了更好地服务广大用户&#xff0c;经常推出各种优惠活动&#xff0c;其中最受用户欢迎的就是华为云优惠券。本文将详细介绍如何领取华为云优惠券&#xff0c;以及优惠券的使用规则&#xff0c;帮助大家更好地利用华为云的云…

Java高级工程师20道面试题、答案及案例

文章目录 Java高级工程师面试题、答案及案例&#xff1a; 问题&#xff1a; 在Java中&#xff0c;如何实现线程安全的单例模式&#xff1f;请写出双重检查锁定&#xff08;Double-Checked Locking&#xff09;的实现方式。 答案与案例&#xff1a; public class Singleton {pri…

k8s部署mongodb-sharded7.X集群(多副本集)

#mongodb-sharded 7.X版本CHART NAME: mongodb-sharded CHART VERSION: 7.0.5 APP VERSION: 7.0.2helm repo add bitnami https://charts.bitnami.com/bitnami helm pull bitnami/bitnami/mongodb-sharded --untar默认副本数较多。我修改为33 搜索关键字replicaCount 修改 最后…

安装PLSQL图文详细步骤

双击安装软件 更改默认安装路径 等待安装 双击登录程序 先登录sys 登录完成后&#xff0c;在弹窗中输入激活信息 点击【register】

干货抢先看:SOLIDWORKS阵列操作的技巧与要点

SOLIDWORKS软件中的阵列功能十分常用且强大。本文将介绍一些关于SOLIDWORKS阵列的技巧&#xff0c;以帮助您更加高效地应用该功能。 1.线性阵列方向识别度增强 想使用线性阵列打孔的时候&#xff0c;模型上没有可以选中的参考线作为阵列方向怎么办&#xff1f;使用圆柱面也可…

apt-mirror 制作kylin 内网源

一、修改apt软件安装源 1、修改source.list安装源 vi /etc/apt/sources.list 添加&#xff1a; deb http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1 main universe multiverse restricted 2、更新软件源信息 sudo apt update 二、安装同步源工具“apt-mirror” apt-mirrot…

奇异值分解在图形压缩中的应用

奇异值分解在图形压缩中的应用 在研究奇异值分解的工程应用之前&#xff0c;我们得明白什么是奇异值&#xff1f;什么是奇异向量&#xff1f; 奇异值与奇异向量 概念&#xff1a;奇异值描述了矩阵在一组特定向量上的行为&#xff0c;奇异向量描述了其最大的作用方向。 奇异值…