Суть проблемы - есть дисплейчик со слотом для SD карты. Пины у него под Arduino Uno. Т.е. пины SPI попадают на 10-13 Я его использую на Mega. Соответственно пины не попадают (у меги - 50-53). Если соединить шильд проводами по родным для меги разъемам - слот SD карты работает как положено (увидел даже SDHC на 32 гига). Далее, чтобы использовать шильд без проводов, в SD.h добавил Код (C++): #define SOFTWARE_SPI Судя по Sd2Card.h - это то, что мне нужно: Код (C++): #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 = 10; /** SPI Master Out Slave In pin */ uint8_t const SPI_MOSI_PIN = 11; /** SPI Master In Slave Out pin */ uint8_t const SPI_MISO_PIN = 12; /** SPI Clock pin */ uint8_t const SPI_SCK_PIN = 13; #endif // SOFTWARE_SPI Пины поменялись (смотрю по логу), но уже простой пример CardInfo - не работает. В лог вываливается ошибка (или нету карты или не так соединил и т.д.). В чем магия ?
А вы не забыли указать строку инициализации для softSPI? Код (C++): SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
Я так понимаю что надо использовать пакет DigitalIO с либой SOFTSPI ? Я рассчитывал без нее обойтись. Нашел просто комменты в Sd2Card.h о Software SPI именно для меги. Там же указано: указал Код (C++): #define MEGA_SOFT_SPI 1 Теперь валится с кучей ошибок сборка: UPD FIXED: Надо закомментить #define USE_SPI_LIB в Sd2Card.h и Sd2Card.cpp Теперь все работает вроде. Работаю дальше.