2.2 软件设计
该设计采用曼彻斯特编码方式,用2位二进制数来表示一位二进制数据信息。编码波形的上升沿用01来表示,对应数据信息0;下降沿用10来表示,对应数据信息1。首先,对w78E365进行初始化,使计数器TO工作在16位定时器工作模式下;T1工作在计时器工作模式下,对T0,T1赋初值,使:
TLO/1=(最大计时次数一要计数次数)%256
THO/1=(最大计时次数一要计数次数)/256
然后,设同步脉冲定时值为一位半码宽,将有效数据编码采用半位码宽定时。接着启动定时器T0,检测同步沿的到来。若检测不到同步沿的到来,则继续检测;若检测到同步沿的到来,则开始读端口状态,并启动计时器T1。当检测到下一跳变沿到来时,使计数器数目加1,且将对应端口数字1编码为10,对应端口数字0编码为01。之后进入下一轮循环,直至计数器数目达到码长为止。按照上面操作就可以实现对数据的编码。同理,在进行解码时只要按照相反的逆操作进行即可。
多字节CRC校验的方法一般是移位法。这种方法执行起来速度较慢,但是其需要的空间小;另一种方法是查表法,即预先把多字节可能产生的余式计算出来组成一个余式表,直接查表而不进行二进制的除法。这是一种快速的方法,但是需要很大的空间。用标准CRC一16进行校验,则需要至少1~2 KB,对于MCU来说是很不利的,故选择前者。
该设计采用流密码加密算法,将明文M分割成字符串和比特串M=m0,m1,…,mj,…,并逐位加密:EK(m)=Ek0(m0),Ekl(m1),…,Ekj(mj),…,其中密钥流是K=k0,k1,…,kj…。对明文加密就是将K和M对应的分量分别进行模2相加,得到密文序列C。在接收端,合法的接收者将密文序列C与上述密钥序列进行简单的模2相加,将原来的明文恢复出来。序列密码使用一个比特流发生器,以产生随机二进制数字流,称为密码比特流。密码比特流直接作为密钥使用,而且其长度与明文报文的长度相等。考虑到比特流发生器不是真正随机的实际情况,流密钥生成器用线性反馈移位寄存器构造。
2.3 防碰撞程序
该设计采用非基于位碰撞的二进制算法来实现防碰撞。防碰撞流程如图5所示。
具体流程如下:
(1)发送Request命令给应答器;
(2)发送Group-select命令和Ungroup-select命令给所有应答器,使所有或部分应答器参与冲突判断过程:
①若有冲突,读写器发送.Fail命令给选定应答器,直到没有冲突;
②若没有冲突,读写器发送Select命令给应答器, 选定该应答器。
(3)发送Data-Read命令给选定的应答器:
①若正确接到应答器反馈的信息,读写器发送Success命令给选定应答器;
②若未正确接收到应答器反馈的信息,发送一定次数Resend命令给选定应答器。超过该次数则认为有冲突,进入步骤(2)的①。
(3)当读写器读写信息成功后,读写器对选定应答器发送Unselect命令,使应答器进入完全非激活的状态,不再应答读写器发送的命令。
为了重新活化应答器,必须暂时离开读写器的作用范围,以实行复位。通过以上程序就可以实现系统的防冲突功能。
3 结 语
设计在Modelsire 6.1中进行功能和时序仿真,并通过Altera QuartusⅡ6.0的Stratix EPl SlOF484C5器件综合。结果表明,该算法使用的寄存器为347,比基于位碰撞的算法使用的寄存器数少得多,节省了硬件资源。最大读写标签数为3 595,读写速度可达每秒1 000个标签,防碰撞算法效率接近50%,比传统算法具有更高的TDMA信号利用率及平均识别效率。支持SSB-ASK和DSB-ASK双重调制方式,具备单、双天线模式,体积小,集成度高,可作为手持终端,且能够在各种环境下即插即用。