Несколько устройств на SPI
- Войдите на сайт для отправки комментариев
Всем привет! И доброго времени суток. Дело обстоит так. Подключил Ethernet и Rfid к уне. Ethernet робит как надо, а с Rfidom дела обстоят иначе. При попытке запуска выдает данное сообщение:
=====================================
MFRC522 Software Version: 0xFF (unknown)
WARNING: Communication failure, is the MFRC522 properly connected?
Scan PICC to see UID, type, and data blocks...
=====================================
К сожалению его содержание непонятно мне, ну и гугл так же не дал полноценных ответов.
И заранее:
-SS pin ethernet кидал в high
-SS pin Rfid кидал в LOW
Безрезультатно.
Ах, да чуть не забыл. Ethernet подсоединен к 13,12,11 пинам, а Rfiid к ICSP.
=====================================
Заранее спасибо за любую оказанную помощь!
При подключении нескольких устройств к одному SPI-интерфейсу, каждому слейву придется выделять одну ногу на ардуине для реализации SS (Slave Select). Какому слейву опустили SS в ноль, тот и пользуется интерфейсом.
Проблему решил, просто RFID отказывается работать по ICSP.
Проблему решил, просто RFID отказывается работать по ICSP.
Расскажите подробнее, пожалуйста.
Сейчас у меня схожая проблема. Подключил к UNO RFID-RC522 и MicroSD модуль. У RFID CS подключил на 8 пин, у MicroSD модуля - на 4. Вгружаю пример DumpInfo из библиотеки rfid - WARNING: Communication failure, is the MFRC522 properly connected?
Отключаю SD модуль - всё работает. Вновь подключаю его - снова ошибка.
Необходимо все контакты spi кроме ss(cs) подключить к одному Spi порту, затем в коде, когда ты начинаешь запись на карточку, необходимо подать низкий уровень на SS карточки и высокий на SS РФИДА. Тем самым ты выбираешь слэйва(управляемого). Низкий уровень - тот с кем работают.
Вроде так и делаю. вот как выглядит скетч:
#include <SPI.h> #include <MFRC522.h> #define RST_PIN 9 // Configurable, see typical pin layout above #define SS_PIN 10 // Configurable, see typical pin layout above MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance void setup() { Serial.begin(9600); // Initialize serial communications with the PC while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) digitalWrite(4, HIGH); //set SD-card to HIGH digitalWrite(8, LOW); //set RFID to LOW SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks...")); } void loop() { digitalWrite(4, HIGH); //set SD-card to HIGH digitalWrite(8, LOW); //set RFID to LOW // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } // Dump debug info about the card; PICC_HaltA() is automatically called mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); }Вангую, дело в 34 строчке