当前位置:首页 >> 信息与通信 >>

SimpliciTI 简单模块化得RF网络开发手册


SimpliciTI 开发者文档

SimpliciTI: 简单模块化得 RF 网络开发手册 Simple Modular RF Network Developers Notes

作者: Larry Friedman 译者:Aaron Xu 文件名: SimpliciTI Developers Notes_cn.doc

/>SimpliciTI 开发者文档

1 / 17

SimpliciTI 开发者文档

版本 0.99 1.00 1.10 1.20 1.30 1.40

描述 预发布的草稿 原始发布版 对 SimpliciTI1.00 版的修订 对 SimpliciTI1.04 版的修订 对 SimpliciTI1.06 版的修订 对 SimpliciTI1.10 版的修订

日期 2007.5.2 2007.6.2 2007.8.31 2008.2.1 2008.8.1 2009.3.24

SimpliciTI 开发者文档

2 / 17

SimpliciTI 开发者文档

目录
1. 介绍.........................................................................................................................5 2. 参考.........................................................................................................................5 3. 概述.........................................................................................................................5 4. 硬件配置.................................................................................................................5 4.1 MCU 接口.................................................................................................................5 4.2 Radio 配置................................................................................................................5 5. 结构概述.................................................................................................................6 5.1 协议层......................................................................................................................6 5.2 NWK 程序.................................................................................................................6 5.3 层特性.....................................................................................................................7 6. 协议概述.................................................................................................................7 6.1 拓扑结构.................................................................................................................7 6.2 设备对象..................................................................................................................7 6.2.1 End Device.....................................................................................................8 6.2.2 Access Point.................................................................................................. 8 6.2.3 Range Extender............................................................................................. 8 6.3 地址命名空间.........................................................................................................8 6.4 网络规则.................................................................................................................8 6.4.1 Linking........................................................................................................... 8 6.4.2 Joining........................................................................................................... 9 6.4.3 休眠的节点设备..........................................................................................9 6.4.3.1 轮询设备...............................................................................................9 7. 应用程序...............................................................................................................10 7.1 开发环境...............................................................................................................10 7.2 硬件抽象...............................................................................................................10 7.3 MCU 资源...............................................................................................................10 7.4 线程模型...............................................................................................................10 7.4.1 点对点 IO................................................................................................... 10 7.4.1.1 输入/接收........................................................................................... 10 7.4.1.2 输出/发送............................................................................................11 7.4.2 网络层应用进程........................................................................................11 7.5 对象模型...............................................................................................................11 7.6 API.......................................................................................................................... 12 7.6.1 smplStatus_t SMPL_Init(uint8 (*pCB)(linkID))............................................ 12 7.6.2 smplStatus_t SMPL _Link(linkID_t *linkID)................................................. 13 7.6.3 smplStatus_t SMPL _LinkListen(linkID_t *linkID)....................................... 13 7.6.4 smplStatus_t SMPL _Send(linkID_t lid, uint8 *msg, uint8 len)...................13 7.6.5 smplStatus_t SMPL _Receive(linkID_t lid, uint8 *msg, uint8 *len)............ 13 7.6.6 void SMPL_Ioctl(ioctlObject_t object, ioctlAction_t action, void *val)...... 13 7.6.7 void BSP_Init(void)...................................................................................... 13
SimpliciTI 开发者文档

3 / 17

SimpliciTI 开发者文档

7.6.8 伪代码例程................................................................................................14 8. 网络访问控制.......................................................................................................15 8.1 Join 徽标............................................................................................................... 15 8.2 Access Point Join 上下文...................................................................................... 16 8.3 Link 徽标............................................................................................................... 16 8.4 加密.......................................................................................................................16 9. 只发设备...............................................................................................................16 9.1 Joining.................................................................................................................... 16 9.2 连接.......................................................................................................................16 10. SimpliciTI Ioctl 接口..........................................................................................17 10.1 Raw I/O.................................................................................................................17 10.2 Radio 控制........................................................................................................... 17 10.3 Access Point...................................................................................................... 18 10.4 设备地址控制.....................................................................................................18 10.5 频率控制.............................................................................................................18 10.6 连接控制.............................................................................................................19 10.7 加密钥匙.............................................................................................................19 11. 系统配置........................................................................................................... 19 11.1 通用网络配置.....................................................................................................19 11.2 设备特有配置.....................................................................................................20 12.通用信息和附加说明..........................................................................................21

SimpliciTI 开发者文档

4 / 17

SimpliciTI 开发者文档

1. 介绍
这篇文档将为有效的使用 SimpliciTI 协议提供必要的信息。同样也提供了常用源 码部分的 source code。具体的执行过程会因不同的 Radio 芯片而不同。 尽管协议本身是与硬件无关的,但是 SimpliciTI 中包含了对硬件的支持。

2. 参考
1) SimpliciTI Specification, Texas Instruments, 2007 2) Application Note on SimpliciTI Frequency Agility Description, 2008
3) 4) SimpliciTI Application Programming Interface Application Note on SimpliciTI Security

3. 概述
SimpliciTI 支持两种基本的拓扑结构。 第一种是星状网络, 它具有一个中心 (Access Point)主要用来做网络管理工作。它能够支持多种特性和功能,比如支持休眠 End Devices 的储存并转发(store-and-forward)。网络设备的管理从某方面来看 类似于成员权限管理,例如,连接许可,安全钥匙等等。Access Point 还支持以 End Devices 的方式工作,例如,它能够将自己实例化为网络中的一个传感器或 者传动器设备。 通过几个简单的 API 调用就可以实现整个协议。这些 API 支持用户程序点对点的 传输信息。两个应用程序之间的协调(连接)可以动态完成。Link 程序建立一个 基于对象的链接,使得应用节点之间可以传输消息。如果一个链接已经确立, 那 么它就是一个双向的连接。 这里提供了一个基本的授权机制,而目前流行的做法 是应用程序直接连接到外面。

4. 硬件配置 4.1 MCU 接口
Radio 芯片 CC1100/CC2500 有一个 Radio 到 MCU 的 SPI 接口。另外,该接口 在 SPI 通信接口的基础上另外提供两个引脚。 这两个引脚可以连接到 MCU 的 GPIO 上当做中断引脚来使用。尽管很多参考设计都将这两个引脚都连上 MCU,但是 在本实现中假设只连接了一个引脚(GDO2)。
The CC2520 radio-MCU interface also specifies a GPIO line usable for interrupts and an SPI interface for command strobes and data transfer. The SoC solutions depend on memory-mapped registers for data transfer and command strobes and they supply an interrupt vector location for presenting interrupts.

4.2 Radio 配置
SimpliciTI 开发者文档

5 / 17

SimpliciTI 开发者文档

源码文件中使用的 Radio 初始值由 TI 公司的 SmartRF04 工具生成。代码的发 行版中包含了一份寄存器配置表。 另外为了方便使用,这里还加入了几个 tweak。用到的寄存器配置值,不完全由 SmartRF04 生成。

5. 结构概述 5.1 协议层
该协议为应用层服务, 应用层主要解决节点与节点之间通信的问题。典型的节点 可能是传感器控制器或者传动器控制器。 传感器/传动器节点也可以工作得很好。 在这方面协议层没有任何的差别。 协议层的最终目标是使得多种随意的节点可以 很容易的连接到一起。 下图为各层的示意图

这里没有通常所说的物理层(PHY)和数据链路层(MAC/LLC)。由 Radio 芯片传输 过来的数据已经是完成格式化的,所以可以直接拿来使用。MRFI(Minimal RF Interface)层可以与 Radio 芯片交互,并提供必要的支持。 这里还存在一个部件(没有显示出来)叫做板级支持包(BSP),它用来抽象出 NWK 层使用到的配置无线操作。它无意支持通用的硬件操作。只支持 NWK 与无 线芯片之间的接口操作(例如 SPI 接口)。为了便于使用,它也支持 LED 灯,按 钮或者拨码开关等连接到 GPIO 上的设备。但是没有像 UART 驱动,LCD 驱动等 其他服务。 NWK 层管理 Rx 和 Tx 队列,并且分发到目标地点。目标地应该是应用程序指定 的端口号。考虑到应用程序会解析数据,NWK 层并不解析数据。 这里的端口类似于 TCP/IP 协议中的端口概念。它可以理解为是地址的扩展。网 络桢数据的数据头将被剥离然后其余的有效数据将被分发到应用程序所依附的 那个端口。 NWK 层使用“well-known”的端口。它们的值都小于 0x1F。NWK 层通过这些端 口自己来管理网络。这些端口不会直接被用户程序访问。 用户程序端口在连接的过程中已经由 NWK 层指定。它在这个用户程序中被称为 Link ID。NWK 完成 Link ID 到地址的映射。类似于套接字。应用程序不须指定和 维护这些端口对象。

SimpliciTI 开发者文档

6 / 17

SimpliciTI 开发者文档

5.2 NWK 程序
NWK 程序支持网络管理。 除了可能进行 Ping 操作外, 用户开发的环境不会涉 及到这些函数调用。这里的描述只是为了让开发者更好的理解 SimpliciTI 协议的 原理。

Application Ping Link Join Security Freq Mgmt

Port 0x01 0x02 0x03 0x04 0x05 0x06

Description 类似 TCP/IP 中的操作。 用来连接不同设备上的节点 当 Access Point 存在时,用来获得节点访问权限 用来交换安全数据,例如安全钥匙 用来改变频率,以支持 frequency agility 通用的 NWK 管理程序

5.3 层特性
在这个结构中有两个明确的对等层:NWK 和应用程序。如图 1 所示,应用层分 为两个部分:NWK 应用和用户应用。它们的特性如下表所示。 层 连接类型 应答 NWK 无连接 无 NWK 应用 无连接 有 用户应用 有连接,且是双向连接 可由用户选择 开发过程中要特别注意 SimpliciTI 不支持 NWK 层的应答机制。 这使得用户程序要 自己去提供下面的支持: 大于最大应用负载的数据包将会被进行分割重组 丢失数据(传输层没有 NWK 分发保证机制) 数据冗余(没有重复数据帧辨认)

6. 协议概述
本协议的提供的典型支持是基于连接的点对点通信。这样做是为了将 Radio 芯片 级的函数封装并且屏蔽用户开发时的困难。 功能方面会有几个简单的 API 调用供用户使用。 这样的简单性同时也带来了低价 和高扩展性。 总体来看这个简单小巧的协议将应用在那些对扩展性要求不是很高 的方案中。 下面将简单讨论运行这个协议的方法。

6.1 拓扑结构
本协议的地址仅仅是简单的星形网络拓扑结构。中心为真个网络提供支持。这些 支持包括网络成员关系和网络管理方法,比如跳频和安全。

SimpliciTI 开发者文档

7 / 17

SimpliciTI 开发者文档

本协议也支持没有中心的网络。 在这种北部情况下,该网络可以被认为是一个广 播网或者其节点都被预设地址了。星状网络保持了简单性,在本协议中不支持通 常的路由机制。

6.2 设备对象
设备对象是一个软对象,协议中支持三种设备对象:End Device,Access Point 和 延展设备。 每种设备对象都是逻辑结构, 所以一个既包含 Access Point 也包含 End Device 的硬件平台可以被识别成多个设备对象。尽管如此,大多数的 End Device 通常会是一个单独的硬件设备,或者与其他 End Device 共享该硬件设备。

6.2.1 End Device
End Device 是最简单的设备。它们是网络中所有传感器或者传动器的宿主。End Device 是一个应用点。只有当一个硬件平台是 End Device 时,它才可能用电池供 电。

6.2.2 Access Point
如果 Access Point 存在, 它将作为这个星状网络的中心。 它是个始终开启的设备。 每个网络只允许有一个 Access Point。This can be enforced using constructs discussed below. Access Point 可以和 End Device 在同一个硬件平台上。它们可以拥有节点的功能, 比如传感器或者驱动器,或者两者皆有。 工作在混杂模式下的 Access Point 将会识别有效范围内的所有数据包。另外为了 基本的支持,Access Point 会重播数据帧以便帮助扩展 End Device 的范围。

6.2.3 Range Extender
Range Extender 用来扩展网络的无线距离。它们是始终开启的设备。主要功能就 是重播数据帧,以次来扩展数据帧发送者的有效范围。目前的网络限制只能由 4 个 Range Extender。 虽然可能不是很常用,但是 Range Extender 和 End Devices 可以共存在一个硬件 平台上。它们可以持有一个对等节点,并被识别为一个传感器或传动器,或者两 者兼有。 工作在混杂模式下的 Range Extenders 会接受所有在有效范围之内的数据包。

6.3 地址命名空间
网络中的地址包括两部分:硬件平台地址和应用程序地址(端口) 每个设备的硬件地址在建立的时候就已经被指定,而不可以在运行的时候指定。 每个设备将有一个唯一的地址。 硬件地址空间交由用户来管理。协议中没有地址 解决方案。 目前硬件地址空间有 4 个字节的无符号字符型数组组成。对于 CC1100/CC2500 首地址不能是 0x00 或者 0xFF。数据帧结构中的首字节将被那些处于接收状态的 Radio 芯片处理。0x00 和 0xFF 将会被有过滤能力的 Radio 芯片认为是一个广播, 而引起相应的中断。目前没有规则来检验这个问题。 应用地址(端口)是周知的并且是固定的,或者是在运行态的设备连接过程中指 定的。它不受用户程序的控制。
SimpliciTI 开发者文档

8 / 17

SimpliciTI 开发者文档

6.4 网络规则
这一节将会是一个简短的概述, 主要讨论如何建立点对点传输和如何管理成员关 系。 更多的处理数据帧细节可以在下面的描述中找到。

6.4.1 Linking
Linking 是 SimpliciTI API 其中之一, 它用来建立一个点对点应用的连接。 连接必须 用于两个对象之间。 其中一个对象监听应用程序以便得到与它配对的对象发送来 的连接信息。谁来监听,谁来发送不是固定的,正是因为通信是双向的。通常, 连接会话是由终端用户来触发的,比如按一下按钮之类的物理事件。

6.4.2 Joining
Joining 动作只有在网络中存在一个 Access Point 时才有效。Joining 并不是 SimpliciTI API 其中之一,但是它是初始化调用的一个附属功能。它是一个设备平 台从 Access Point 获得网络访问权的程序。Joining 是设备初始化程序的一部分, 它先于任何其他程序执行。 希望加入网络的平台发送一个 Join 信息。 这个信息中携带一个在建立时由用户设 定的 Join 徽标(目前是一个 4 字节的东东)。这个 Join 徽标会保证不会发生两 个 Access Point 同时响应这个试图加入网络的新设备。 如果这个 Join 徽标与 Access Point 期望的徽标相一致,那么 Access Point 将应答一个带有网络信息的数据包, 以便让该平台能够正确的加入到网络当中。目前,这个信息包括该网络的 Join 三徽标(见 6.4.1 节)。 如果已经卖出的设备被加入网络,并且它包含唯一 join 徽标的做法可能是笨拙 的。 它要求新加入的设备在安装时必须以某种途径获得该网络的 Join 徽标。 解决 这个问题的方案是给 Access Point 加入设置连接上下文的能力,不管接入的设备 是活动的还是非活动的。 这个上下文会在连接上下文运行时启动并且将会使用一 个默认的 Join 徽标。默认情况下 Join 上下文是始终运行的。 加入一个网络的动作只提供一些基础信息, 例如欲加入的设备的 Link 徽标。 Access Point 不跟踪欲加入的设备,除非在 Access Point 要支持设备的储存和转发功能。 (见 6.4.3 节)

6.4.3 休眠的节点设备
休眠的节点设备可以通过一到两种方式来获得信息。一种是查询 Access Point, 看是否有等待状态的信息。 第二种是活动态的监听,如果它是未休眠的它可以接 受分发给它自己的数据。 休眠类型的设备是在建立时就已经被设置好的。

6.4.3.1 轮询设备
当一个休眠的 End Device 被设置成轮询设备,并加入网络以后,它被看作一个 by the Access Point。此时,Access Point 将会为这个设备准备资源。所有非网络 端口上发给这个休眠设备的信息将被 Access Point 保管。广播信息不会被保存。
SimpliciTI 开发者文档

9 / 17

SimpliciTI 开发者文档

当一个休眠设备醒来,它将发送一个带有查询请求的信息给 Access Point。这个 查询请求描述了需要被查询的端口并且通过管理端口发送。Access Point 通过查 询端口发送最开始的那条数据帧到该查询设备。如果 Access Point 上没有相关的 信息,它将发送一个无内容的数据帧给查询端口。 在当前的协议实现中, 每个端口必须分开查询,并且端口上的信息必须全部被读 出。

7. 应用程序
本节中出现的信息将有助于用户应用程序更有效的发挥 SimpliciTI 协议的性能。

7.1 开发环境
SimpliciTI 的开发环境是 IAR Embedded Workbench。除了依赖于 IDE 的文件(如 用默认的连接脚本),其余使用的结构和关键字都是非 IDE 依赖的。 SimpliciTI 不包含汇编文件。

7.2 硬件抽象
该分发版中只提供了最小的硬件系统支持。这个抽象层支持 CC1100/CC2500 的 Radio 接口。 这个接口支持 SPI 和最多两个外部引脚连接, 这两个 Radio 芯片上的 引脚(GDO0 和 GDO2)能够用来产生中断。它还支持目标板上的 8 个 LED 和 8 个拨码开关。 不支持 UARTs,时钟,LCDs 或者其他潜在的外设和片内资源。这些功能的实现将 完全交由用户完成。

7.3 MCU 资源
除了一些代码空间,常量和 RAM,SimpliciTI 不使用更多的资源。目前它并不依 赖于定时器或者动态内存分配, 所以它不占用大量的内存。所有内存分配要么是 静态的要么就是自动变量,因此只需要使用堆栈。如果可能将尽量使用 CONST 型内存以便节省 RAM。 运行时态的上下文不储存在任何连续的内存中。 仅有的几个例外也在代码中被处 理过了,初始化目标(CC1100/CC2500)的过程不会在睡眠模式下丢失运行时态 的上下文。大多数的 SRAM 被保留下来,那些 critical values 都被释放掉了。

7.4 线程模型
SimpliciTI API 一般是被设计成连接线程模性和用户应用程序的。协议中的这些操 作是相互独立的,就像不相关的任务需要他们各自独立的上下文一样。如果代码 运行在存在线程上下文中,这个实现就不需要使用调度器或其他 OS 的架构。 SimpliciTI 为接收到的数据帧准备了一个通用的回调功能。见 7.6.1 节。这个回调 是运行在接收中断中的,所以鼓励使用这样的回调方法。

7.4.1 点对点 IO
在初始化程序后,使用一对 API 中的相关调用将节点相互连接。每个节点上的这 些调用的返回值就是 Link ID。这就是一个句柄,除了自动添加外框以外它就类似
SimpliciTI 开发者文档

10 / 17

SimpliciTI 开发者文档

于套接字。 Link ID 用来鉴别随后的连接过程。基本上 API 包括读(接收)和写 (发送)。

/ 7.4.1.1 输入/接收
Radio 芯片接收到一个数据帧后将引起一个中断并发送给 MCU, 设备将不再处于 睡眠态。这个数据帧从 Radio 芯片的 Rx FIFO 中被读取出来,然后储存到 MCU 的 用户空间里的一个接收队列上。 如果接收队列已经满了, 又接收到新的数据帧时, 最早的那一帧数据将被丢弃。 然后中断线程将被释放。 这是一个相互影响的过程。 当一个应用层次的动作需要读取特定 Link ID 的数据时,接收队列将会检查是否 有等待在该 Link ID 上的数据帧。如果有,则将该数据帧的有效部分将会返回给 调用者。否则,调用者将接收到一个没有数据的指示符。本质上讲,读取动作就 是查询等待在接收队列上拥有特定 Link ID 的数据帧。有效内容将以先进先出的 方式被返回。 如果设备是一个睡眠/轮询设备时,应用层的读取操作将会发送一个查询请求给 Access Point。这部分是对调用者隐藏的。这个线程将会保持并等待 Access Point 返回的应答。 如果 Access Point 还没有接收到帧数据 If the Access point forwards a frame it is then passed back to the caller。如果 Access Point 发送了一个空的数据 帧,就表明这是一个简单的 ACK,并且返回给调用者的数据看起来像是查询到一 个空数据帧。因为这个方案需要保持接收线程直到接收到 Access Point 的返回, 所以它比无睡眠的情况(只是简单的查询接收队列)效率要差。

/ 7.4.1.2 7.4.1.2输出/发送
发送的方案类似一个同步呼叫,直到数据全部被 Radio 芯片发送完成才会返回。 这种方案可以防止数据全部发送完成以前, 不会被意外的 Radio 芯片关电所终止。 如果发送线程不能通过访问 Radio 芯片来发送数据帧,调用者将收到一个相应的 错误代码,并且可以在之后重试这个操作。网络层将会尽量保持它的健壮性, 如 果访问频道的请求不能立刻被批准,那么它将重试几次。但是之有很少的几次。 用户程序需要自己决定该怎样处理这种情况,因为 SimpliciTI 的网络层并不保证 传输的有效性(见表 2)。只有应用程序知道要传输的数据帧到底有多重要。电 池消耗和传输可靠性方面的平衡将留给用户程序决定。

7.4.2 网络层应用进程
因为 NWK 层的应用进程 (为 NWK 应用端口服务的程序) 不是用户程序上下文的 一部分并且也没有使用调度服务程序,所以它们必须被分别对待。 Join,Link 和 Mgmt 查询数据帧都会从目标设备那里得到一个应答。在应用层这 将作为 ACK 帧。 为了保证这些程序有时间完成自己的任务 (例如加入或者连接) , 应用程序必须等待直到接收到 ACK。因为没有使用回调并且没有使用调度器, send 程序需要保持呼叫进程直到接收到一个应答。所以, 对于 join,link,和 poll 操作,发送方设备将要等待“相当长的时间”(毫秒级)才能够完成。

SimpliciTI 开发者文档

11 / 17

SimpliciTI 开发者文档

接收设备对于同样的应用也是在一个线程内完成的。在这种情况下,接收和应答 在同一个线程内完成。 这个线程还是一个中断线程,所以当处理某些数据帧的时 候可能造成中断被禁用“相当长的时间”(毫秒级)。 注意这些花费“较长时间”的线程并不经常出现。Join 只在启动时使用,Link 基 本上也在启动时使用(当然也可能在其它时候)。Poll 相对多一些,不过还是不 常用。

7.5 对象模型
SimpliciTI 没有正式的模型,并没有规范或者抽象概念来定义节点特性。注意力 主要集中在如何建立点对点的连接以及如何使消息通过空中在各节点间自由的 收发。对象模型是由用户来建立的,它是运行在应用层的协议,建立在节点之上 的。

7.6 简单 Simpliciti 流程
下面是一个简单的 SimpliciTI 会话过程。它与上面的伪代码流程不太一样,不过 它是 SimpliciTI 节点互联的通常情景。 Access Point 可以不用出现。 如果它不存在, 那么两个 End Devices 内的默认 Link 徽标必须一致,或者监听者通过不作应答来 拒绝 Link 信息。

SimpliciTI 开发者文档

12 / 17

SimpliciTI 开发者文档

8. 网络访问控制
对于特定的网络,访问控制有很多含义。类似一个 There is likely a need to guard against rogue devices whether their presence is purposeful or accidental。 SimpliciTI 内建了很多机制来完成多种形式的访问控制。 如果配置过程中有 Access Point 参与,其中两项高级机制就可能实现了。每种方法都在下面有所讨论。

8.1 Join 徽标
如果整个网络配置里包括一个 Access Point,它将会支持 NWK 层的 Join 应用。 这 个应用的主要目的 是为要加入网络的设备提供一些信息,比如提供该网络的参 数。 也可能包括 Link 徽标或者加密钥匙等。 idea is that without properly joining The the network (i.e., knowing the Link token and key) a rogue device could not interact on the network.为了知道网络参数,设备必须知道该网络的 Join 徽标。 用户可以配置一个网络拥有不同的 Join 徽标, 或许也可以为不同产品或者不同的 应用类型配置不同的徽标。Join 请求也可以修改。例如,Access Point 可以给不 同的网络设备指定不同的 Link 徽标。可以修改 Join NWK 层应用的有效位数,来 支持比默认更多的或者不太一样的信息。

8.2 Access Point Join 上下文
Access Point 可以调用 Join 上下文。例如,一个加入设备临近于两个不相关的 Access Point(例如邻居之间),可能要增加一些其他的控制请求来分别设备想要 加入哪里网络。 默认情况下,Access Point 会允许任何带有正确 Join 徽标的 join 数据帧。作为一 个附加的访问控制,用户程序可以为 Access Point 设置 Join 上下文。这意味着它 可以被设置成拒绝任何 Join 数据帧, 除非他被设置成主动的接收该数据帧。 可以 通过 SMPL_Ioctl() API 来实现该功能。

8.3 Link 徽标
如果整个网络配置里包括一个 Access Point,它将会支持 NWK 层的 Join 应用。 这 个应用的主要目的 是为要加入网络的设备提供一些信息,比如提供该网络的参 数。这些网络参数中有一个叫做 Link 徽标。其主要原理是在任何一个网络中都 有一个唯一的 Link 徽标,或者至少是可控的徽标。设备必须使用正确的 Join 徽 标来相互连接,否则他们不能连接。 使用 Link 徽标可以鉴别同一物理位置的两个设备,而且对不需要的设备可以进 行安全控制。

8.4 加密
加密能够用来提供网络控制的功能。尽管目前还没有实现该功能,之后会把加密 层作为一个附加层加入到网络中来,以便能够防御网外设备访问网内资源。

9. 系统配置
SimpliciTI 在建立时需要的配置值。这里将重述一下并附加一些讨论。
SimpliciTI 开发者文档

13 / 17

SimpliciTI 开发者文档

建立 SimpliciTI 设备将需要两种类型的配置文件。一个文件用于给特定的网络上 的设备建立提供宏定义。另一个设备特有的。两种文件都将在下面讨论。

11.1 通用网络配置
smpl_nwk_config.dat 文件包括了下面网络范围的定义。 宏 默认值 注释 MAX_HOPS 3 数据帧最多只重复 3 次 MAX_HOPS_FROM_AP 1 AP 支持的最大距离, 用来 限制网络管理的范围 MAX_APP_PAYLOAD Rx 和 Tx FIFOs 的 最 大 值 , 10
(CC2500/CC1100 等 类 似 的 SoCs为50,CC2430为113). DEFAULT_JOIN_TOKEN DEFAULT_LINK_TOKEN 0x01020304 0x05060708

可以 通 过 改变 该值 获 得 安全性 应该由 AP 来修改,用户 可 修 改
nwk_join.c:generateLinkToken()

FREQUENCY_AGILITY

未定义

如 果 使 用 频 率 捷 变 ( Frequency Agility ) 则 有 用,否则使用连接表里的 第一个通道

11.2 设备特有配置

NUM_CONNECTIONS

默认值 4

注释 支持的连接数, 每个连 接都可以双向通信。 如 果Access Point或Range
Extenders 不 管 理 End Device 可以设置为 0

SIZE_INFRAME_Q

2

对于 End Device 来说两个基
AP 本上足够了。 和 RE 可能会 大 一 点 。 如 果 AP 支 持 store-and-forward 的客户端, 它 可能需要更多的数据队列,因 为要发送的信息要在本地保 存。

SIZE_OUTFRAME_Q

2

如果是同步发送, 这个 输出数据队列可以更 小一点。If an Access Point
device is also hosting an End Device that sends to a sleeping peer the output queue

SimpliciTI 开发者文档

14 / 17

SimpliciTI 开发者文档

should be larger because the waiting frames in this case are held here. Actually 1 is probably enough otherwise THIS_DEVICE_ADDRESS {0x78,0x56,0x34,0x12}

设备地址。 CC1100/CC2500将第一 个字节用来做过滤器, 所以一定不要设置成 0x00或者0xFF。Also, for
these Radios on End Devices the first byte should be the least significant byte so the filtering is maximally effective. Otherwise the frame has to be processed by the MCU before it is recognized as not intended for the device. APs and REs run in promiscuous mode so the filtering is not done. This macro initializes a static const array of unsigned characters of length NET_ADDR_SIZE (found in nwk_types.h).

Range Extender RANGE_EXTENDER Range Extender 的 设 备 类 型 定义 End Device END_DEVICE RX_LISTENS RX_POLLS RX_NEVER RX_ALWAYS Access Point ACCESS_POINT NUM_STORE_AND_FWD_CLIENTS Access Point 的设备类型定义 RX_ALWAYS End Device 的设备类型定义

请正确选择。 RX_NEVER RX_NEVER
是 一 个 只 发 设 备 , RX_LISTENS 和 RX_NEVER RX_LISTENS RX_NEVER 目前还不支持。

3 未定义
SimpliciTI 开发者文档

支持的

store-and-forward 类

型客户端的数量 AP_IS_DATA_HUB

如果定义了该宏, 每次 15 / 17

SimpliciTI 开发者文档

有设备加入时 AP 都将 检查返回。AP 将会运 行一个 监听程序来检 查该连接信息的返回。 ED 必须在收到 Join 数 据帧后立刻执行 Link。

12 12.通用信息和附加说明
以下信息没有特定顺序。 1. CC25xx/CC11xx Radios only:SimpliciTI 使用 SmartRF Studio 配置工具导出的寄 存器设置。这个工具产生无线 RF 配置也产生控制寄存器配置。SimpliciTI 使 用了无线 RF 配置的值但是必须忽略大部分的控制寄存器设置。控制寄存器 是功能性的,所以它们必须被重写。下面的表格显示了由软件直接控制的寄 存器: 寄存器 注释 IOCFG0 GPIO 设置。只能由软件 控制 IOCFG2 IOCFG2 GPIO 设置。只能由软件 控制 MCSM0 状 态 机 设 置 。
PO_TIMEOUT 的 值 是 从 SmartRF Studio 中得到的, 其 他由软件控制。 MCSM1 PKTLEN PKTCTRL0

状态机设置。 由软件控制。 数据包长度,专由软件 控制。 数据包控制寄存器。
WHITE_DATA 的 值 是 从 SmartRF Studio 中得到的, 其 他由软件控制。

PATABLE0

由于 SmartRF Studio 不提供 该值,所以使用软件内建的 默认值。 如果 SmartRF Studio 后续版本生成该值,则采用 之。

CHANNR

通道数目。使用的是
SmartRF Studio 导 出 值 。 However, this can be overridden by defining MRFI_CHAN at the project level as equal to the desired
SimpliciTI 开发者文档

16 / 17

SimpliciTI 开发者文档

channel number.

2. 请看 Frequency Agility 特性的相关细节。 详见本文档的 3.1 节关于使用中如何 修改频道特性。 3. The SMPL_LinkListen() call blocks for a relatively long period of time on the assumption that it is executed in temporal contiguity with the SMPL_Link() call on the 4. peer.闭锁时间可以通过修改 nwk_api.c 中的宏定义来设置。接收数据帧的顺 序是更新的。如果数据帧队列被填满了,而又有新的数据帧到达,这是最老 的数据帧将被丢弃以便释放空间。 5. 当应用程序做 SMPL_Receive()动作时,它将把特定 Link ID 上的最老数据帧的 有效数据接收下来。 6. 当一帧数据要发送到一个储存并转发的客户端时,它们将被按照顺序接收下 来。 7. 广播数据帧和 NWK 层应用数据帧将不会被保存在储存并转发客户端。 8. Access Point 不会记忆加入设备的地址。这就是说 Access Point 重发数据帧而 不管其来源。 (对于 Range Extenders 也同样)这需要应用程序来忽略非法信 息。使用 Join 和 Link 徽标能够避免非成员设备的影响,通过阻止非认证设备 的连接,但是这是不被保证的。 9. 发送给用户应用程序的数据帧都是由 NWK 层检验过的,NWK 通过对比连接 表中的目标端口和源地址。接收数据帧要么被允许通过要么就会被丢弃。否 则没有其他方式可以把它们从接收数据队列移除,应为没有应用程序会试图 恢复这些数据帧。 10. 对 Tx-only 设备的支持还没有全部完成。建议不要将 End Device 设置成 RX_NEVER 类型。

SimpliciTI 开发者文档

17 / 17


相关文章:
模块化开发
SimpliciTI 简单模块化得... 17页 1下载券 《模块化软件在单片机及... 9页 免费 产品模块化开发 9页 4下载券喜欢此文档的还喜欢 ...
光学头模块内部部分开发手册
光学头模块内部部分开发手册_信息与通信_工程科技_专业资料。技术文档今日...设计师模块开发手册 暂无评价 15页 免费 SimpliciTI 简单模块化得... 17页 1...
SimpliciTI开发笔记(中文版)
AP 也有中断设备的功能,譬如,它可以自 己在网络中...MRFI(小型 RF 接口)层包含了所有的与无线电交互所...SimpliciTI 简单模块化得... 17页 1下载券 java开发...
SimpliciTI 体系结构
(uint8_t chan) void MRFI_SetRFPwr (uint8_t...B.调用网络层函数 nwk_nwkInit 注册用户接收数据...SimpliciTI 简单模块化得... 17页 1下载券 SimpliciTi...
zigbee
为了进行模块化的设计,本文采用了基于通用异步收发...射频收发器核心和一颗工业级小巧高效的 8051 控制器...SimpliciTI 协议栈. 物理地址读写工具. 分享到: ...
SimpliciTI API使用指南英文翻译
SimpliciTI API使用指南英文翻译_信息与通信_工程科技_专业资料。对simpilicTi协议栈中函数的说明SimpliciTI应用程序接口文档编号: SWRA221 美国加利福尼亚州圣迭哥德州...
CC2530开发板学习教程
暂无评价|0人阅读|0次下载|举报文档 CC2530开发板...如 Basic RF/SimpliciTI 等;然后会将“奥特曼 ...不提供不同种的网络设备,如协调器、路由器等。所有...
SimpliciTI网络协议的无线数据采集系统设计
喜欢此文档的还喜欢 SimpliciTI 体系结构 10页 免费 SimpliciTI 简单模块化得R....2 网络协议设计 协议采用 TI 推出的针对简单小型 RF 网络的专有低功耗 RF ...
WSN开发系统
WSN 开发系统介绍 开发系统介绍 C51RF-CC2430-WSN ...迅速简单的自动配置 无线传感器网络终端自动配置,当...实验及实验手册:利用 SimpliciTI 网络协议实现点对点...
飞比”Zigbee论坛CC2530开发板学习教程
如 Basic RF/SimpliciTI 等;然后会将“奥特曼 ...本文所提供 的并不单单是这些例子的简单罗列, ...[四]网络结构及协议解析 Basic RF 由 TI 公司提供...
更多相关标签:
模块化ups维修手册 | simpliciti | simpliciti协议 | simpliciti的程序分析 | simpliciti 移植 | at86rf212中文手册 | rf24l01数据手册 | 青春修炼手册简单舞蹈 |