IEEE 802.15.4协议完整中文版(6)

2023-10-16 21:20

本文主要是介绍IEEE 802.15.4协议完整中文版(6),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

出处:http://blog.csdn.net/tidyjiang/article/details/51534510

7 MAC子层规范

  本条款指定了本标准的MAC子层规范。MAC子层处理所有对物理无线信道的访问控制,并负责下面的任务: 
   
  —— 如果设备是协调器,产生网络信标 
  —— 与网络信标同步 
  —— 支持与PAN网络关联和解关联 
  —— 设备安全支持 
  —— 采用CSMA/CA机制访问信道 
  —— 处理和维护 GTS机制 
  —— 在两个对等MAC实体间提供可靠链路 
   
  在本条款中,MAC子层指定和维护的常量和属性以斜体文本存在。常量通常带有前缀“a”,比如aBaseSlotDuration,且被列举在表85中(7.4.1节)。属性通常带有前缀“mac”,比如macAckWaitDuration, 且被列举在表86中(7.4.2节)。安全相关属性被列举在表88中(7.6.1节)。

7.1 MAC子层服务规范

  MAC子层在SSCS和物理层之间提供了一个接口。从概念上讲,MAC子层包含了一个叫做MLME的管理实体。该实体提供了服务接口,通过服务接口,可以调用层管理函数。MLME也为MAC子层附属的被管理目标维护一个数据库。这个数据库被叫做MAC子层PIB。 
   
  图29描述了MAC子层的组件和接口。 
  

这里写图片描述

  MAC子层通过访问SAP提供两种服务: 
  —— MAC数据服务,通过 MAC 公共部分子层服务访问点(MAC common part sublayer SAP, MCPS-SAP)提供,主要完成数据的通信。 
  —— MAC 管理服务,通过MLME-SAP访问。 
  这两个服务通过 PD-SAP 和 PLME-SAP 的接口提供了位于 SSCS 和物理层之间的接口(图 6.2)。除了这些外部接口,在 MLME 和 MCPS 之间还存在隐藏的接口,以使 MLME 能够使用 MAC 数据服务。

7.1.1 MAC 数据服务

  MCPS-SAP 支持在对等 SSCS 实体之间传输 SSCS 协议数据单元(SPDU)。表 40 列举了 MCPS-SAP 所支持的原语。用菱形♦标记的原语属于 RFD 的可选项。 
  

这里写图片描述

7.1.1.1 MCPS-DATA.request

  MCPS-DATA.request 原语请求从本地 SSCS 实体向对等 SSCS 实体传输一个 SSCS 协议数据单元(也就是)MAC服务数据单元。

7.1.1.1.1 服务原语的语义

  MCPS-DATA.request 原语的语义如下: 
  

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">MCPS-DATA<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.request</span> (SrcAddrMode,DstAddrMode,DstPANId,DstAddr,msduLength,msdu,msduHandle,TxOptions,SecurityLevel,KeyIdMode,KeySource,KeyIndex)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul>

  表 41 指定了 MCPS-DATA.request 原语的参数。 
  

名称 类型 变化范围 描述
SrcAddrMode 整型 0x00–0x03 该原语和随后的MPDU的源地址模式:
0x00 = 无地址(地址字段被省略,详见7.2.1.1.8)
0x01 = 保留
0x02 = 16bit短地址 
0x03 = 64bit扩展地址
DstAddrMode 整型 0x00–0x03 该原语和随后的MPDU的目标地址模式:
0x00 = 无地址(地址字段被省略,详见7.2.1.1.6)
0x01 = 保留
0x02 = 16bit短地址 
0x03 = 64bit扩展地址
DstPANId 整型 0x0000-0xffff MAC服务数据单元将要发送到的实体的16bit PAN标识符
DstAddr 设备地址 参数DstAddrMode所指定的 MAC服务数据单元将要送到的设备的地址
msduLength 整型 ≤ aMaxMACPayloadSize MAC字层实体将要传输的服务数据单元中包含的字节数
msdu Set of octets —— MAC字层实体将要传输的服务数据单元的set of octets
msduHandle 整型 0x00-0xff MAC子层实体将要传输的服务数据单元
TxOptions Bitmap 3bit的范围 MAC服务数据单元的传输选项
对于b0,1 = 被确认的传输;
     0 = 未被确认的传输
对于b1, 1 = GTS传输;
     0 = 信标模式的PAN中的CAP传输
对于b2, 1 = 间接传输;
     0 = 直接传输
对于非信标模式的PAN,比特b1总被设为0
SecurityLevel 整型 0x00-0x07 使用的安全等级(看7.6.2.2.1中的表95)
KeyIdMode 整型 0x00-0x03 由于表示密钥的模式(看7.6.2.2.2中的表96)。如果参数SecurityLevel被设为0,改参数将被忽略
KeySource Set of 0,4, or 8 octets 由参数KeyIdMOde指定 密钥的源。如果参数SecurityLevel被设为0,改参数将被忽略
KeyIndex 整型 0x01-0xff 密钥的索引。如果参数SecurityLevel被设为0,改参数将被忽略
7.1.1.1.2 使用时机

  当本地SSCS实体一个MAC服务数据单元传输到对等SSCS实体时,将产生一个MCPS-DATA.request原语。

7.1.1.1.3 接收后的处理

  接收到MCPS-DAT.request原语后,MAC字层实体将传输MAC服务数据单元。 
   
  MAC子层根据提供的参数构造服务数据单元。参数SrcAddrMode和DstAddrMode中的标志与帧控制字段中的地址一致,用于构建MAC头部的帧控制字段和地址字段。如果参数SrcAddrMode和DstAddrMode都被设为0x00(也就是说地址字段被忽略),MAC字层将使用 INVALID_ADDRESS状态发出确认原语MCPS-DATA.confirm。 
   
  如果参数msduLength比aMaxMACSafePayloadSize大,MAC字层将把帧控制字段中的帧版本设为1。 
   
  参数TxOptions表示MAC子层服务数据是如何传输服务数据单元的。如果TxOptions指定传输需要确认,帧控制字段的确认请求将被设为1(看7.5.6.4)。 
   
  如果TxOptions指定需要GTS传输,MAC子层将查看自己是否有有效的GTS(GTS的使用规则,情况7.5.7.3)。如果不能找到有效的GTS,MAC子层将使用状态 INVALID_GTS发送确认原语MCPS-DATA.confirm。如果找到了有效GTS,MAC子层将根据需要延迟(知道GTS)。如果TxOptions指定不需要GTS传输,MAC子层将在信标模式的PAN网络中的竞争接入阶段使用实现CSMA/CA传输服务数据单元,或者在非信标模式的PAN网络中使用非时隙的CSMA/CA传输服务数据单元。在TxOptions中指定GTS传输将覆盖一条间接传输请求。 
   
  如果参数 TxOptions 指定需要间接传输,并且该原语被协调器的 MAC 字层所接收,那么被发送的数据帧将采用间接传输方式。也就是说,数据被添加到协调器所存储的挂起处理列表中,设备使用 7.5.6.3 中的方法自由处理报文。如果目的地址是一个胳膊地址,将使用 7.2.1.1.3 中的机制处理。如果目的地址是一个单播地址,将使用 7.5.6.3 中的方法自由处理。如果协调器没有能力存储报文,MAC 子层将丢弃该服务数据单元,并使用状态 TRANSACTION_OVERFLOW 发出一条确认原语。如果协调器有能力存储数据,它就会将信息添加大列表中去。如果在macTransactionPersistenceTime时间段 内都没有处理该报文,MAC 子层将丢弃该报文,并使用状态 TRANSACTION_EXPIRED 发出一条确认原语。7.5.5 描述了报文处理流程。 如果参数 TxOptions 指定指定为间接传输,但是原语的接收设备不是协调器,或者目的地址不存在,或者参数中同时还指定了 GTS 传输,该间接传输选项将会被忽略。 
   
  如果参数 TxOptions 指定不需要间接传输,MAC子层将在信标模式的PAN网络中的竞争介入阶段使用CSMA/CA机制传输服务数据单元,或者在非信标模式的PAN网络中直接能够CSMA/CA机制传输服务数据单元。如果参数 TxOptions 指定需要直接传输,且 MAC 子层在 macMaxFrameRetries 时间段内一直没接收到确认消息(7.5.6.4),将丢弃服务数据单元,并使用状态 NO_ACK 发送一条确认语句。 
   
  如果参数 SecurityLevel 被设置为 0x00 以外的有效值, 表示该帧需要安全机制, MAC 子层将会设置帧控制字段的安全使能位为1。MAC 子层将基于参数 DstAddr、SecurityLevel、KeyIdMode、KeySource 和 KeyIndex 封装发送帧(7.5.8.2.1)。如果在封装发出帧的时候产生了如何错误,MAC 子层将会丢弃该帧,并使用帧封装过程中返回的错误状态发出一条确认原语。 
   
  如果请求的报文太长,大于 CAP 或者 GTS,MAC 子层将丢弃该帧并使用状态 FRAME_TOO_LONG 发出一条确认原语。 
   
  如果使用 CSMA/CA 算法发出的消息失败(由于信道状态不好),并且参数 TxOptions 指定需要直接传输,MAC 子层将丢弃服务数据单元,并使用状态 CHANNEL_ACCESS_FAILURE 发送一条确认语句。 
   
  如果 MAC 协议数据单元被成功传输,且(如果需要)接收到确认消息,MAC 子层将使用状态 SUCCESS 发出一起确认原语。 
   
  如果原语 MCPS-DATA.request 的任何传输不被支持,或者超出范围,MAC 子层将使用状态 INVALID_PARAMETER 发出一条确认原语。


这篇关于IEEE 802.15.4协议完整中文版(6)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

macOS彻底卸载Python的超完整指南(推荐!)

《macOS彻底卸载Python的超完整指南(推荐!)》随着python解释器的不断更新升级和项目开发需要,有时候会需要升级或者降级系统中的python的版本,系统中留存的Pytho版本如果没有卸载干... 目录MACOS 彻底卸载 python 的完整指南重要警告卸载前检查卸载方法(按安装方式)1. 卸载

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二