RFIDler:一款定义RFID的读、写、仿真器的开源软件

 

  这种情况是,用一个长脉冲代表 ’ 1 ’ 用一个短脉冲代表 ’ 0 ’ ,因此,这里的信号的意思就是 ’ 11000 ’ ,或者如果你用HITAG2算法的话,意思就是 ’START_AUTH’

  正如我们提到的,标签也会给阅读器返回信息,它是通过短路自己的线圈使阅读器的线圈发生阻尼现象。结果如下图:

  

 

  这看起来好像是阅读器本身发送了一条信息。但是请注意,阅读器发送的波幅度一直在变化,但不可能减小到没有。相反,它要么是一个阻尼波要么是一个非阻尼波。这是因为并不是直接通过控制阅读器线圈上的电压达到的效果,而只是通过感应来影响波形。但它依然是可以读的。这个时候,如果我们把阻尼作用当成是 ” 1 ” ,非阻尼作用当成是 ” 0 ” ,我们就能得到 ’1010101010010110011010’ ,这也就是 曼彻斯特编码的方式。

  那么,曼彻斯特编码要做的事情是什么呢?好,这个时候它就开始变得有趣了——如果你仔细观察下这些不同规格标签,你会发现他们提到很多种调制方案,例如“曼彻斯特(Manchester)”,“双相(Bi-Phase)”,“移频键控(FSK)”,“相移键控(PSK)”,‘NRZI’,‘ASK’……

  我们准备的设备只能做 ASK,那 FSK/PSK/Manchester malarky这些方案是怎么样的呀?

  这也是我一直很混乱的地方。如果你想做一个和现有供应商制定的 RFID不一样的产品,恭喜你,你掉坑里了,因为各种调试方案是相互冲突的。尤其是想找出能解调所有方案的阅读器就更难了——如果你想找到一个阅读器可以访问到所有编码方式的数据,那是不可能的。如果阅读器想要进一步解调发送的信号。他们需要先确定信号是用什么方式编码的,为了达到这个目的,阅读器首先需要知道他们即将接受的标签是采用哪些方式编码的。

  事实上我需要的仅仅只是最简化的RFID阅读器,所以只需要能得到一些最低等级的数据就可以了,但很奇怪的是,居然没有现成的。每一个调试方法都是一个不同的电路,而且网上的这些电路看起来就是用来炫耀的,比如这篇200页的文档

  http://ww1.microchip.com/downloads/en/devicedoc/51115f.pdf

  在一通乱找之后,我们找到了一个比较简单的设计:全世界最简单的RFID阅读器(链接: http://forums.parallax.com/showthread.php/105889-World-s-simplest-RFID-reader )。这有一个改进版的 ” DIT一个FSK的RFID阅读器 ” (链接:http://playground.arduino.cc/Main/DIYRFIDReader )。事实上,这些其实也并不很符合我们期待的那样。

  我们使用PM3来阅读不同型号的标签发出的原始数据,PM3将作为阅读器的线圈,并且过滤掉载波,留下阻尼的影响。

  下面是ASK调试信号:

  

 

  正如我们所想的的那样,一个简单的由载波的阻尼和非阻尼影响产生了一个方波。

  下面是 FSK标签:

  

 

  注意两种不同脉冲的形状,一个是瘦的,另一个长得比较胖。这样我们就能看到不同频率的脉冲了。

  接下来的是PSK:

  

 

  好吧,我也要疯了,这究竟是什么鬼???

  首先,图中绿色的线表示标签的阻尼/非阻尼影响下的阅读器线圈上的电压。我们并不需要知道具体的代表什么,只需要知道屏幕地步是0V电压,或者说是全阻尼,而屏幕顶部是某一个电压值,或者说是无阻尼状态。电路产生的是125KHz的载波,并且可以提高或者降低输出。至于说他具体是怎么工作的,我他妈才不管,这是芯片的事情。

  现在我们知道了每条线的意思,问题就剩下了这些线为什么会是这样形状的。第一个例子很简单:ASK/OOK调制不是ON就是OFF,因此我们在无阻尼的时候在屏幕顶部得到一条线,而在阻尼的时候,就会在地步得到一条线。