mmc card

rilax
Offline
Зарегистрирован: 28.02.2014

Здравствуйте! Пытаюсь собрать устройство, которое будет воспроизводить звуки wav формата, точнее это будет одна из его функций. В начале начал собирать устройство в Proteus, вот только с CD картой у меня начались проблемы, в протеусе есть что то подобное насывается mmc 

http://kazus.ru/forums/showthread.php?t=5564 Тут нашел как создавать образ для ее нормальное работы

http://habrahabr.ru/post/115176/ тут нашел код и как ее подключать.

Вот код программы

/*
SD card read/write

Этот пример показывает как читать и писать данные на и из файла на SD карточке
Схема подключения
* SD карточка подсоеденина к SPI шине:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 10

создано Ноябрь 2010
David A. Mellis
обновлено 2 Декабря 2010
Tom Igoe
и переведено в Марте 2011
Gleb Devyatkin
Этот пример кода - народное достояние.

*/
#include <SPI.h>
#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(10, OUTPUT);

  if (!SD.begin(10)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  // открываем файл. заметте, что только один файл может быть открыт за раз,
  // поэтому вы должны закрыть этот, чтобы открыть другой.
  myFile = SD.open("test.txt", FILE_WRITE);

  // если файл нормально открылся, запишем в него:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // закрываем файл:
    myFile.close();
    Serial.println("done.");
  } else {
    // а если он не открылся, то печатаем сообщение об ошибке:
    Serial.println("error opening test.txt");
  }

  // откроем файл снова, для чтения:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // читаем из файла, пока не достигнем конца файла:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // закрываем файл:
    myFile.close();
  } else {
    // а если не открылся, то пишем об ошибке:
    Serial.println("error opening test.txt");
  }
}

void loop()
{
  // больше делать нечего, но тут мог бы быть ваш код
}

Вот как я ее подключил в протеусе и результат работы программы

Образ у меня появляется в папке вместе с проектом, только он пустой. А из терминала видно что флешки нет. Может я чего делаю не так? Помогите пожалуйста разобраться! Заранее большое спасибо! 

alexs
Offline
Зарегистрирован: 28.02.2014

Вообще то SD карта выбирается (CS) на 4 пине Ардуины, а не на 10м.

На 10м пине выбирается Ethernet модуль. А так как и карточка и езернет

работают по шине SPI (например езернет шилд имеет на борту и слот для карточки частенько),

то так выбирается что будет работать в текущий момент времени

 

rilax
Offline
Зарегистрирован: 28.02.2014

alexs пишет:

Вообще то SD карта выбирается (CS) на 4 пине Ардуины, а не на 10м.

На 10м пине выбирается Ethernet модуль. А так как и карточка и езернет

работают по шине SPI (например езернет шилд имеет на борту и слот для карточки частенько),

то так выбирается что будет работать в текущий момент времени

CS переправил на 4 пин, в коде тоже поменял с 10 на 4. А остальное у меня правильно подсоединено или как соединить остальное?

rilax
Offline
Зарегистрирован: 28.02.2014

Ну неужели никто не знает? Мне это очень важно!

Я так понял что порты указанные в примере (11,12,10) не подходят к Arduino Mega 2560?

Изменил на:
DI - 51
DO - 50
CLK - 52
CS - 4

Только это не решило проблему...

alexs
Offline
Зарегистрирован: 28.02.2014

Вроде правильно, на меге 50 51 и 52 используется для spi.

Правда di и do видимо надо местами поменять у вас.

rilax
Offline
Зарегистрирован: 28.02.2014

alexs пишет:

Вроде правильно, на меге 50 51 и 52 используется для spi.

Правда di и do видимо надо местами поменять у вас.

Попробовал по всякому уже! У меня вдруг возникла мысль, может Arduino работает только с SD картами? А у меня MMC. Неужели нет выхода? 

Просто я пока жду 

решил спроектировать устройство в протеусе.

 

Клапауций
Offline
Зарегистрирован: 10.02.2013

rilax пишет:

У меня вдруг возникла мысль, может Arduino работает только с SD картами? А у меня MMC. Неужели нет выхода? 

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

rilax
Offline
Зарегистрирован: 28.02.2014

Согласен! Но почему то нет в протеусе SD карт. Буду ждать посылку с Ebay, наверное больше выходов нет... 

Хотя вроде тут http://forum.arduino.cc/index.php/topic,8314.0.html написанно что можно ее подключить

Клапауций
Offline
Зарегистрирован: 10.02.2013

rilax пишет:

Согласен! Но почему то нет в протеусе SD карт. Буду ждать посылку с Ebay, наверное больше выходов нет... 

SD-карты продаются в любом ларьке.

rs485
Offline
Зарегистрирован: 24.05.2015
Добрый день!
 
Не ужели нет решения по моделированию SD карты в Proteus ?
 
VadimEL
Offline
Зарегистрирован: 31.07.2016

проблема не в протеусе а в библиотеке arduino

в файле C:\Program Files\Arduino\libraries\SD\src\utility\

в
SdInfo.h  

добавить uint8_t const CMD1 = 0x01;

в Sd2Card.cpp добавить
bool useCmd1 = false; внутри Sd2Card::init(). после uint32_t arg;

а это

  status_ = cardAcmd(ACMD41, arg);
  while (status_ != R1_READY_STATE) {
    // check for timeout
    if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) {
      error(SD_CARD_ERROR_ACMD41);
      goto fail;
    }
    // Switch to CMD1 if the card fails to recognize ACMD41
    if (status_ & R1_ILLEGAL_COMMAND) useCmd1 = true;
    status_ = (!useCmd1 ? cardAcmd(ACMD41, arg) : cardCommand(CMD1, 0));
  }
 
 
 
  вместо этого
 
 
    while ((status_ = cardAcmd(ACMD41, arg)) != R1_READY_STATE) {
    // check for timeout
    if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) {
      error(SD_CARD_ERROR_ACMD41);
      goto fail;
    }
  }
 
 
 
  в файле
 
  SD2Card.cpp

 

------------

и через winimage делать fat16