SimpliciTI开发笔记(中文版)

1.简介

此文件为有效使用SimpliciTI协议支持提供必要的信息。文中频繁地提到源代码文件,是因为源代码提供了这种支持。

?

在无线电使用的具体实施中,会有一些差别。参考中提到的固件支持协议本身,而没有特定的硬件。

2.参考文献

(1)SimpliciTI规范,TI,2007

(2)SimpliciTI 频率捷变应用笔记,2008

(3)SimpliciTI API

(4)SimpliciTI应用安全

(5)SimpliciTI应用指南

3.概述

SimpliciTI是一种基于点对点通信的协议。它有两个基本拓扑:严格的映射;另一种是一对多的星型拓扑。AP主要用于网络管理。它支持的特性和功能,如存储和转发给睡眠终端的数据,管理网络设备的成员权限、连接权限等。AP也有中断设备的功能,譬如,它可以自己在网络中实例化传感器或激励。在星型拓扑中,AP作为网络中的集成器。

?

该协议能实现少量的API调用。这些API支持客户应用点对点的信息传递。两个应用之间的关联叫做连接(linking)。连接进程是通过基于可以相互发送信息的应用链接起来的。当一个链接建立的时候,它是双向的。

4 硬件配置

4.1 MCU接口

CC1100/CC2500收音机有指定的无线电MCU接口。除了SPI通信以外,通信接口还提供了最多两个额外的接口线。当连接到MCU时,GPIO可以配置成通用接口。虽然很多参考设计提供了这两种连接,但是在这里只假定完成一种连接(GDO2)。

?

CC2520的无线电MCU接口也指定了一个GPIO不能作为接口,一个SPI接口作为命令选通脉冲和数据传输。

?

SoC方案取决于数据传输和命令选通脉冲的存储映像,并且他们为当前中断提供一个向量地址。

4.2 无线电配置

产生无线电的初始值的源文件由TI的SmartRF Studio工具产生。输出寄存器的配置,包含在分发代码中。

?

另外,在某些情况下,加法寄存器的配置是附加的。这包括设置寄存器,且并没有在SmartRF Studio 中明确地指出来。

5.体系结构概述

5.1 协议层

该协议用于应用层,其重点是点对点通信。这些点通常都是传感器控制器和执行控制器目标。直接的传感器执行器也可以使用。该协议在这里并没有作区别。

?

从执行的角度来看,该协议的目标是使各种任意的对等的应用简单地连接起来。

?

一个分层原理图如下图所示:

没有正式的物理层或者数据链路层(MAC/LLC),数据直接由无线电的帧接收。MRFI(小型RF接口)层包含了所有的与无线电交互所需要的支持。

?

还有一个实体(未显示)叫做板级支持包(BSP),调用与无线电交互时,将SPI接口从NWK层抽象出来。它不是为应用服务时提供一个通用的硬件抽象,只有这些如SPI接口之类的服务,在直接支持NWK-无线电接口时才提供。为了方便,它同样支持LED和按钮/开关等一类依附于GPIO引脚的外围设备。但是没有其他的服务提供诸如UART驱动、LCD驱动和计时器服务。

?

NWK层管理接收和输出队列和发往目标的命令帧。目标一般是由端口号指定的应用。NWK层没有代表应用的帧操作。

?

这些端口类似于TCP/IP的概念。它是地址在概念上的扩展。网络帧的开销被剥落,剩余的载荷用于处理指定端口的应用。

?

NWK层的应用程序是"众所周知"的端口,它们的值都≤0x1F。它们都用于NWK层本身管理网络。这些端口并不是用于直接访问用户应用。NWK层的应用不是基于连接的。

?

用户应用端口由NWK在链接过程中指定。一个成功的链接处理的结果是得到一个叫做链接ID的句柄。链接ID到地址的映射由NWK完成。这个类似于套接字的方法应用程序没有责任去指定或维护端口对象。

5.2 NWK应用程序

NWK应用程序支持网络管理。除了Ping,这些应用程序不是用户开发环境的一部分。SimpliciTI协议是怎么样提供通信环境的,这里的描述提供了一个更全面的理解

5.3 对等层特性

在这个结构中,有两种必须的SW对等层:NWK和应用程序。如图1所示,应用层被划分为两个部分:NWK应用程序和用户应用程序。各种特性如表2所示:

以开发为目的,很重要的一点是,SimpliciTI不支持确认。主要的后果是,这种应用程序需要为自己提供以下的支持内容:

信息的分割和重组大于最大有效载荷应用;

丢失数据(不需要NWK保证传输层的形式);

冗余数据(不需要NWK识别重复的帧);

5.4 信息确认

在SimpliciTI 1.1.0版中提供了一些供确认的支持。当一个应用程序发送一个需要确认的信息时,成功(譬如:确认接收)只意味着,对等NWK层接收到该帧。并不意味着该对等应用程序自己接收到该帧。

?

这不是映射确认,不需要唯一的目标用于确定传输成功。

具体使用细节见参考文献(3)。.

6. 协议概览

该协议提供的功能仅仅是提供了基于连接的对等通信。这样做的目的是在开发过程中,掩饰无线电的基本部分、移除用户关注的部分。

?

该协议的功能是实现一组简单的API调用以能够完成用户的应用程序。简单性与价格的灵活性结合在一起。该版本是使用这个简单、小巧的脚本协议来实现。

?

下面的讨论中总结的机制在该协议的支持下实现。

6.1 拓扑

该协议地址只涉及到了映射拓扑。该协议没有规定的路由机制来支持。AP(如果存在)提供管理网络的支持。这些支持包括网络入口和网络管理功能(比如频率捷变)。

?

一个星型拓扑是通过设置该中心为每个终端的映射来实现的。

6.2 SimpliciTI对象

SimpliciTI对象是SW对象。SimpliciTI提供的三个对象是:终端设备、AP和范围扩展器。每个都是一个逻辑结构,这样多个目标就可以在一个简单的硬件平台上实现了。例如:一个平台包括:一个AP也可以支持一个终端设备。但是大多数终端设备可能独立地活着和其他终端设备一起占据了一个硬件设备。

6.2.1终端设备

这些是最简单的设备。它们是网络中大多数传感器/执行器的轨迹。终端设备控制着应用映射,一个集合终端设备的硬件平台可能是由电池供电的。

6.2.2 AP点

AP存在的时候,可以作为网络中的星型中心。它们是一直工作的设备。只有一个AP的映射网络是可以存在的。这个可以由以下结构来实施。

?

AP可以和终端设备在同一个硬件平台上共存。它们可以集合映射应用程序,以在网络完成传感器或执行器的功能,或者同时完成两者。

AP在混在模式下工作的时候,可以接收到所有的packets。除了基本支持,AP可以自己重新执行帧,而不需要扩展终端设备的范围。

6.2.3范围扩展器

范围扩展器是为了在一个网络中扩展无线电的范围。它们是一直工作的设备。其主要功能是重复帧以有效地扩展帧发射器的球面范围。目前,网络可以有4个扩展器。

?

虽然没有被视为可共同使用,但是范围扩展器可以在同一个硬件平台上与终端设备共存。它们可以集合对等的应用程序,以在网络中实现传感器或者执行器,或者两者共存。

?

在混杂模式下,范围扩展器可以接收到所有的packets。

6.3 地址空间

一个网络地址有两部分组成:硬件平台地址和应用程序(端口)地址。

?

每个设备的硬件地址在建立时就已经指定了。在运行时,有一种性能用来指定地址。在网络中,每个设备的地址必须是独一无二的。硬件的地址空间管理由用户来决定。没有地址解析协议。

?

目前,硬件地址空间由无符号数组成的4字节的数组来组成。

?

在设备链接程序中,应用程序的(端口)地址或是知名的或是固定的。不由用户SW控制。

6.4网络准则

在本节,将简要介绍怎样实现点对点的通信,网络成员怎样控制。

?

在连接进程中有关帧的详细信息见(1)。

6.4.1 链接

SimpliciTI API所支持的链接,是指一个应用程序的映射连接建立。链接是一对对地建立的。一对中的某个应用程序只能侦听到配对的连接信息。侦听到的和发送的连接信息都是任意的,因此,连接信息是双向的。一个典型的连接应用被终端设备的行为激励,比如,按下按钮或者物理干扰。

?

连接信息包括一个连接标记(现在以4字节对象为例),用作侦听的一方确认收到信息。在用户建立时,生成一个默认连接标记。 如果网络中存在AP,可以加入附加的约束条件。见6.4.2.

连接是逻辑实体。一个单一平台可以支持多种点对点的连接。这些连接包括两种同样应用之间的连接、多种应用之间的简单连接或者任意组合。这些连接对可能在任意不同的平台上。SimpliciTI不支持在同一平台上的两个应用之间的连接。

?

设备的连接数目只受到RAM和端口地址的限制。

6.4.2 Joining

只有网络中只存在一个AP时,Join才能实现。Join不是特定的API,而是初始化调用的副作用。这个过程出现在一个平台从一个AP接入网络。Join是一个设备在初始化之后其他动作之前的第一个动作。

?

一个平台在想加入一个网络时,需要发送一个包含Join信息的SimpliciTI初始化信息。该信息包括一个由用户在建立时生成的Join标识(4字节对象为例)。Join标识可以用来确定两个AP不是都用来响应一个新设备尝试加入一个网络。如果Join标识与预期的AP相匹配,那么该AP将回复一个网络信息,使得平台可以正确地与网络交互。目前,这些信息包括给网络的连接标识(见6.4.1)。

如果售后设备加入网络,将使唯一的Join标识使用起来比较难处理。它需要新设备在初装点以某种方式知道网络的Join标识。为了解决这种情况,AP有一个额外的能力去设置Join环境,不管它是否处于活跃状态。在AP,环境的激活方式与连接环境设置方式相同(按按钮等),默认的Join标识可以使用。在默认情况下,Join环境一直处于活跃状态。

?

Join一个网络的行为不提供任何除基本信息以外的东西,譬如:Join设备的连接标识。AP不能寻找Join设备的轨迹,除了查询设备,AP必须提供存储和转发支持。(见6.4.3)

6.4.3 休眠的终端设备

休眠的终端设备可以利用一两种路径去得到信息。一种是查询AP,看是否有信息在等待;一种是侦听活跃设备,如果一直有活跃设备醒着,那么需找帧目标。

?

休眠设备的类型在建立时就已经配置。

?

6.4.3.1 轮询设备

?

如果一个休眠设备设置为轮询设备,当该设备加入网络的时候被认为是AP。在这个时候,AP存储支持该设备所需资源。网络端口所有给休眠设备的信息地址都由AP接入。广播信息不支持。

?

当唤醒休眠设备时,接收一个调用查询,该调用是查询AP信息的结果。这些轮询信息指定的端口受到质疑时,发送到管理端口。AP发送受到质疑端口最老的帧给查询设备。如果没有,AP发送一个没有载荷的帧给查询端口。

?

在当前的实现中,每个端口都必须分别查询,每个端口都必须查询到没有多余的信息在该端口上。

7.应用编程

本节介绍SimpliciTI的实现,将有助于在使用SimpliciTI功能时用户应用的建设。

7.1开发环境

SimpliciTI有两个开发环境。一个是IAR Embedded Workbench。这种环境可以同时用于8051内核SoC的目标和双芯片(MSP430+无线)目标板解决方案。TI的Code Composer Essentials v.3.1(CCE)IDE也支持双芯片(MSP430+无线)目标板的SimpliciTI。

?

除了IDE的相关文件(譬如连接器的脚本是默认给目标板的),没有已知的IDE依赖结构或者关键字在源代码中使用。

7.2 硬件抽象

只提供了最低限度的硬件抽象。这种抽象(BSP)提供无线接口。它在目标板上还包括一个支持8个LED和8个开关的抽象。

?

没有支持UARTs、定时器、LCD或其他潜在外设和片上资源。这些实现全部留给用户了。

7.3 MCU资源

除了flash给的代码空间和常数、RAM,SimpliciTI的实现不使用其他资源。目前,它不依赖于动态内存分配,因此不使用堆内存。所有的内存分配是静态或者自动表现,因此使用堆栈。Const内存用来节省RAM。当使用硬件定时资源时,即使MCU上最后一个入侵定时器被选用了,随意选择一个定时器资源。

?

运行上下文不存在于任意连续的内存,不管是在MCU还是radio上。对于某些已处理的代码有些许例外,在休眠模式下,最初的radio目标不丢失运行时上下文。大多数的SARM是需要维护的,那些没有维护的关键值需要重置。

7.4线程模型

一般的SimpliciTI API被设计为运行与用户程序在一起的线程模型。该协议的运作不是作为一个独立的任务二十需要自己的上下文环境。由于代码的上下文中运行现有的线程,实现不需要进入任何的调度程序或者其他任何操作系统。

?

SimpliciTI API不能被视为线程安全或者重入。

?

SimpliciTI提供了一个接收到帧的一般回调(callback)能力。这种回调在接收ISR线程时运行,因此有效使用回调是值得鼓励的。

7.4.1点对点I/O

初始化之后,API的对等应用程序被一系列的调用连接起来。这些调用的结果是,连接ID。这个是自动处理,就像一个socket(除了自动处理的binding)。连接ID用于引用其后的连接。连接步骤之后,可以参考连接ID读取和写入对等点。基本上,API包括一个读取(接收)和读取(发送)调用。

?

7.4.1.1接收/输出

?

在设备没有休眠的时候,电台接收到的帧触发了一个MCU的中断。该帧被读到radio的Rx FIFO,以一个接收帧队列的形式存储进MCU用户空间。如果输入队列满帧时,当一个帧被接收,那么接收队列中最老的帧被删掉。中断线程被释放,这是一个比较有效的过程。

?

当在连接ID指定的输入帧序列进行应用程序级别的读操作时,检查任何等待帧的连接ID。如果等待帧的有效载荷返回给调用者,否者,调用者接收到的迹象会表明没有数据。在本质上,一个读操作是输入帧序列对任何等待指定连接ID帧的轮询操作。有效载荷按FIFO的顺序返回。

?

如果设备是休眠或者轮询设备,应用层绕开轮询序列访问AP。这是不可见的调用。该线程等待AP的答复。如果AP转发一个帧,则传递回调用者。如果AP发送一个没有返回载荷的帧,它被解释为一个简单的确认,返回给调用者的像一个轮询没有返回载荷。因为在这种情况下保存线程直到接收到AP的返回,比非休眠状态下只检查输入序列的数据效率低。

?

7.4.1.2 输出/发送

发送方案是用一个同步的、直到帧由电台转发才返回的调用实现的。这种设计通过在帧发送之前关掉无线电电源,来避免意外终止一个发送序列。

?

如果Tx线程不能访问广播频段以传送帧,那么调用者将收到相应的返回代码,稍后可以重试。在网络层有一些鲁棒性,因为,如果要访问的频段不能立即达到,那么将有一定的恢复程度。但是,很小。这是留给用户程序来决定如何处理这种情况,因为SimpliciTI NWK并不支持传递确定(见表2)。只用应用程序直到传送的帧有多重要。能耗和通信的可靠性的权衡是留给用户应用程序的。

7.4.2 NWK应用线程

由于NWK应用程序线程(为NWK应用端口提供服务)不是用户应用程序的一部分,并且没有安排服务,他们必须用不同的方式处理。

?

Join、Link和Mgmt轮询每一帧都需要目标设备的响应。在应用层,这使得它们确认帧。为了确保应用程序有机会完成任务(join或link),应用程序将等待确认信息到达。由于不使用callback,也没有涉及的调用发送应用程序,直到收到答复,都保存要调用的线程。因此,joining、linking和轮询发送设备,在完成之前,需要一个"漫长的时间"(几毫秒)。

?

相同应用程序的接收设备在一个线程里处理。在这种情况下,接收和确认(Tx)都在一个线程内完成。在这种情况下,线程是一个ISR线程,以便在处理这样的帧时,它可能中断被禁止 "长时间"(几毫秒)。

?

请注意,虽然这些线程可以"长",但它们不会经常发生,join只发生在启动时,link尽管可以随时发生,但是通常发生在启动时。轮询可能发生的更频繁,但是还是相对少见。

7.5对象模型

SimpliciTI没有正式的对象模型。没有任何剖面或其它抽象,定义对等的应用程序特点。该协议的重点是要建立一种点对点的通信,并支持通过空气传送信息。对象模型是由用户创建的,因为它隐含在应用层的协议在对等点之间建立,

7.6 样品SimpliciTI transactions

下面是一个SimpliciTI对象的示例。它的目的是传达一个一般意义上的SimpliciTI对等点的联系。是否有AP是可选的。如果它不存在默认的连接标识,两个终端设备,或者响应连接信息的侦听者之间的连接标识必须相配。

8.网络访问控制

有一些手段控制访问特定的网络。有可能是需要警惕的恶意设备的存在是有目的的还是意外。

?

SimpliciTI建立了一个编号机制,以允许各种形式的访问控制。当AP是配置的一部分时,这些当中的两种利用添加控制是可能的。这些讨论如下:

8.1 join标识

如果AP是配置的一部分,那么它将支持join NWK应用程序。这个应用的主要目的是提供剩余加入网络的设备的线索,把它当做网络参数。例如,这个包括连接标识和加密密钥。如果没有正确地加入该网络(即知道连接标识和密钥),恶意设备不能在网络中互动。设备需要知道特定网络的join标识,以找到其他的网络参数。

?

用户可以给网络配置不同的join标识,或者,不同的标识给不同的产品或不同类型的应用。Join的响应可以修改。例如,AP可以分配不同的连接标识给不同的网络设备。Join NWK应用的有效载荷可以修改,以提供比默认信息更多或者不同的信息。

8.2 AP 的join环境

这可能要积极调用AP上下文的访问。例如,如果两个不相关的AP一个join设备的附近(就像两个相邻的房子),可能需要额外的控制来限制网络连接。

在默认情况下,AP始终接收一个含有正确join标识的join帧。作为一个加入一个用户应用的附加控制,可以设置AP的join环境。也就是说,它可以设置为拒绝join帧,除非它们被设置为活跃许可。这个通过SMPL_loctl()来完成。

8.3连接标识

如果一个接入点为配置的一部分,它支持加入NWK应用。 此应用程序的主要目的是为其余设备加入该网络提供线索作为这个网络的参数。 这些网络的一个参数是链接令牌。 这个想法是主要为每个网络提供唯一链接令牌将,或者至少可控制的。 随后连接两个设备必须使用正确的标记或者是它们无法链接。

如果没有接入点连接令牌仍然需要建立两个节点之间的连接。 在这种情况下,链接的交换是由默认的链接标记完成,该值由编译的时候提供的。

使用链接令牌提供了一种明确的物理结合的替代方案,这种两个设备物理结合的方案提供的安全性可以把不需要的设备排除在外。

8.4加密

加密可用于增强网络访问控制。 加密的实现版本为SimpliciTI 1.1.0。 见参考文献[4] SimpliciTI安全实现。

9. SimpliciTI SW 定时校准

SimpliciTI设计允许用户选择一个软件定时器模式,这样的硬件定时器可以用于其他目的。这是通过修改smpl_nwk_config.dat文件SW_TIMER指令实现的。?对于IAR的项目,删除- DxSW_TIMER中的x来使能SW定时模式。?对于CCS项目,在—define==SW_TIMER前插入#,来禁用的SW定时模式。?请注意,一些配置是使能SW定时模式来"开盒即用",而其他情况会禁用SW定时模式。

?

该SimpliciTI SW定时器可以提高校准精度。?该SimpliciTI SW定时器可以用下面的校正迭代程序来校正:

1.在mrfi_radio.c中查找APP_USEC_VALUE:

#define APP_USEC_VALUE 496

2. 按照参考文献[5]中的 "对等的两设备"例子来设置。

3. 当运行"对等的两设备"例子时,发送者以1秒,2秒,3秒和4秒的时间间隔重复发送。

4.使用SimpliciTI嗅探器来测量各种延迟时间的实际延迟(见图3)。

5.调整APP_USEC_VALUE使得即使在1秒的间隔内也能获得信息。

6. 重复步骤3,4和5,直到嗅探器观察到所需的延迟时间间隔为止。

图3为嗅探器抓包实例的屏幕截图。发送设备(源地址 7A 56 34 12)以1S,2S,3S,4S,1S,2S,3S,4S,…周期性地重复发送数据。

?

10. 系统配置

参考文献[1]总结了构建SimpliciTI网络时需要的配置值。?这些在这里加以额外的讨论。在构建SimpliciTI时,有两种类型的设备配置文件需要使用。?一个文件适用于一般网络,并为这个特定的网络中的所有设备提供了宏。?另一个文件是设备特定的,?每个文件类型将在下面讨论。

10.1 一般网络配置

smpl_nwk_config.dat 文件包括了以下网络范围内的宏定义:



默认值


评论


MAX_HOPS?


3?


最多只有3次重播帧


MAX_HOPS_FROM_AP?


1?


和一个AP的最大距离。?使用轮询应答限制网络重播阻塞。


MAX_APP_PAYLOAD?


10?


Rx和Tx FIFOs的最大值(CC2500/CC1100类和SOCs是50,CC2430/CC2520 IEEE无线射频为111)。


DEFAULT_JOIN_TOKEN?


0x01020304?


更改这个值可以提供一些访问安全


DEFAULT_LINK_TOKEN?


0x05060708?


在AP网络中授权人可更改此值。?客户应修改nwk_join.c:generateLinkToken()


FREQUENCY_AGILITY?


未定义


当定义后可支持跳频。否则,只有第一个通道表表中被使用。


APP_AUTO_ACK?


未定义


支持自动应答。需要扩展API


EXTENDED_API?


未定义


启用SMPL_Unlink(),SMPL_Ping()和SMPL_Commission()。


NVOBJECT_SUPPORT?


未定义


复位后获取和保存在设置连接上下文。


SMPL_SECURITY?


未定义


使安全机制

表3 一般网络设置宏

?

特定设备设置



默认值


评论


NUM_CONNECTIONS?


4?


支持的连接数。?每个连接支持双向通信。接入点(AP)和范围扩展器(RE)可以设置为0,如果他们不作为主终端设备。


SIZE_INFRAME_Q?


2?


一个终端设备为2就足够了。?接入点和范围扩展器这个值会稍微大一点。?如果AP是支持存储和转发的设备,则需要较大的输入帧队列,因为数据都会保存在这里。


SIZE_OUTFRAME_Q?


2?


输出帧队列可以较小,因为TX是同步完成的。?如果一个AP同时还需要发送睡眠帧到输出队列的终端设备(ED),那么这个值必须大一点。其他情况,1就足够了。


THIS_DEVICE_ADDRESS?


{0x78,0x56,0x34,0x12}


该设备的地址。?第一个字节在CC1100/CC2500上用作滤波器,因此第一字不一定是0x00或0xFF。的。?此外,对于终端设备的射频信号的第一个字节是LSB,因此滤波是最有效的。?否则,在设备识别之前,MCU是不会处理帧信号的。APs和REs在混杂模式下运行,因此没有作滤波。宏NET_ADDR_SIZE(在文件nwk_types.h中)初始化了 一个静态无符号字符数组常量


范围扩展器


RANGE_EXTENDER


设备范围扩展类型声明


终端设备


END_DEVICE?


设备终端设备的类型声明


RX_POLLS?


未定义


定义RX_POLLS为轮询终端设备。


接入点


ACCESS_POINT?


设备接入点的类型声明


NUM_STORE_AND_FWD_CLIENTS?



存储和转发客户数的支持。


AP_IS_DATA_HUB?


未定义


如果定义了这个宏,每次设备加入都会通过回调函数通知AP。AP必须运行应用程序来侦听链接收据上的消息。终端设备加入后,立即收到加入应答。

表4 专用设备配置宏

11. 通用信息和注意事项

下面的是没有特定顺序的罗列的:

1. 只针对CC25xx/CC11xx无线射频的:SimpliciTI使用SmartRF Studio配置工具设置外部寄存器。?这个工具通过空中射频和控制寄器设置寄存器。?SimpliciTI使用空中RF设置但必须忽略大多数控制寄存器的设置方式。?控制设置只是影响功能,使他们不能被覆盖。?下表列出直接由软件控制得寄存器:


寄存器


评论


IOCFG0?


GPIO的配置。?完全由软件控制。


IOCFG2


GPIO的配置。?完全由软件控制。


MCSM0?


状态机的配置。?PO_TIMEOUT的值从SmartRFStudio的输出值中获得,所有其他字段由软件控制。


MCSM1?


状态机的配置。?完全由软件控制。


PKTLEN?


包长度。?完全由软件控制。


PKTCTRL0?


分组控制寄存器。?WHITE_DATA的值从SmartRFStudio的输出值中获得,所有其他字段由软件控制。


PATABLE0?


SmartRFStudio 目前不输出这个值。?如果将来的修订版导出这个值,它将用来代替内置软件的默认设置。


CHANNR?


通道号。?该值是SmartRFStudio 输出值。?但是,这个值有可能在项目中定义了MRFI_CHAN而被覆盖。

?

表5 CC1100/CC2500 寄存器例外设置

2.跳频特性功能的详细信息见[2]。如何在这个特性上修改通道见文档3.1。

3.SMPL_LinkListen()调用阻塞了相对长的一段时间,与此同时SMPL_Link()调用连续性执行。?阻塞的时间可以通过修改nwk_api.c文件中的宏定义。

4.接收数据帧顺序是相同的。?如果帧队列被填充,当新帧到达时,老帧将被丢弃,以腾出空间。

5.当一个应用程序调用了SMPL_Receive(),它从较早的帧收到指定链接ID的有效载荷。?

6.当帧转发到存储和转发的客户,他们将按转发的顺序接收。

7.广播帧和NWK应用帧是不能代表客户存储和转发。

8.如果无线接入点本身的应用程序发送到轮询设备,在其他所有设备发送完后可以发送,而不是按顺序发送的。

9.无线接入点不会记住加入了设备的地址。?这意味着,无论信息来源是哪里,接入点都将重播帧。?(对于范围扩展器也是这样。)它是由对等应用程序决定的而不是流氓消息。?在使用的连接和链路令牌可以减轻设备来自非成员设备的干扰,帮助防止未经授权的连接,但它是没有保证。

10.用户应用帧在NWK层通过匹配目标端口和源地址的连接表条目来验证是否合法。?接收帧必须通过验证,否则将被丢弃。?否则就没有办法从输入帧队列中删除这些信息,因为不会有应用程序试图检索这些帧。?

?

?

?

SimpliciTI开发笔记(中文版)

时间: 2024-12-20 14:07:52

SimpliciTI开发笔记(中文版)的相关文章

张高兴的 Windows 10 IoT 开发笔记:RTC 时钟模块 DS3231

原文:张高兴的 Windows 10 IoT 开发笔记:RTC 时钟模块 DS3231 GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/DS3231 注意:不包含闹钟设置

Android开发笔记(一百零三)地图与定位SDK

集成地图SDK 国内常用的地图SDK就是百度和高德了,二者的用法大同小异,可按照官网上的开发指南一步步来.下面是我在集成地图SDK时遇到的问题说明: 1.点击基本地图功能选项,不能打开地图,弹出"key验证出错!请在AndroidManifest.xml文件中检查key设置的"的红色字提示.查看日志提示"galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy&

微信订阅号开发笔记(二)

微信开发的流程其实很简单 o(∩_∩)o 哈哈!在微信网站的编辑操作 额,就不说了.虽然有人问过.下面是我的微信开发过程,简单记录下. 成为开发者 材料:1.自己的服务器资源,百度的BAE,新浪的SAE都不错. 2.懂那么点编程语言. 3.注册微信公众号. 上面的都有了之后,就可以自己动手开发了.哇咔咔,好兴奋.有木有. 在登录进去之后,怎么成为开发者?不知道,自己看去. 开始coding吧. 1.验证 if (! empty ( $_GET ['echostr'] ) && ! empt

微信订阅号开发笔记(三)

1.接收语音识别结果 if($msgType=="voice"){ //收到语音消息 //MediaId 语音消息媒体id,可以调用多媒体文件下载接口拉取数据. //Format 语音格式,如amr,speex等 $format = $postObj->Format; $mediaId = $postObj->MediaId; //开通语音识别功能,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段. //注:由于客户端缓

微信订阅号开发笔记(四)

1.创建菜单 //创建菜单 public function createMenu(){ $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token="; $url.=$this->getacctoken(); //目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单.一级菜单最多4个汉字, //二级菜单最多7个汉字,多出来的部分将会以"..."代替.请注意,创建自定义菜单

Swift开发笔记

Swift开发笔记(一) 刚开始接触XCode时,整个操作逻辑与Android Studio.Visual Studio等是完全不同的,因此本文围绕IOS中控件的设置.事件的注册来简单的了解IOS开发 1.新建一个Xcode项目,项目目录大致如图: 2.在Main.storyboard添加控件 首先要显示右侧的工具栏(Utilities),之后选择显示Object Library,就可以找到常用的一些控件了,然后添加几个控件到界面中 3.将控件和ViewController进行关联 此时要将Ed

张高兴的 Xamarin.Forms 开发笔记:为 Android 与 iOS 引入 UWP 风格的汉堡菜单 ( MasterDetailPage )

所谓 UWP 样式的汉堡菜单,我曾在"张高兴的 UWP 开发笔记:汉堡菜单进阶"里说过,也就是使用 Segoe MDL2 Assets 字体作为左侧 Icon,并且左侧使用填充颜色的矩形用来表示 ListView 的选中.如下图 但怎样通过 Xamarin.Forms ,将这一样式的汉堡菜单带入到 Android 与 iOS 中呢? 一.大纲-细节模式简介 讲代码前首先来说说这种导航模式,官方称"大纲-细节模式"(MasterDetail).左侧的汉堡菜单称为&qu

web前端开发笔记(2)

web前端开发笔记(1) 一.HTML标签书写有哪些规范? 页面编码. 文档声明. 关键字与描述. 行内元素不能包含块级元素. a标签不能嵌套a标签. 标签名和属性必须用小写字母书写,属性必须加引号,标签必须闭合,单标签页必须闭合. 页面中不要用 进行缩进,如需缩进,用css控制. html标签使用必须语义化. 要为img标签填写alt和title属性. 二.HTML静态页面出现中文乱码如何解决? 引入<meta charset="UTF-8"> 三.通常情况下块属性标签和

[APP] Android 开发笔记 003

接上节 [APP] Android 开发笔记 002 5. 使用ant release 打包 1)制作 密钥文件 release.keystore (*.keystore) keytool -genkey -v -keystore "release.keystore" -alias "release" -keyalg "RSA" -validity "10000" 这里需要注意的是: -keystore "relea