Вопрос про SPI и Nano

ivpo
Offline
Зарегистрирован: 07.01.2014

Здравствуйте

Имеется Nano, к которой по SPI подключен CAN-модуль MCP2515 (вот такой: http://www.14core.com/wiring-the-mcp2515-controller-area-network-can-bus-diagnostics/).

Хочу подключить модуль SD-карты (например, от Амперки: http://amperka.ru/product/troyka-sd) или вот такой: http://iarduino.ru/shop/Expansion-payments/spi-adapter-kart-microsd-v0-9b-dlya-arduino-rabotaet-s-oficialnymi-programmami-arduino.html). Второй есть в наличии, т.е. можно сразу попробовать.

Не очень понимаю, как подключить 2 устройства по SPI. И насколько это возможно применительно к Nano?

Спасибо!

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так информации же навалом и спримерами и как угодно.

ivpo
Offline
Зарегистрирован: 07.01.2014

Итак: использую MCP2515 и SD по SPI. Одновременно не работают :(

Переключение по SS использую. Толку - ноль.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Понятно. Принято к сведению.

GarryC
Offline
Зарегистрирован: 08.08.2016

Надеюсь, CS для двух модулей берете с разных ножек Ардуино и в скетче это прописали?

ivpo
Offline
Зарегистрирован: 07.01.2014

Разумеется.

По отдельности на выбранных CS-ногах все работает.

Получается, что либо один из модулей не отпускает линию по сигналу с CS (читал про подключение через резисторы, но как-то не хочется этим путем идти).

Либо это связано с характером передачи данных (все же оба модуля крайне интенсивно передают данные в обе стороны). Может же быть такое, что сигналы от одного модуля по MISO-MOSI воспринимаются другим модулем как сигналы от головного устройства?

GarryC
Offline
Зарегистрирован: 08.08.2016

Нет. такого точно быть не может, если CS неактивен (высокий), то устройство шину вообще не смотрит и влиять на нее не может, разве что устройство кривое.

Вы точно отпускаете конкретный CS по завершению работы с конкретным модулем?

ivpo
Offline
Зарегистрирован: 07.01.2014

Точно. Все перепроверено.

Мне кажется, что модули кривые. 

Вот они конкретно:

1 - http://iarduino.ru/shop/Expansion-payments/spi-adapter-kart-microsd-v0-9b-dlya-arduino-rabotaet-s-oficialnymi-programmami-arduino.html

2 - http://roboshop.spb.ru/MCP2515-CAN-BUS-module

GarryC
Offline
Зарегистрирован: 08.08.2016

Ага, точно, этот модуль (это я про SD) кривой и не позволит никому, кроме него, работать по SPI (если верить схеме в Инете), при этом сам он молотить должен. Офигеть, как так можно делать.
В принципе, если с паяльником дружите, можете его доработать.

ivpo
Offline
Зарегистрирован: 07.01.2014

Йес. Спасибо!

А вот этот модуль: http://amperka.ru/product/troyka-sd - нормально себя должен вести?

Никто не в курсе?

GarryC
Offline
Зарегистрирован: 08.08.2016

Если верить схеме, то должен, у него правильное управление выходом.

Если в Вашем переделать выход, как в этом, то должно заработать - просто цена у них странная.

ivpo
Offline
Зарегистрирован: 07.01.2014

Да, мне тоже кажется, что за эту цену он должен захватывать SPI и "грабить кОРОваны".

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ivpo,

Вы правда не понимаете, что без скетча и схемы, ничего кроме флуда в теме не будет?

ivpo
Offline
Зарегистрирован: 07.01.2014

Сегодня пришел SD-адаптер от Амперки.

Проверяю реакцию на сигнал по CS в одиночном режиме:

#include <SD.h>
#include <SPI.h>
#define SD_CS_PIN 8

File TF1;
int i = 0;
String fname = "test3.txt";

void setup() {  
  Serial.begin(9600);
  pinMode(SD_CS_PIN, OUTPUT);   
  if (!SD.begin(SD_CS_PIN)) {    
    Serial.println("Card failed, or not present");    
    return;
  } else {
    Serial.println("Card initialized.");
  }    
}

void loop() {

  digitalWrite(SD_CS_PIN, HIGH);
  TF1 = SD.open(fname, FILE_WRITE); 
  TF1.println("CS HIGH"); 
  TF1.close();  

  digitalWrite(SD_CS_PIN, LOW);
  TF1 = SD.open(fname, FILE_WRITE); 
  TF1.println("CS LOW"); 
  TF1.close();  

  delay(2000);
}

В файле - и "CS HIGH" и "CS LOW"

Что-то делаю неправильно или это адаптер игнорирует управление по CS?