2011-03-17 90 views
0

我正在构建一个项目,该项目使用HID OEM75作为锁定机制的接入点。我们通过Arduino Duemilanove(ATmega328)来控制。我们正在与SPI的安全和(明显)支持。 (我意识到任何RFID芯片的安全性都很弱)。带有HID阅读器的Arduino上的SPI

我目前正在努力从读卡器通过SPI接收字节。

读卡器处于自主读取模式,意味着它读取一张卡片,向Arduino发送一个信号(通过卡片存在线,与SPI分开),该信号告诉Arduino将从选择线拉高以激活来自读卡器的传输周期。这是我遇到麻烦的地方,我无法理解如何让Arduino只读取读卡器中的字节而不发送任何命令字节到读卡器?

默认命令结构SPI.transfer(0x00)发送一个字节(在本例中为空字节0x00),然后从源接收一个字节,但由于我们的源自主运行,它不会接受虚拟字节(这实际上会扰乱它的操作)。

简单地说:我们如何使用Arduino的SPI库来接收来自从源的字节串,而无需从主源发送字节?

+0

您是否考虑放弃SPI并简单地使用Wiegand?我的意思是,就协议而言,韦根并不是太棒了,但它可以完成工作,如果您直接寻找从读卡器到MCU的单向通信,这可能是更好的选择。有很多库可以读取weigand,并且在驱动Data 0和Data 1的任何线路上使用中断来构建自己的应用程序并不困难。 – TheEmpireNeverEnded 2017-06-29 20:28:43

回答

0

如果我没有错,使用SPI总线作为主设备就像是将一个虚拟字节转移到从设备,同时读取反向传入的字节。

  • USB HID主机驱动程序的Windows从embedded24.net
0

那么这是一个有点晚,但嘿,这会帮助一个人在那里。

第一关:

告诉Arduino的拉机的选择线高以启动 从读卡器传输周期。

这是SPI,你拉从选择低来激活从属,不高。你把它说得很高,让别人说话时闭嘴。

我不明白我怎么能得到的Arduino简单地读取来自读卡器即将在字节 不发送任何指令字节 读卡器?

那是因为你没有。在SPI中,主设备(arduino设置为和SPI.h库假定的)启动通信。它在MOSI线上发送数据,从机在MISO线上响应。如果你没有什么要说的奴隶,只需发送0xFF或任何虚拟字节,然后检查MISO上发生了什么。在arduino上,我相信存储在SPDR,SPI数据寄存器中。或者使用spi库给你的任何东西。

而是因为我们的源自主运行,也不会接受 空字节(这实际上会弄乱其操作)。

如果是这样的话,如果没有它,真的不能将数据发送到SPI从设备,那么它实际上并没有实现SPI,而arduino SPI库不会帮助你。你将不得不破解你自己的解决方案。 SPI标准实际上非常宽松,各种各样的人都以自己特殊的方式进行操作。这是非常烦人的。我见过设备使用SS线启动时钟同步。这意味着你不能只将它绑在地面上,让这个奴隶永远在上。

在你写下它之前,我建议调查为什么它不接受虚拟字节。您可能正在使用结合了MOSI和MISO的“3线”SPI,并将其从全双工转换为半双工,并且您必须正确设置时序,以免造成任何问题。

在深入了解SPI的基本原理时,示波器可以查看实际发生的事情以及您认为应该发生的事情。