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