Initializing SD card...initialization failed! MEGA2560 + SD модуль

dachnik
Offline
Зарегистрирован: 26.07.2013

Доброго времени суток, помогите разобраться с подключением SD модуля к Mega2560 v3. Никак не хочет работать, то ли мега глючит то ли делаю что-то не так.

Подключаю таким макаром(ниже) - не пашет

MISO (D0) соединяем с        50 pin (12 pin для других)
MOSI (D1) — c                              51 pin (11 pin для других)
SCK — c                                           52 pin (13 pin для других)
CS (SS) — c                                     53 pin (10 pin для других)
GND (земля) — с                        GND pin
5V (или 3.3v) — c                      5V pin (или 3.3v)

в скече меняю 10 и 4 на 53 пин, всё равно не пашет. танцы с бубном не помогают. на УНО всё работает, на меге не хочет.

 

   pinMode(53, OUTPUT);
   
  if (!SD.begin(53)) {

Может что-то делаю не так? как только не пробовал. Третий вечер бьюсь... Я в отчаяние....

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

а чего это увас за такая красивая перемычка между 53 пином и10? художествами занимаетесь? а просто воткнуть на пины которые с номерами вам религия не позволяет?

maksim
Offline
Зарегистрирован: 12.02.2012

И куда воткнут белый провод? Уберите зеленый провод и воткните белый в 53 вывод.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

У меня на Ethernet Sheild была такая беда, оказывается был неправильно указан SS вывод

и вообще в стандартной библиотеке вот такая процедура

  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card is inserted?");
    Serial.println("* Is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    return;
  } else {
   Serial.println("Wiring is correct and a card is present."); 
  }

в одном из примеров....

 

dachnik
Offline
Зарегистрирован: 26.07.2013

Puhlyaviy пишет:

а чего это увас за такая красивая перемычка между 53 пином и10? художествами занимаетесь? а просто воткнуть на пины которые с номерами вам религия не позволяет?

Да говорю же, чего только не делал,куда только непихал, про перемычку нашёл в соседних темах и решил попробовать, но увы, с ней тоже не работает.

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

а SPI вы по центру для красоты прицепили? 

RANDREY
Offline
Зарегистрирован: 10.06.2012

Заработало??

у меня темка была про это, где-то в темах,

тогда забил, временно разместил массив с инфой в проге, для отладки,

а сейчас пробую подключать...

http://arduino.ru/Reference/Library/SPI

Что интересно темы MЕГА+СД переодически всплывают и без результатно

http://www.arduino.ru/forum/obshchii/mega-2560-sd-card-zapisyvaetsya-musor

http://dso.seeedstudio.com/viewtopic.php?p=15632

http://www.arduino.ru/forum/programmirovanie/chto-nepravilno-delayu-pri-rabote-s-sd

http://forums.adafruit.com/viewtopic.php?f=31&t=22796&sid=0

кое где написано  But on MEGA2560 board they are 53(SS),51(MOSI),50(MISO),52(SCK). 

Open the file …\Arduino\libraries\SD\utility\Sd2Card.h and changed “#define MEGA_SOFT_SPI 0” to “#define MEGA_SOFT_SPI 1”. Then added “pinMode(53, OUTPUT); in the Setup() function.

пробовал, всё равно не идёт, казалось бы, 4 проводка подсоеденить...

RANDREY
Offline
Зарегистрирован: 10.06.2012

получилось! 

вставил просто строки в прогу 

lcd.print(SD_CHIP_SELECT_PIN);
lcd.print(SPI_MOSI_PIN );
lcd.print(SPI_MISO_PIN );
lcd.print(SPI_SCK_PIN );

и увидел что константы 10,11,12,13, хотя в среде 1.0.1 выставлена Мега.

в файле Sd2Card.h поменял 

#else  // SOFTWARE_SPI
// define software SPI pins so Mega can use unmodified GPS Shield
/** SPI chip select pin */
uint8_t const SD_CHIP_SELECT_PIN = 53;
/** SPI Master Out Slave In pin */
uint8_t const SPI_MOSI_PIN = 51;
/** SPI Master In Slave Out pin */
uint8_t const SPI_MISO_PIN = 50;
/** SPI Clock pin */
uint8_t const SPI_SCK_PIN = 52;
#endif  // SOFTWARE_SPI

далее всё это работает!

 if (!SD.begin(53)) {

...

 myFile = SD.open("1.ajx", FILE_READ);

dachnik
Offline
Зарегистрирован: 26.07.2013

Спасибо! Поправил в файле Sd2Card.h порты и заработало! Только есть баг. Файл создаёт и читает, но почему-то в него ничего не пишет, файл остаётся пустым.

myFile.println("testing 1, 2, 3."); не работает.

Initializing SD card...initialization done.
Writing to test.txt...done.
test.txt:
 
Куда копать?
RANDREY
Offline
Зарегистрирован: 10.06.2012

открыт правильно? SD.open("test.txt", FILE_WRITE);

закрытие есть? myFile.close();

dachnik
Offline
Зарегистрирован: 26.07.2013

Всё верно, пример SD/ReadWrite, писать в файл не хочет.


/*
  SD card read/write
 
 This example shows how to read and write data to and from an SD card file 	
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4
 
 created   Nov 2010
 by David A. Mellis
 updated 2 Dec 2010
 by Tom Igoe
 
 This example code is in the public domain.
 	 
 */
 
#include <SD.h>

File myFile;

void setup()
{
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin 
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
  // or the SD library functions will not work. 
   pinMode(4, OUTPUT);
   
  if (!SD.begin(53)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  
  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);
  
  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");

	// close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
  
  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.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 test.txt");
  }
}

void loop()
{
	// nothing happens after setup
}
RANDREY
Offline
Зарегистрирован: 10.06.2012

а это в скретче оставлено?? pinMode(4, OUTPUT);

dachnik
Offline
Зарегистрирован: 26.07.2013

и 53 ставил и 4, работает одинаково.

dachnik
Offline
Зарегистрирован: 26.07.2013

Блин, что же делать? никак не хочет работать правильно =)

Когда вставляешь чистую отформатированную карту в SD модуль, и включаю ардуину, на ней создаётся вот такая хрень 

а когда открываю сириал порт, то там вот такое:

 

RANDREY
Offline
Зарегистрирован: 10.06.2012

а другую карточку?

dachnik
Offline
Зарегистрирован: 26.07.2013

Поменял флэшку и вдруг всё заработало =)

Initializing SD card...initialization done.
Writing to test.txt...done.
test.txt:
testing 1, 2, 3.
testing 1, 2, 3.
Initializing SD card...initialization done.
Writing to test.txt...done.
test.txt:
testing 1, 2, 3.
testing 1, 2, 3.
testing 1, 2, 3.
Initializing SD card...initialization done.
Writing to test.txt...done.
test.txt:
testing 1, 2, 3.
testing 1, 2, 3.
testing 1, 2, 3.
testing 1, 2, 3.
Initializing SD card...initialization done.
Writing to test.txt...done.
test.txt:
testing 1, 2, 3.
testing 1, 2, 3.
testing 1, 2, 3.
testing 1, 2, 3.
testing 1, 2, 3.

 

ales2k
Offline
Зарегистрирован: 25.02.2013

Не все карточки поддерживают SPI. Тоже сталкивался.

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

ales2k пишет:

Не все карточки поддерживают SPI. Тоже сталкивался.

ну я бы еще сказал что некоторые карточки не поддерживают скорость обращения к ним :) частота SPI задается при инициализации

dachnik
Offline
Зарегистрирован: 26.07.2013

Но странно всё-таки, на уно-то карта работает без проблемм, а на меге глючит. Карта SD древняя на 64 мб.

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

видими мега ей слишком большую скорость просила и она не успевала :)

asm1th
Offline
Зарегистрирован: 11.10.2013

Добрый день, не стал плодить новую тему, так как проблема схожая. Имею на руках Freeduino ADK 2.2 и вот такой SD Module, при попытке инициализировать карту выдает: "Initializing SD card...initialization failed!". Модуль подключен по схеме 53(SS),51(MOSI),50(MISO),52(SCK) на моей плате это 53(CS),51(D1),50(D0),52(CK), замену в файле Sd2Card.h сделал, пытаюсь выполнить скетч:

#include <SD.h>
File myFile;
void setup()
{
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
  Serial.println(SD_CHIP_SELECT_PIN); //53
  Serial.println(SPI_MOSI_PIN);       //51
  Serial.println(SPI_MISO_PIN);       //50
  Serial.println(SPI_SCK_PIN);        //52
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin 
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
  // or the SD library functions will not work. 
   pinMode(53, OUTPUT);   
  if (!SD.begin(53)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");  
  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);  
  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
	// close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }  
  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.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 test.txt");
  }
}

void loop()
{
	// nothing happens after setup
}
Подскажите, что я делаю не так. Заранее спасибо
maksim
Offline
Зарегистрирован: 12.02.2012

Что за 53(CS), 51(D1), 50(D0), 52(CK) ? И что за замену в файле Sd2Card.h вы сделали?

asm1th
Offline
Зарегистрирован: 11.10.2013

Замены сделал следующие:

01 #else  // SOFTWARE_SPI
02 // define software SPI pins so Mega can use unmodified GPS Shield
03 /** SPI chip select pin */
04 uint8_t const SD_CHIP_SELECT_PIN = 53;
05 /** SPI Master Out Slave In pin */
06 uint8_t const SPI_MOSI_PIN = 51;
07 /** SPI Master In Slave Out pin */
08 uint8_t const SPI_MISO_PIN = 50;
09 /** SPI Clock pin */
10 uint8_t const SPI_SCK_PIN = 52;
11 #endif  // SOFTWARE_SPI

53(CS), 51(D1), 50(D0), 52(CK) - обозначение контактов на моем модуле

asm1th
Offline
Зарегистрирован: 11.10.2013

derver
Offline
Зарегистрирован: 11.05.2014
в этих местах в скетчах надо поменять на 53  
 pinMode(53, OUTPUT);
   
  if (!SD.begin(53)) {
    Serial.println("initialization failed!");
    return;
serge73
serge73 аватар
Offline
Зарегистрирован: 08.10.2014

Может кто знает почему не видно, что microSD отформатирова?

использую стандартный пример CardInfo 

соответственно 

chipSelect = 53;
...
pinMode(53, OUTPUT);
...
f (!card.init(SPI_HALF_SPEED, chipSelect)) {
....

В резульате:

Initializing SD card...Wiring is correct and a card is present.
Card type: SD2
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card
 
Затыкается на :
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }
В моем шилде используется только 4 контакта не считая питания 3,3 и земельки.
53 sens cs
51 mosi din
52 sck sck
50 miso out(dat0)
 
microSD на 2GB форматировал fat и fat32 -все одно.
Друга карта на 4GB пишет Card type: SDHC, что собственно соответствует действительности, но тоже не видит, что она отформатирована.
Старая карта от Nokia на 512MB не определяется совсем, хотя с компом работает.
 
C другими примерами такая же ерунда, затыкается на begin(53), т.к. внутри него  тоже volume.init(card).

PS мое решение тут

art100
Offline
Зарегистрирован: 09.03.2014

serge73 пишет:

Может кто знает почему не видно, что microSD отформатирова?

использую стандартный пример CardInfo

...

из рабочего проекта

схема

код

//art100 писать 20140608
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#define REQ_BUF_SZ 60// Размер буфера, используемого для перехвата HTTP-запросов
byte mac[] = {0xDE,0xAD,0xBE,0xEF,0xFE,0xED};// MAC-адрес Ethernet shield наклейка по борту
IPAddress ip(192, 168, 0, 20); // IP-адрес, могут изменяться в зависимости от сети
EthernetServer server(80); // создаем сервер на порт 80
Файлов webFile; // Веб-страница файл на SD card
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP-запрос, хранятся в виде null terminated string
char req_index = 0; // индекс в HTTP_req буфера
boolean LED_state[4] = {0}; // магазины состояний светодиодов
//--------------------------------------------
void setup(){
// отключить Ethernet / init SD
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
Serial.begin(115200); // для отладки Serial.begin(9600); // для отладки
Serial.println("SD init fat32 32 Гб, максимальная...");
if (!SD.begin(4) ) { Serial.println("SD-карта не виделись"); return; }// init failed
Serial.println("SD OK."); // проверка index.htm файл
if (!SD.exists("index.htm")) { Serial.println("index.htm не виделись"); return; }// не могу найти файл индекса
Serial.println("index.htm найден");

 

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

У меня скеч кривой не могу никак понять что мешает SKC (52 pin) - с уно SKC (13 pin) всё отлично.

 

 

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Что то ни как не могу добится чтоб модуль нормально работал с Мегой.

Тут пишут : http://profmason.com/?p=1956 что надо подключать через резисторы - завтра попробую

CS, MOSI, MISO и SCK подключить через делители резисторы 5,1 кОм и 10 кОм

 

ПС: У меня на модуле только подтягивающие резисторы ( видно предназначена для DUE и тп 3,3 Вольта)

dachnik - У Вас такой же кривой модуль как и у меня.

Не понимаю я китайцев - зачем тогда ставить стабилизатор на 3,3В и делать дополнительный VCC на 5В.

 

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

 The SPI lines are uni-directional so you can replace MOSFETs with diodes (use something fast-switching with low capacitance as the circuit imitates the Open-Drain outputs with 10K pull-ups)

Какие диоды нужны ? (есь в наличии 1N4148 и 1N5819 но по мойму они не подойдут)

bwn
Offline
Зарегистрирован: 25.08.2014

Попробуйте 5819, мне кажется пойдут. В сущности его задача не пустить 5В на вход.

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

bwn пишет:

Попробуйте 5819, мне кажется пойдут. В сущности его задача не пустить 5В на вход.

Ответил наконец то хозяин схемы:

1N5819 junction capacitance is 110pF. Taking into account the pull-up resistance of 10kOhm this gives limiting clock frequency ~100kHz. If you need higher clocks you could use lower resistors connected in parallel (1kOhm means ~1MHz) but this leads to increased power ripples. Or you could use 1N4005...4007 (8pF junction capacitance).

bwn
Offline
Зарегистрирован: 25.08.2014

Дмитрий@ пишет:

bwn пишет:

Попробуйте 5819, мне кажется пойдут. В сущности его задача не пустить 5В на вход.

Ответил наконец то хозяин схемы:

1N5819 junction capacitance is 110pF. Taking into account the pull-up resistance of 10kOhm this gives limiting clock frequency ~100kHz. If you need higher clocks you could use lower resistors connected in parallel (1kOhm means ~1MHz) but this leads to increased power ripples. Or you could use 1N4005...4007 (8pF junction capacitance).

Пасиб, про скорость не подумал.

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Как всегда, купил 4006 - искал резистор и наткнулся на десяток 4007.

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Ура - отлично работает :)

nynax
Offline
Зарегистрирован: 17.04.2015

Прошаманил два дня.... Вот это помогло.... Инициализация проходит...

Arduino 2560 R3 + Ethernet Shield R3

The ethernet w5100 SPI Slave Select is digital pin 10. HIGH is disabled. LOW is enabled.
The microSD SPI slave select is digital pin 4. HIGH is disabled. LOW is enabled.

To communicate with the SD card, disable the w5100 SPI (pin 10 HIGH) and enable SD SPI (pin 4 LOW).
To communicate with the w5100 ethernet IC, disable SD SPI (pin 4 HIGH) and enable the w5100 SPI (pin 10 LOW).

primsesl
Offline
Зарегистрирован: 27.10.2015

Доброго времени суток! Уменя проблема такого характера. подключен sd shield, иницализация sd проходит нормально при подключении через usb. Когда подлючаешь 12вольт инициализация sd не проходит. Подскажите в чем может быть проблемма?

maksim
Offline
Зарегистрирован: 12.02.2012

Так как вы сочли неважным написать что у вас за плата и что за шилд, то предположить можно, например, это:

  • 3V3. Напряжение 3.3 В генерируемое микросхемой FTDI на платформе. Максимальное потребление тока 50 мА. DiecimilaNano
primsesl
Offline
Зарегистрирован: 27.10.2015

Прошу прощение плата Arduino mega 2560  и sd подключино vcc к 5в

maksim
Offline
Зарегистрирован: 12.02.2012

Попробуйте измерить напряжение на выводе 5V, когда подключаете блок питания.

Rolan_Che
Offline
Зарегистрирован: 19.11.2015

не буду плодить темы..

господа, приобрел дисплей QVGA 240*320, вот ссылка

http://ru.aliexpress.com/item/Wholesale-1PC-2-2-Inch-240-320-Dots-SPI-TFT-LCD-Serial-Port-Module-Display-ILI9341/1961375225.html?isOrigTitle=true

на платке имеется картридер, так вот уперся - не получается его запустить.

использую мегу2560, сам дисплей цеплял через 561ПУ4, коннектил таким образом

MISO - 50, дисплей работает и без него

LED - 3,3v

SCK - 52

MOSI - 51

D/S - 49

RST - 48

CS - 53

 

библиотеку использую Adafruit.

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

питание у них общее3,3v

SCK - 52, так-же как и дисплей

MISO - 50, так-же как и дисплей

MOSI - 51, так-же как и дисплей

и наконец CS, вот здесь уже что только не пробовал.. 53, 10, 4, 8 и т.д.

в файле Sd2Card.h номера пинов менял,

строку pinMode(53, OUTPUT); добавлял, пины в ней менял

в общем ничего не выходит.

так вот сам вопрос, именно с этим дисплеем и картридером на нем кто нибудь сталкивался?

 

Rolan_Che
Offline
Зарегистрирован: 19.11.2015

может пригодиться кому..

разобрался с этим дисплеей и SD модулем на нем, QVGA 240*320.

на плате резисторы по 1 кОму на mosi, miso и scr  установлены, поэтому подключать нужно было не перекидывая на 3.3v, cs на 10 ногу (указываем сами). Все прямо на мегу, паралельно выводам от дисплея, которые необходимо преобразовать с 5v на 3.3v