SPI на Arduino с HID-ридером - PullRequest
0 голосов
/ 17 марта 2011

Я строю проект, который использует HID OEM75 в качестве точки доступа для механизма блокировки. Мы осуществляем контроль через Arduino Duemilanove (ATmega328). Мы работаем с SPI для обеспечения безопасности и (очевидно) поддержки. (Я понимаю, что любой RFID-чип имеет довольно слабую защиту.)

В настоящее время я борюсь с получением байтов через SPI от устройства чтения карт.

Устройство чтения карт находится в автономном режиме чтения, то есть оно читает карту, отправляет сигнал в Arduino (через линию представления карты, отдельную от SPI), которая говорит Arduino, чтобы она подняла линию Slave Select высоко, чтобы активировать Цикл переноса с карт-ридера. Здесь я сталкиваюсь с проблемами, я не могу понять, как заставить Arduino просто читать байты, поступающие из устройства чтения карт, не посылая никаких командных байтов в устройство чтения карт?

Структура команды по умолчанию, SPI.transfer (0x00), отправляет байт (в данном случае фиктивный байт 0x00), а затем принимает байт от источника, но поскольку наш источник работает автономно, он не примет фиктивный байт (и это на самом деле испортит его работу).

Проще говоря: как мы можем принять строку байтов из подчиненного источника, не отправляя байты из основного источника, используя библиотеку SPI Arduino?

Ответы [ 2 ]

0 голосов
/ 04 октября 2013

Ну, это немного поздно, но эй, это поможет кому-то там.

Прежде всего:

, который говорит 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 для запуска синхронизации часов.Это означает, что вы не можете просто привязать его к земле, чтобы этот раб всегда был включен.

Прежде чем списать, я бы посоветовал выяснить, почему он не принимает фиктивный байт.Возможно, вы используете «3-проводной» SPI, который объединяет MOSI и MISO и превращает его из полнодуплексного в полудуплексный, и вам придется правильно выбрать время, чтобы не растоптать все.

Когда вы попадаете в мельчайшие подробности SPI, осциллограф творит чудеса, чтобы увидеть, что на самом деле произошло, а не то, что, по вашему мнению, должно было произойти.

0 голосов
/ 18 марта 2011

Если я не ошибаюсь, использование шины SPI в качестве мастера похоже на смещение фиктивного байта на ведомое устройство при чтении входящего байта в обратном порядке.

  • Драйвер USB HID Host для Windows от embedded24.net
...