注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

易拉罐的博客

心静自然凉

 
 
 

日志

 
 

转 ISO15693防冲撞原理  

2015-09-29 11:38:38|  分类: 物联网 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        ISO15693标准协议的防冲撞序列如何在MSP430F2370(TI公司MSP430系列16位超低功耗微控制器)中的实现过程:与总量请求命令一起,VCD(可以简单的理解为读卡器设备)发送一个标志值的槽数量。VICC(可以简单的理解为卡片标签)将UID 最低有效位与槽号和标志位相比较。如果吻合,她发送一个响应信号。如果只有一个VICC响应,那么没有冲撞发生,VCD将接受完整的UID码。如果阅读器检测到冲撞,它标记出冲突发生的槽号。阅读器发送一个EOF信号,并跳转到下一个槽。VICC在接收到EOF后增加该槽号。重复16个槽,在16个槽结束时,槽指针内容将会被检测。如果不为0,这就意味着冲撞已经发生在一个或者多个槽。新的标志值将被计算,带着新的标志值的总量请求命令被发送。重复该操作直到无冲撞发生。
        比如VICC在阅读器阅读范围内有以下UID值:E00700000000012A,E00700000000032A,E00700000000045A和E007000000000345。为了方便起见,分别使用x12A,x32A,x45A和x345来代替上述的UID码。
       下面表中的第一行表示槽号,他们的10-16进制码在括号内表示。
第1轮:标志值=0,标志长度=0

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

-

-

-

-

-

x345

-

-

-

-

x12A

x32A

x45A

-

-

-

-

-


        阅读器发送出一个带标志值和长度均为0的总量请求命令。VICC将UID的最低位和槽数+标志相比较。一旦在第1轮中标志值为0,那么VICC只比较他们的UID和槽号。因此,在阅读器阅读范围内的每个VICC将会被找到并相应16个槽中的一个槽。
        在该例子中,槽5,UID码为x345的VICC相应,一旦只有一个VICC在该槽时响应,那么说明没有冲撞发生并且阅读器完全接收了该UID码。阅读器将在TRF7960的中断状态寄存器中置起一个带有RX结束的中断标志位。
        在槽10时,一旦UID码的最后四位匹配10(A),UID码为x12A,x32A和x45A的VICC响应。该冲撞被阅读器识别到并且在中断状态寄存器中设置了冲撞标志位。当冲撞发生时,微控制器响应中断并且记录了该槽号。
       在所有其他槽中,VCD不接受任何来自VICC的响应。阅读器在发送EOF跳转到下一个槽之前,等待预先设置的时间,阅读器置起一个无响应中断标志位,并通知微控制器发送“传输下一个槽”命令。
        注意:阅读器在每个槽结束后跳转到下一个槽时,须发送一个EOF,不考虑VICC的响应。阅读器可以通过一个直接命令来实现。

第2轮:标志值=A,标志长度=4

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

-

-

x12A

x32A

-

-

x45A

-

-

-

-

-

-

-

-

-

-

-


         在第1轮中,阅读器识别到了冲撞发生在槽10。因此,新的标志位=10(新的标志值=槽号+旧的标志值)并且新标志的长度被增加到了4位。VCD发送出另外一个带有标志值为A,标志长度为4的总量请求命令。VICC将UID的低有效位与槽号+标志值(A)相比较。如此,在槽2时,一旦她们的最低有效位匹配2A,x12A和x32A的VICC响应。UID码为x45A在第5个槽时响应。

第3轮:标志值=2A,标志长度=8

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

-

x12A

-

x32A

-

-

-

-

-

-

-

-

-

-

-

-

-


         一旦另外一个重转子第2轮槽2时发生,阅读器发送出另外一个带有标志值=2A(冲撞槽号+旧标志位)和标志长度=8(增加4位)的总量请求命令。UID为x12A的VICC在槽1时响应么UID为x32A的VICC在槽3时响应。如果在该轮中没有检测到冲撞,那么防冲撞序列将结束。

        上电启动后,ISO15693协议的默认配置为:单副载波、高数据比特率、1/4操作。低级可选寄存器(0x02-0x0B)被自动设置成适应电路的最优协议需求。
(1)检测总量请求命令中的B5位标志位。如果设置成1,那么槽数数量为1个;否则槽数数量为16个;如果槽数量为16个,那么使能中断响应。
(2)初始化标志长度和标志值为0。
(3)初始化槽数量指针为0。
(4)发送总量带有标志长度和标志值的请求命令。
(5)等待传输中断结束。
(6)等待下个中断。该中断可能由以下引起:
A. RX结束
B. 冲撞发生
C.无响应
检查IRQ状态寄存器去判定引起中断的原因。
        如果中断时有RX结束引起的,这意味着没有任何错误和冲撞,UID已经接收到了FIFO数据缓冲区中。读FIFO缓冲区可得到完整的UID值。
        如果中断是由冲撞引起,槽数量指针记录了槽号。并增加槽号指针。
        如果中断是由于来自VICC的无响应引起,忽略。
(7)复位FIFO。
(8)如果槽号是16,发送EOF。如果槽号为1,则退出。
(9)对于所有16个槽,重复第5和6步骤。才16个槽结束时,禁止无响应中断。
(10)检查槽号指针。如果不为0,计算新标志值。如果为0,退出。
A. 增加标志长度4位。
B. 计算新标志值=槽号(冲撞发生的那个槽)+旧标志。
(11)跳转到第4步(新标志值和长度)。
(12)槽指针增加1。
(13)跳转到第10步。
  评论这张
 
阅读(219)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017