Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带HID读卡器的Arduino上的SPI_Arduino_Hid_Rfid_Spi - Fatal编程技术网

带HID读卡器的Arduino上的SPI

带HID读卡器的Arduino上的SPI,arduino,hid,rfid,spi,Arduino,Hid,Rfid,Spi,我正在构建一个使用HID OEM75作为锁定机制访问点的项目。我们正在通过Arduino Duemilanove(ATmega328)进行控制。我们正在为安全和(显然)支持工作。(我意识到任何RFID芯片的安全性都很弱。) 我目前正努力通过SPI从读卡器接收字节 读卡器处于自动读取模式,这意味着它读取一张卡,向Arduino发送一个信号(通过与SPI分离的卡显示线),该信号告诉Arduino将从属选择线拉高,以激活来自读卡器的传输循环。这就是我遇到麻烦的地方,我不明白如何让Arduino只读取来

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

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

读卡器处于自动读取模式,这意味着它读取一张卡,向Arduino发送一个信号(通过与SPI分离的卡显示线),该信号告诉Arduino将从属选择线拉高,以激活来自读卡器的传输循环。这就是我遇到麻烦的地方,我不明白如何让Arduino只读取来自读卡器的字节,而不向读卡器发送任何命令字节

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


简单地说:我们如何使用Arduino的SPI库从从属源接收一个字节串而不从主源发送字节?

如果我没有错,那么使用SPI总线作为主源就像在反向读取传入字节的同时将一个伪字节转移到从属源

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

虽然有点晚了,但是,嘿,这会有帮助的

首先:

这会告诉Arduino将从属选择线拉高以激活 读卡器的传输周期

这是SPI,您将从机选择拉低以激活从机,而不是拉高。当别人说话时,你让它闭嘴

我不明白如何让Arduino只读取字节 从读卡器输入而不向发送任何命令字节 读卡器

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

但是因为我们的源代码是自动运行的,所以它不会接受 伪字节(这实际上会搞乱它的操作)

如果您真的无法将数据发送到SPI从设备而不出错,那么它实际上并没有实现SPI,arduino SPI库也帮不了您。你必须想出自己的解决办法。SPI标准实际上相当宽松,各种各样的人都有自己的特殊方式。这是非常恼人的。我见过一些设备使用SS线来启动时钟同步。这意味着你不能把它绑在地上让那个奴隶一直在

不过,在您注销它之前,我建议您调查一下它为什么不接受伪字节。您可能正在使用“3线”SPI,它将MOSI和MISO结合在一起,并将其从全双工转换为半双工,您必须正确计时,这样您就不会破坏一切


当深入到SPI的本质时,示波器可以很好地观察实际发生的事情和你认为应该发生的事情

你有没有想过放弃SPI而仅仅使用Wiegand?我的意思是,就协议而言,Wiegand并不出色,但它将完成工作,如果您正在寻找从读卡器到MCU的直接单向通信,它可能是一个更好的选择。有大量的库都是读weigand的,而且无论您在哪一行上驱动数据0和数据1,都可以通过中断自己构建一个库。