带有HID阅读器的Arduino上的SPI

时间:2011-03-17 06:13:39

标签: arduino hid rfid spi

我正在构建一个使用HID OEM75作为锁定机制的访问点的项目。我们通过Arduino Duemilanove(ATmega328)进行控制。我们正在与SPI合作以获得安全性和(显然)支持。 (我意识到任何RFID芯片的安全性都很差。)

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

  • 适用于Windows的USB HID主机驱动程序来自embedded24.net

答案 1 :(得分:0)

嗯,这有点晚了,但是嘿,它会帮助那里的人。

首先关闭:

  

告诉Arduino将Slave Select线拉高以激活   来自读卡器的传输周期。

这是SPI,你将Slave Select拉低以激活从机,而不是高。当别人在说话的时候,你说得很高兴。

  

我无法理解如何让Arduino简单地读取字节   从读卡器进入而不发送任何命令字节   读卡器?

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

  

但是因为我们的源是自主运行的,所以它不会接受   虚拟字节(这实际上会搞乱它的操作)。

如果情况是你真的无法将数据发送到SPI从设备而没有搞砸,那么它实际上并没有实现SPI,而arduino SPI库也无法帮助你。你必须破解自己的解决方案。 SPI标准实际上非常松散,各种各样的人都以自己的特殊方式来做。这非常令人讨厌。我见过设备使用SS线来启动时钟同步。这意味着你不能只是把它绑在地上让奴隶永远打开。

在你写完之前,我建议调查它为什么不接受虚拟字节。您可能正在使用结合了MOSI和MISO的“3线”SPI并将其从全双工转换为半双工,您必须正确使用时序,以免践踏所有内容。

当了解SPI的细节时,示波器可以看到实际发生的事情和您认为应该发生的事情。