关于802.15.4

这个协议栈呐,有意思。只给规定了mac层和phy层。zigbee的协议栈的底下两层就的它。(具体的版本得注意,802.15.4有很多个版本,zigbee用的是最早的2003版本,那我就以2003版本为例)

千万不要去买XX书来看,这玩意,老老实实啃一下datasheet才是王道。


       首先,不得不说,协议的制定者真是制定协议的。。。。几乎不管我们怎么去实现。比如如果你用C/C++来实现,协议规定的操作(编程语言里对应的函数)的返回值可能会是不定量个。真想骂个人,nnd,你用C函数返回不定量数目的返回值试试。用C++恐怕也得用boost的结构体。所以一般的协议栈的实现都不会按照协议标准来,但是外部实现的功能是相同的。比如TI的ZStack,MAC和PHY工作原理和协议书上写的基本半毛钱关系没有(也不能这么说,大部分概念还是在的,但是违反标准的程度基本是随心所欲,反正实现功能就行了)

      所以,如果要用像ZSTACK这种商业软件,就直接只看他们的文档(很丰富,很全面),如果对研究协议栈感兴趣,就得看一下标准的协议文档了。

      我对标准最熟,就以标准来说明。

      协议标准里不会跟你说寄存器相关的事,它不会说HAL(硬件抽象),所以这部分肯定得自己解决了(其实就是把对寄存器的读写封装成几个C/C++函数)。

      协议的有意思的就在于分层。如果只有两层分层就会显得非常啰嗦。因为PHY层极其简单,MAC的复杂度是直接上了一个台阶。不过这也是人家分层的理由,算了,仁者见仁。每一层重要的包括:命令、数据格式、属性参数三种。属性参数用来存储本层的属性,数据格式规定了命令参数的格式,命令就是本层所能提供给上层的操作。对应到编程语言中,命令是函数,数据格式是数据类型,属性参数是变量。

      每层都要处理两个逻辑,向上和向下的。很容易理解,每层的函数都是暴露给上层调用的,但是比如接收到一个数据包,这样就需要通知上层,就造成了下层调用上层的现象。在C里面还容易解决,在C++里,对象之间循环引用。。。。。亲,你懂的。

      PHY层的命令包括:数据、CCA(信道检测)、ED(能量检测)、设置RF状态(开关)、设置获得本层属性。就这么几种操作。很简单。

      MAC层的命令就很多了,且不论安全方面的:连接请求的(Association、DisAssociation)、数据、PAN ID(局域网地址分配)、Orphan(掉线处理)、Beacon、Coordinator、GTS。后面那仨不解释了,一句话解释不清。拿出一个都是一个小型系统。单一个连接部分的复杂度就超过了整个PHY。

      当然,对整个协议栈理解到这里基本就可以啦。细节的东西直接查datasheet就好。我发现要做一个东西,必须得先对其有纵览式的了解,不需要太详细,但是要说明白基本概念。如果一些基本概念不懂,后面的细节再怎么努力都会觉得郁闷。比如maya,如果你不懂节点是啥,maya学出花你也不可能是个高手(中国还真不少这样的“高手”。。。)。

你可能感兴趣的:(编程,c,工作,存储,文档,语言)