Всем привет. Есть у кого нить опыт использования SD карты на Ethernet shield подключенном к Mege? Все оказалось не так просто: На UNO все работает отлично, но когда переставляю на Мегу появляется ошибка: Initializing SD card...initialization failed! Скетч из примера, только поменял пин 10 на 53 Код (Text): /* SD card basic file example This example shows how to create and destroy 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 modified 9 Apr 2012 by Tom Igoe This example code is in the public domain. */ #include <SD.h> File myFile; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } Serial.println(SD_CHIP_SELECT_PIN); Serial.println(SPI_MOSI_PIN ); Serial.println(SPI_MISO_PIN ); Serial.println(SPI_SCK_PIN ); 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."); if (SD.exists("example.txt")) { Serial.println("example.txt exists."); } else { Serial.println("example.txt doesn't exist."); } // open a new file and immediately close it: Serial.println("Creating example.txt..."); myFile = SD.open("example.txt", FILE_WRITE); myFile.close(); // Check to see if the file exists: if (SD.exists("example.txt")) { Serial.println("example.txt exists."); } else { Serial.println("example.txt doesn't exist."); } // delete the file: Serial.println("Removing example.txt..."); SD.remove("example.txt"); if (SD.exists("example.txt")){ Serial.println("example.txt exists."); } else { Serial.println("example.txt doesn't exist."); } } void loop() { // nothing happens after setup finishes. }
а CS куда воткнут? на меге SPI на других контактах, если шилд не подключается к ICSP, то работать на меге он не будет.
ICSP разъем вроде в наличии, но имеется небольшая проблема в коде. Если не ошибаюсь, то данный шилд использует для SD карты в качестве CS четвертый пин. А потому все-таки SD.begin(4) Для Ethernet части используется десятый пин вне зависимости от того, к какой плате это дело подключено. Несмотря на то, что стандартный SS пин (53 на меге) ничего не включает, его трогать нельзя и надо объявить как OUTPUT. Тут все это расписано на англицком: http://arduino.cc/en/Main/ArduinoEthernetShield
Код (C++): #include <Ethernet.h> #include <SPI.h> #include <SD.h> #define SWITCH_TO_W5100 digitalWrite(4,HIGH); digitalWrite(10,LOW) #define SWITCH_TO_SD digitalWrite(10,HIGH); digitalWrite(4,LOW) #define ALL_OFF digitalWrite(10,HIGH); digitalWrite(4,HIGH) const int W5100_RESET_PIN = 5; const int SD_CS = 4; File root; EthernetClient client; byte server[] = { 192, 168, 2, 176 }; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip ( 192, 168, 2, 21 ); void setup() { SWITCH_TO_W5100; pinMode(4, OUTPUT); pinMode(10, OUTPUT); Serial.begin(9600); Ethernet.begin(mac, ip); Serial.println("Ethernet start"); Serial.print("Initializing SD card..."); SWITCH_TO_SD; pinMode(53, OUTPUT); if (!SD.begin(SD_CS)) Serial.println("initialization failed!"); else Serial.println("initialization done."); ALL_OFF; } void loop() { delay(2000); //readPage(); ... } ТА же самая беда... mega+w5100. пробовал и родные примеры. и с внешним питанием и с питанием от usb. и у флешек менял ФС. не помогает) Initializing SD card...initialization failed!