совместимы ли sd card модуль и RFID

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Читал что на spi можно повесить два устройства, просто перед обращением нужно устанавливать в LOW потом в HIGH, и так же для другого. Но почему то не работает.

/**
* Read a card using a mfrc522 reader on your SPI interface
* Pin layout should be as follows (on Arduino Uno):
* MOSI: Pin 11 / 51  ICSP-4
* MISO: Pin 12 / 50  ICSP-1
* SCK: Pin 13 / 52  ISCP-3
* SS: Pin 10 / 53
* RST: Pin 9


*/
//#include <SD.h>
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>

#define SS_PIN 53
#define RST_PIN 9
int CS_pin = 10;
MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;

//File myFile;



void setup()
{ 
   Serial.begin(9600);
 
     // Disable SD Card
        pinMode(CS_pin, OUTPUT);
        digitalWrite(CS_pin, HIGH);
        
        // Disable RFID
        pinMode(SS_PIN, OUTPUT);
      //  digitalWrite(SS_PIN, LOW);
digitalWrite(SS_PIN, LOW);
   SPI.begin();
   mfrc522.PCD_Init();
   for (byte i = 0; i < 6; i++) {
                key.keyByte[i] = 0xFF;
        }
        digitalWrite(SS_PIN, HIGH);
 //  Serial.println("Initializing Card");
//digitalWrite(CS_pin, LOW);
     //   if (!SD.begin(CS_pin)) {
      //     Serial.println("Card Failed");
      //     return; 
     //   }
     //   Serial.println("Card Ready");     
        
   //  digitalWrite(CS_pin, HIGH);    
        
 
}

void loop()
{
 
    // Enable RFID
        digitalWrite(SS_PIN, LOW);
    if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
            delay(50);
            return;
        }

        Serial.print(F("Card UID:"));
        for (byte i = 0; i < mfrc522.uid.size; i++) {
                Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
                Serial.print(mfrc522.uid.uidByte[i], HEX);
      }    
        Serial.println();             
    // Disable RFID
        digitalWrite(SS_PIN, HIGH);
      
        //Enable SD Card
        digitalWrite(CS_pin, LOW);
                
    myFile = SD.open("sensey.txt");
  if (myFile) {
    Serial.println("sensey.txt:");
    
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
    	Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
  	// if the file didn't open, print an error:
    Serial.println("error opening sensey.txt");
  }
 // Disable SD Card
        digitalWrite(CS_pin, HIGH);
        
        //Enable RFID
      //  digitalWrite(SS_PIN, LOW);
        // Halt PICC
        mfrc522.PICC_HaltA();
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

На spi можно подвесить пару десятков устройств. Но наверное это не для вас. :)

vankenshtein
Offline
Зарегистрирован: 15.04.2014

знаю, читал об этом. Нужно использовать LOW для включения одного из устройств и HIGH для выключения

Если на одном из устройств вытащить пин miso, второе устройство начинает работать

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Если с первого раза не получилось парашютный спорт не для вас?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Сокращения SS (slave select) и CS (chip select) - это по сути синонимы. Они обозначают пин, который отвечает за выбор устройства. Это значит, что для каждого устройства этот пин должен быть свой. Дергая за этот пин, вы выбираете активное устройство - то, с которым SPI будет работать, ибо работать эта шина может только с одним устройством.
У вас-же для обоих устройств используется пин 10.

 

P.S. Так-же обратите внимание, что на MEGA шина SPI заведена на другие пины, отличные от UNO, NANO, PRO MINI

vankenshtein
Offline
Зарегистрирован: 15.04.2014
#define SS_PIN 53
 
019 int CS_pin = 10;

Вроде разные? SD модуль 10 пин, RFID 53. Или не так что то

 

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

Если с первого раза не получилось парашютный спорт не для вас?


Дык вы с предыдущим прыжком не разобрались.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

разбираюсь, по крайней мере пытаюсь

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

А это значит что бы не скучно было разбираться? Нюню
Пойду за попкормом схожу. Ибо понимание как устроены библиотеки и попытки найти насколько коректно они за собой отключают это будет весело. Особенно если учесть что некоторые клиенты spi шины устроены физически так что пытаются эту шину окупировать в личный доступ.
да , кстати sd принято вешать на 4 пин. Традиция устоявшаяся.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

спасибо за подсказку попробую на 4 пин повесить, а насчет того что RFID не отключается читал, в скетче ставил в HIGH после завершения операции с ним, не помогло

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

спасибо за подсказку попробую на 4 пин повесить, а насчет того что RFID не отключается читал, в скетче ставил в HIGH после завершения операции с ним, не помогло


Смена пина не поможет. Это просто традиция.
а вот неотключаемый клиент решается только впайкой гейта. :)

Radjah
Offline
Зарегистрирован: 06.08.2014

Два пина на OUT делаешь.

1 - LOW, 2 - HIGH

Инициализация первого устройства

1 - HIGH, 2 - LOW

Инициализация второго устройства.

Переключение между устройствами:

1) Все пины в HIGH

2) Нужный пин в LOW

3) Работа

4) Все пины в HIGH

Я бы еще состояние через регистры или CyberLib менялб но это уже лирика.

 

Ну и не путай Slave Select и Chip Enable

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Radjah пишет:

...

Ну и не путай Slave Select и Chip Enable

Каким боком Chip Enable (что это вообще?) к SPI?

Если это замечание мне, то:

https://en.wikipedia.org/wiki/Chip_select

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

vankenshtein пишет:

#define SS_PIN 53
 
019 int CS_pin = 10;

Вроде разные? SD модуль 10 пин, RFID 53. Или не так что то

У вас не указано, какая плата. Если у вас Мега - можно конечно пины 53 и 10 использовать.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Gippopotam пишет:

vankenshtein пишет:

#define SS_PIN 53
 
019 int CS_pin = 10;

Вроде разные? SD модуль 10 пин, RFID 53. Или не так что то

У вас не указано, какая плата. Если у вас Мега - можно конечно пины 53 и 10 использовать.


Есть варианты найти 53 пин на уно?

vankenshtein
Offline
Зарегистрирован: 15.04.2014

плата mega

Radjah
Offline
Зарегистрирован: 06.08.2014

Gippopotam

Не льсти себе, я писал ОПу :3