EZMacTM 是为嵌入系统而设计的系列通信软件模块,它利用了Integration公司新的IA4421或IA4420两款无线收发器产品。
EZMac通过ISM频段的射频链路发射/接收短包数据。在目前的EZMac系列产品中,最大有效负荷为16字节。
EZMac不需要独立的单片机(MCU)。在数据收发过程中,EZMac使用EZRadio无线芯片组的资源,只是以在主CPU上运行的中断服务程序(ISR)的形式在后台执行。因为前台环路中无需包含MAC引擎的任何一个部分,因此前台环路自身就能被嵌入式应用程序充分利用。
EZMac支持种类多样的寻址模式、冲突检测、错误检测(CRC)和跳频等方式。
EZMac被应用在可寻址节点多至255个的点-点或者主从通信网络中。
EZMac以状态机形式来实现,通过两个中断程序来运行。
时钟中断(Timer IT)可以实现不同的定时任务,外部中断负责处理无线收发器的中断请求。
EZMac的行为由存储在各个寄存器中的一系列参数决定。处于上层的软件层可以通过以C语言函数形式实现的指令来与媒体存取控制层(MAC)进行交互。
以下是MAC引擎的简要流程图。
休眠模式
初始化之后,MAC层处于“休眠”模式。在这种模式下,射频硬件是完全关闭的,仅消耗不到0.3uA的电流。在开始发射或接收之前,至少需要5ms来唤醒MAC。这5ms是晶体振荡器达到稳定所需的最长时间。
空闲模式
使用唤醒命令唤醒收发器后,MAC就切换到“空闲”模式。在这种模式下,MAC等待进一步的指令。虽然收发器中的晶振已经在运行,但射频的各个模块还是处于禁用状态,芯片的电流消耗大约是0.6mA。MAC系统始终处于该模式中,直到接收到下一个接收、发射或休眠指令为止。
因为EZMac仅支持半双工通信,所以不能同时发射和接收。
发射模式
发送发射指令之前,数据会和它的目标地址一起装载到MAC对应的寄存器中。发射指令发送后,MAC开始发射。芯片的电流消耗激增到26mA(在最大输出功率的情况下,但实际的消耗电流取决于输出功率的设定)。完成发射任务后,如果MAC还处在激活状态,它会自动回到空闲模式或直接进入休眠模式。
接收模式
在“空闲”模式中,如果MAC接收到接收指令,它会改变到“接收”模式。收发器的消耗功率增加到大约15mA左右。MAC扫描可用的频率,以有效地实现数据的传输。
一旦接收到一个有效的数据包,而且该数据包通过了所有激活的错误检测和地址过滤,MAC就把收发器工作模式改为节电模式,等待更高层的软件读出接收数据。读出数据之后,MAC也会进入“空闲”模式,或者直接进入“休眠”模式。
EZMAC的包过滤方法
EZMac具备智能化的包过滤功能。过滤器可由几种选项来配置,以便能很好地满足处于更高的软件层(应用层)的需求。
EZMac被配置好后,更高层将只需发射和接收有效数据。EZMac则执行所有的打包和拆包的任务。EZMac自动运行CRC,上层仅得到没有错误的数据包。
下图是数据包过滤的流程图
图中:Customer ID Filter——客户ID过滤器,Network Addr Filter——网络地址过滤器,Broadcast filter——广播过滤器,Packet length filter——包长度过滤器, CRC Filter——CRC过滤器,BOLD: EZmac control register——粗体:EZmac控制寄存器,
Italic:Single bit of PFCR register—— 斜体:PFCR寄存器的单个位
实时操作
数据包的过滤在接收过程中实时进行。这就意味着,当接收到一段(字节)数据包报头时,过滤器就会对数据包进行检查。如果相应的过滤器检测到数据包报头的任何一部分有错误时,都会终止数据包的接收。
这种技术使EZMac在接收进程刚开始的阶段不去理会意外出现的无效数据包。终止数据包的接收后,EZMac会及时报告错误并跳到下一个可用的频率上,继续搜寻有效的数据包。
实时的数据包过滤节约了各种资源(处理器的消耗功率和电池的使用寿命), 而且,因为无需处理无效的数据包,所以减少了资源浪费而达到了显著提升系统性能的目标,同时也避免了其它频率上的重要数据包的丢失。
客户ID过滤
CID是使用EZMac协议的用户的唯一ID号。虽然是否使用CID是可由用户自选的,但是强烈推荐用户使用CID,以避免安装在同一区域的、均使用EZMac的不同系统之间出现意外的交互。如果使用了CID,CID会紧跟在前导和同步码后发射出去。这就意味着在先入先出的算法中CID是第一个被读到的字节。
因此,数据包接收一开始,EZMac就能识别出接收包的开始,继而确定它是否为系统内的数据包。如果不是,MAC就会取消接收,并跳转到下一个频率,继续搜索有效数据包。用户可以从Integration公司处得到CID。
发射包过滤
EZMac通过检测接收包的报头中的发送者ID字段来对接收的数据包进行过滤。如果发射包过滤器启用的话,MAC将仅从特定的某一节点或者某群节点处接收数据包
群组是通过数据包报头的发送方ID(SID)中的重要位和SFLT寄存器中的相同数位的掩码运算来定义的。如果出现以下情况,数据包才算通过过滤:
SFLT & SMSK == SID & SMSK
Where:
&: Bitwise AND operator
SID: 发送方ID号在接受到的数据包的报头中。)
如果把SMSK设置成0xFF时,群过滤器的选项就不可用了,这时MAC只能从有SFLT地址的节点处接收数据包。
目的地址过滤
目的地址包滤包括3种地址过滤,这三种方式都要检测接受数据包报头的DID字节:
自绑定地址过滤
多播地址过滤
广播地址过滤
自绑定地址过滤器始终是可用的,但是多播地址和广播地址的启用和停用是各自独立的。只要数据包能通过上述任何一个过滤器,就能通过目的地址过滤器。
自绑定地址过滤
只用通过自绑定地址(SFID)才能在通信网络中识别EZMac。也只有那些报头中DID字段显示SFID的数据包才能通过自绑定地址过滤。
多播地址过滤
多播地址负责检测接受包是否为一组组节点所专用,以及EZMac是否是该群组的一部分。多播定址有两个方法:
定义一个称为多播地址(MCA)的专用地址。只有报头中的DID字段等于MCA的那些数据包才能通过多播过滤器。
在自绑定地址过滤中定义并使用多播屏蔽(MCM):
DID & MCM == SFID & MCM
where & is the bitwise AND operator
其中&是逐位进行的AND运算。