EZMacTM媒体接入控制软件(07-100)
网络定址方式中的地址过滤器
本文引用地址://m.amcfsurvey.com/article/91986.htm
图3 网络定址模式的操作流程
图3显示了网络定址模式的操作流程。在这个模式中,数据包的定址和过滤都更为简单。虽然没有独立的发送方和接收方的地址,但是使用了一个被称为“网络ID”的16比特的单地址来识别通信网络中的成员。
网络中的所有信息都是广播信息。然而,广播寻址也需要支持特殊模式,例如学习模式或者网络之间的通信。
在“接收”模式中,接收到的16比特的网络ID将与由NIDFL和NIDFH寄存器共同组成的16位地址进行比较。如果缩小地址范围,NWID也可以仅具备8位的宽度,而只需与NIDFL寄存器进行比较。
在“发射”模式中,NWID段的数据包报头由NIDL和 NIDH寄存器组成;在缩减的地址模式中,只有NIDL寄存器可用作8位网络地址。
EZMac的检错方法
EZMac能检测出几种错误,这可以使上层的软件层选择最好的数据发送策略。EZMac检错功能为每一个频率信道都准备了一个独立的8bit错误计数器,并安排了一个公共的控制寄存器。
控制寄存器用来启用/关闭不同种类的检错功能,各个计数器分别各自对应的频率信道上出现的允许错误。计数器不会溢出,能被更上层的软件层清空。
通道忙(冲突)
如果载波侦听(Listen Before Talk)被启用,EZMac在数据包开始发送之前检查该信道,这一检查的实现方式是:在被选中进行传送的频率上让接收器开启至少8 bit周期的时间,并检测DQD信号。
逻辑电平高表示信道正在传送有效的FSK信号。EZMac不会干扰正在进行的发送,也不会再传送新的数据包,EZMac将进入发送错误状态。
这只是检测发送错误,其它错误在接收过程中检测,并且只有在读取不同信道的错误计数器时才能检查出来。
收发同步检错
开始执行接收指令时,要扫描可用的频率,寻找FSK的发射。这个功能的实现方法是像2.4节中描述的那样,通过在信道之间跳转并检测DQD信号来实现的。如果DQD电路在第一轮扫描中报告有FSK的发射,但是直到“等到IRQ超时”指令时,接收机还处于未检测到数据包开始传送,则EZMac就会检测到收发同步错误。然后系统将继续扫描下一个可用频率,并使对应的差错计数器加1。
包起点丢失
如果前面小节部分所描述的错误情形,收发同步错误,在第二轮扫描或后面的扫描中出现,则EZMac就将检测出数据包错误的起点。这就是为什么EZMac能够检测出第三方的FSK传输。
错误CID
在报头中使用客户ID,EZMac在数据包接收刚一开始的阶段就能检测数据包是系统内数据包还是由使用EZRadio芯片组的第三方发射的数据包。当接收机在数据包中识别到同步码的开始字节(2DD4 ,十六进制)时,与收发同步错误情形中相同的错误就会发生。由于CID是报头的第一个字节,EZMac将很快中断接收,继续扫描可用的频率,寻找有效数据。
错误地址
紧随CID字节发射的是地址字节。如果地址过滤器逻辑单元中发现这些字节出现错误,EZMac就可以检测到一个地址错误的告警,然后中断接收,继续扫描可用的频率,搜寻有效的数据包。
错误CRC
如果接收到的包没有通过循环冗余码(CRC)校验,EZMac会创建一个CRC错误的报告,并丢弃该数据包。扫描可用的频率、搜寻有效数据包的工作将继续下去。这种错误告警能给出关于射频链路通信质量的有用信息。
CRC错误出现过多表示线路的质量较差。检测到其它种类错误信息,但CRC错误为数很少,这意味着线路是好的,但是以下情况:
a.)重要的第三方传输,或者
b.)明显的系统内冲突,
将意味着通信策略有问题。
错误的包长度
如果接收到的数据包报头的PL字节是0或者超出MPL寄存器所设定的极限,EZMac会发现包长度的错误。一旦出现了包长度的错误,EZMac会中断接收,继续为有效的数据包扫描可用的频率。
状态机的工作原理
图4是EZMac状态机的状态详图。该图包括了EZMac的九种基本状态。当然,EZMac状态机可具备的状态(子状态)要多得多,但是这九种基本状态是上层的软件层可以看到的。
图4 状态机工作原理
初始化
上层的必须调用EZMac_SysInit ()函数来初始化必要的I/O接口、外设(外部中断和定时1单元)和处理器的寄存器。上层还必须调用 EZMac_Config ()函数来初始化EZMac和EZRadio收发器的芯片。这两个函数都包括在加电重启程序中?
唤醒
EZMac的状态机在初始化之后进入“休眠”状态。在这个状态中,收发机处于节电模式,功率消耗少于0.3uA。而且在该模式中,收发机会保存所有的设置,能接收SPI指令,但是所有的模拟部分被关闭(包括晶体振荡器)。
EZMac_Wake_Up()函数能打开收发机的振荡器。在振荡器稳定之前,MAC一直处于激活状态。当振荡器稳定后,MAC将进入“空闲”状态。上层可以使用“休眠”和“激活”状态(几个毫秒)来对MAC寄存器和MAC缓存进行读写操作,但是直到MAC进入空闲状态,上层才能使用EZMac_Receive()和EZMac_Transmit()两个函数
接收流程
如果EZMac处于空闲状态,上层可以调用EZMac_Receive()函数,之后EZMac开始扫描有用频率,搜索FSK的发送(“检测DQD”状态)。EZMac周期性的改变频率,该周期大概是10bit的时间长度。如果MAC检测到FSK发送的出现,状态机器会试图接收实际的数据包(“接收数据包”状态)。
如果MAC在溢出时间内没有检测到同步码(参见2.4节),它会报告错误,自动回到检测DQD的状态,继续搜索有效的发送。如果MAC检测到同步码,它将开始数据包接收。EZMac在接收中的确要进行地址过滤和CRC检测。
如果数据包是有效的(所有地址和CRC都正确),状态机进入“数据包有效”状态,并在此状态等候,直到上层读取缓存器或者调用EZMac_Idle()函数。上层读过缓存器或者调用EZMac_Idle()函数之后,状态机器进入空闲或休眠状态(具体由接收控制寄存器的AXOR位的数值来决定)。
如果接受包不能通过过滤器,EZMac将回到Checking DQD状态,搜索下一个数据包。
发射流程
上层在休眠、空闲和唤醒状态下都会填充缓冲器。如果状态机处于空闲状态,数据包传输可以由上层通过调用EZMac_Transmit(void)函数来启动。如果“Listen before talk”函数可用,设备会检查信道 (载波侦听状态),只有在信道空闲时才开始发送数据包。在发送过程中,MAC始终处于“发射数据包”状态。
如果出现数据包的发送(发射状态),状态机自动回到空闲状态(AXOR位是0)或者休眠状态( AXOR位是1)。如果信道被占用,那末下一个状态就是“发送错误”状态。
此时,状态机处于等待状态,直到调用EZMac_Idle()和EZMac_Transmit()函数:
·状态机收到EZMac_Idle()进入空闲或者休眠状态(具体取决于AXOT位的值)
·状态机收到EZMac_Transmit()指令后又开始发送数据包。
上层能在“发送错误状态”下改变信道。如果“Listen before talk”函数没有激活,数据包将不经过信道检查就开始发送。
获取EZMac的状态信息
象前面所描述的,上面的层能看到九种主要状态。Mac状态寄存器(MSR)的前四字节携带了实际状态的代码。这个编码可以在任何时刻由EZMacReg_Read ()函数读出。MSR寄存器能随着MAC状态的改变实时刷新。更多细节参见MSR部分。
处理器负荷
正如前面提到的,EZMac的状态机以两个中断程序的形式运行。尽管它运行在不同状态会使处理器的产生不同的负荷,但是仍然有一些状态完全不会构成处理器的负荷。
评论