Несколько устройств на SPI

virtual_universe
Offline
Зарегистрирован: 05.02.2016

Всем привет! И доброго времени суток. Дело обстоит так. Подключил 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.
=====================================
Заранее спасибо за любую оказанную помощь!

a5021
Offline
Зарегистрирован: 07.07.2013

При подключении нескольких устройств к одному SPI-интерфейсу, каждому слейву придется выделять одну ногу на ардуине для реализации SS (Slave Select). Какому слейву опустили SS в ноль, тот и пользуется интерфейсом.

virtual_universe
Offline
Зарегистрирован: 05.02.2016

Проблему решил, просто RFID отказывается работать по ICSP.

poteh
Offline
Зарегистрирован: 09.06.2015

virtual_universe пишет:

Проблему решил, просто RFID отказывается работать по ICSP.

Расскажите подробнее, пожалуйста.

Сейчас у меня схожая проблема. Подключил к UNO RFID-RC522 и MicroSD модуль. У RFID CS подключил на 8 пин, у MicroSD модуля - на 4. Вгружаю пример DumpInfo из библиотеки rfid - WARNING: Communication failure, is the MFRC522 properly connected?

Отключаю SD модуль - всё работает. Вновь подключаю его - снова ошибка.

 

virtual_universe
Offline
Зарегистрирован: 05.02.2016

Необходимо все контакты spi кроме ss(cs) подключить к одному Spi порту, затем в коде, когда ты начинаешь запись на карточку, необходимо подать низкий уровень на SS карточки и высокий на SS РФИДА. Тем самым ты выбираешь слэйва(управляемого). Низкий уровень - тот с кем работают. 

poteh
Offline
Зарегистрирован: 09.06.2015

Вроде так и делаю. вот как выглядит скетч:


#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));
}

 

virtual_universe
Offline
Зарегистрирован: 05.02.2016

Вангую, дело в 34 строчке