之前的讨论中,我们已经了解了nrf2401传输bit信息的原理,这一节再延伸一下。
根据FSK的实现原理可以很明显的看出,这是串行传输模式。和串口传输几乎是一样的,唯一不同的是串口有TX RX两根线,通信两端可以同时接收/发送,互不影响。而反观nrf2401,它内部只有一个射频模块,任意时刻,射频模块只能在【关机/发射信号/接收信号】这3种工作状态中3选1,也就是nrf2401要么只能对外发送数据,要么只能接收数据。

来点儿专业词汇:
两个通信节点,数据只能从本端传输到对端而不能反着来,这叫单工通信;
本端可以发数据给对端,对端也可以发数据给本端,这叫双工通信;
本端随时可以发数据给对端,对端也可以随时发数据给本端,互不影响,这叫全双工通信;
虽然两端可以互传数据,但我发的时候你只能收不能发,同样你发的时候我也只能收不能发,这叫半双工通信。
综上可知,串口属于全双工通信,nrf2401属于半双工通信。

当我们使用nrf2401进行双向通信的时候,根据项目的不同应该会遇到各种各样的通信场景,我们讨论一下最复杂的情况:
两个无线节点互相通信,某一时刻,两边都有大量的数据想要尽快传送给对方。半双工的特性决定了肯定无法同时互相传输,应该怎么制定传输方案呢?
最简单的方法,我先发你收着,等我这边的数据发完了你再给我发。
这个方法原理上可行,但不合适:
1. 实时性差。 波特率不变时,数据量越大,传输耗时越长,我这边发给你的数据越多,开始收取你那边数据的时间就越靠后。
2. 不可靠。相比有线传输,无线传输从原理上就天然的不可靠,很容易受周围空间中其他电磁波的干扰。
巴拉巴拉传了一长串,万一中间某个地方干扰了一下,哪怕只导致一个bit解析出错,那对方收到的整份数据就是错误的。

现在换一种方法:
(1)我们双方约定好,公平使用传输通道,我让让你,你可以先发数据。但有个条件,不管你有多少数据要发给我,发数据的时候,每次发的字节数量不能超过某个固定长度,我们这里假设是32字节。发少了可以,发多了不行。
(2)你那边发完了这32字节数据之后,要立即转入接收状态。
此外,我对你还有个要求,一旦你进入了接收状态,不要一直死等,如果过了一段时间你没收到我发给你的数据,请切换到发送状态,把刚才发我的那段数据再发一遍。
(3)我收到你的数据之后,如果检查没错误,我会立即转入发送状态,把我这边的数据发给你,同样我也会遵守单次发送最大长度32字节的约定。
(4)如果我收到数据后检查发现有错误,那不好意思,就算我有数据要发给你,但因为你给我的数据是错误的,所以我不搭理你,等着你再给我发一遍。
(5)还有一种特殊情况:经检查你发的数据没问题,但我没什么数据要发给你,这时候,为了不让你在接收状态死等下去,我会简单发你一个"恩,收到了"之类的无意义回复。
(6)给你发完回复之后,我不关心你有没有收到,我会接着退出发送状态,进入接收状态继续等待。
(7)你在接收状态收到了我发给你的数据,知道了"我已收到你的数据",然后你就可以再次转入发送状态,将第二段数据发给我,继续重复前面的过程。
(8)如果你在接收状态下一直没收到我的回复,导致等待超时了,那说明刚才的交流某个环节出了问题。也许是我根本没收到你的数据,也许你的数据被我检查出错误来了,也许是我发你的回复你没收到。所以,你需要重新发送一次刚才发过的数据。
(9)某些极端情况下,你可能一遍遍的重发同样的数据,我一直没搭理你。然后,你怒了,能咋办?回家告状去呗!

以上的描述就是nrf2401实现可靠双向通信的基本过程。
可以看出,上文中的"你"主动性更大,每次通信的时候,都是由"你"发起的,"我"只是被动的接收,
然后"我"通过"回复(ACK)"的方式变相的把"我"这边的数据回传给"你".
通信过程的异常控制也是有"你"这一端来掌控的,包括 超时控制 / 重发控制 / 重发失败足够次数之后终止通信并报错。

nrf2401把行为如"你"的这一端叫做"主发送端"(Primary Transmitter,简称PTX),
把行为如"我"的这一端叫做"主接收端"(Primary Receiver,简称PRX),
以后讨论时我们只使用 PTX / PRX 这两个简写,大家记一下。

还有一点需要特别强调:
PTX虽然叫PTX,但PTX可以进入"发送模式"发送数据,也可以进入"接收模式"接收数据;
PRX同样既可以进入"发送模式"发送数据, 也可以进入"接收模式"接收数据;
PTX/PRX指的是控制逻辑;"发送/接收模式"指的是射频部分的工作状态,切记两者不要混淆。

我们计算一下,单次发送32字节数据,需要多长时间:
2Mbps  波特率: 32*8/2000000 = 128  微秒
1Mbps  波特率: 32*8/1000000 = 256  微秒
250Kbps波特率:  32*8/250000  = 1024 微秒 1毫秒多一点点
可以看出这个时间是很短的,在此基础上,把时间轴拉长,从宏观上看,可以近似看做两端是在同时、双向通信。
这种方案本质上是将时间划分为多个很小的片段,随着时间片的向前推进,通信双方交替使用唯一的信号通道向对端发送数据。
专业的词汇叫: 时分复用(Time Division Multiplexing,TDM)

nrf2401数据传输原理相关推荐

  1. 计算机网络自顶向下方法 第三章 运输层 3.4 可靠数据传输原理

    计算机网络自顶向下方法总结3.4可靠数据传输原理 目录 3.4 可靠数据传输原理 3.4.1 构造可带数据传输协议 3.4.2 流水线可靠数据传输协议 3.4.3 回退N步 3.4.4 选择重传 3. ...

  2. 计算机网络(14)——可靠数据传输原理

    文章目录 可靠数据传输原理 构造可靠数据传输协议 经完全可靠信道的可靠数据传输:rdt 1.0 经具有比特错误信道的可靠数据传输:rdt 2.0 经具有比特错误信道的可靠数据传输:rdt 2.1 经具 ...

  3. 可靠数据传输原理详细图解

    可靠数据传输原理 概述 rdt1.0 rdt2 rdt2.0 rdt2.1 rdt2.2 rdt3.0 流水线可靠数据传输协议 为什么使用流水线 流水线对可靠数据传输协议带来的影响 流水线协议中恢复差 ...

  4. 计算机网络(自顶向下方法)学习记录---3.4 可靠数据传输原理

    文章目录 前言 一.构造可靠传输协议 1.rdt1.0 2.rdt2.0 3.rdt2.1 4.rdt3.0 二.GBN 总结 前言 在学习3.5节TCP传输之前,我们需要先了解到可靠数据的传输原理, ...

  5. 流媒体转发服务器的数据传输原理,23.1.1 流媒体传输的基本原理

    第23章  流媒体服务器架设 流媒体技术也称为流式传输技术,是指在网络上按时间先后次序传输和播放的连续音.视频数据流.随着网络速度的提高,以流媒体技术为核心的视频点播.在线电视.远程培训等业务开展得越 ...

  6. RFID天线数据传输原理:负载调制

    负载调制是电子标签经常使用的向读写器传输数据的方法.负载调制通过对电子标签振荡回路的电参数按照数据流的节拍进行调节,使电子标签阻抗的大小和相位随之改变,从而完成调制的过程.负载调制技术主要有电阻负载调 ...

  7. 可靠数据传输原理1(构造可靠数据传输协议)

    TCP向调用它的因特网应用所提供的服务模型(服务抽象) 数据可以通过一条可靠的信道进行传输.借助于可靠的信道,传输比特就不会受到损坏或丢失,而且所有数据都是按其发送顺序进行交付. 可靠传输协议 实现服 ...

  8. 计网必会:UDP差错检测,检验和、可靠数据传输原理

    文章目录 [前言] UDP套接字 无连接运输 UDP 的优势 UDP的差错检测 可靠数据传输 可靠传输的方式总结 构造可靠数据传输协议 可靠信道 具有比特差错的信道 三种可能 [前言] 之前一节我们介 ...

  9. 【Sofice小司笔记】5 计算机网络,包含数据传输原理、网络各层协议详细说明、TCP/IP协议栈各常用协议说明、TCP握手挥手、可靠传输、网络加密技术

    ❓ 在浏览器地址栏输入一个 URL 后回车,背后发生了什么 解析 URL 浏览器封装 HTTP 请求报文 DNS 域名解析获取 IP 地址 建立 TCP 连接(长链接) 浏览器发送请求 负责传输的 I ...

最新文章

  1. 推荐7款超良心的windows软件,每一个都是精品!
  2. iOS---搜索功能
  3. java输出image_java如何生成imagecode
  4. HDU 2546 饭卡(贪心+DP)
  5. oracle 删除数据 快慢,记录一下Drop表空间的速度
  6. go---字符串截取
  7. 【转】Linux下的多线程编程背景知识
  8. “不会MySQL,干啥都不行!”高级开发:工作、面试处处都会踩坑!
  9. java保留两位小数怎么_java保留两位小数4种方法
  10. day12(html、css)
  11. 【知识索引】【李宏毅机器学习】
  12. crmeb单商户4.4开目录结构 crmeb二开文档 crmeb二开目录结构
  13. 电脑主板各部件详细图解
  14. 汤唯:《在街头卖艺的那些日子》
  15. 极端类别不平衡数据下的分类问题研究综述,终于有人讲全了!
  16. JSP+MYSQL网上作业提交及管理系统
  17. 中国苹果之都苹果快成熟了
  18. 阿里面试——机器学习/算法面试经验案例集合
  19. Ac质量问题相关答疑
  20. 现货白银怎么换算纸白银

热门文章

  1. 上证50ETF期权在的开户条件
  2. 弹指红颜老,逝者如斯夫
  3. 邮件开发:一些常见邮箱的POP3及SMTP服务器地址
  4. 运算放大器基本参数-增益带宽积(直观解释)
  5. C语言学习日记(14)——迷宫算法的一点优化
  6. AidLearning安装Oracle JDK让Java Swing程序在华为MatePadPro平板上跑起来
  7. 转:一个计算机专业毕业的银行员工工作感受
  8. GMT时间和普通时间互转
  9. 车载诊断协议UDS——DTC 判定机制以及DTC Status个人见解
  10. openGauss 基于Paxos协议的高可用