• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как выбрать microSD для WeMos/Arduino/...?

kid

New member
Бодрого дня всем ;)
Некоторые карты памяти(microSD) работают нестабильно в проектах на базе WeMos и Arduino. Эти же карты ведут себя нормально в компьютере.
1.Модели картридеров в проектах значения не имеют. Проблема идентична на разных.
2.Библиотеки SD.h или SdFat.h значения не имеют. Проблема идентична с обеими библиотеками.
3.ESP8266, Mega328p или STM32 значения не имеют. Поведение одинаково на всех.
4.Проблема встречалась с картами 32Мб/256Mб/4Гб/8Гб... c 16Гб не встречал, но их мало использовал.
Сейчас пришла партия, вроде не хлам(https://aliexpress.ru/item/4001120857761.html на 8Гб). Вначале запускается, затем после записи примерно 0-100к в файл отваливается, потом никак не работает в устройствах. На кампе работает норм. Если форматнуть, она опять будет готова записать примерно 0-100к и отвалиться :)
Ранее сталкивался, когда карта отваливалась на ней появлялось много "мусорных" файлов, иногда менялся размер.

Учитавая, что "нормальные" карты работают без проблем, делаю вывод: проблема в картах.

Ничего не могу найти по этой проблеме в инете. Видать зациклился.
Кто сталкивался и находил причину/решение?
 

CodeNameHawk

Moderator
Команда форума
Встречались "нормальные" и "ненормальные" в одной партии. Т.е. по параметрам ничем.
ИМХО Если они работают на компе, то они есть нормальные, а если не работают в вашей схеме, то это проблема схемы - программы.
Среди причин не полная поддержка стандарта работы с карточкой или следствие упрощенного ее подключения - питания .
Если форматнуть, она опять будет готова записать примерно 0-100к и отвалиться
Похоже на заполнение буфера и возможного последующего снижения скорости записи.
Встречал левые карточки, где есть малое количество памяти и запись ведется по кругу, но они и компе работают плохо.
 

nikolz

Well-known member
Встречались "нормальные" и "ненормальные" в одной партии. Т.е. по параметрам ничем.
из своего опыта могу предположить , что проблема в несоответствии временных характеристик на шинах интерфейса
т е в любой партии любых чипов допустимый диапазон изменения параметров сигналов на пинах разный У одних больше у других меньше.
В компьютере как правило нестабильность параметров существенно меньше чем в таких устройствах как ESP
учитывая то, что в ESP часто сигналы формируются программно да и еще одновременно с работой WiFi
В итоге какие-то SD терпят эту нестабильность, а какие-то не могут терпеть.
Первые -нормальные, вторые- ненормальные
--------------------
решение очевидно
1) обеспечивайте стабильность параметров управляющих импульсов на пинах ESP
2) делайте отбраковку SD
 

nikolz

Well-known member
исходя из вашей информации сбой работы у вас происходит при объеме записанных данных более 100 K
предположу что нарушается синхронизация при записи в конец
можно попробовать писать данные при выключенном wifi.
 

kid

New member
Спасибо за ответы
Среди причин не полная поддержка стандарта работы с карточкой или следствие упрощенного ее подключения - питания .
Питание стабилизировано, библиотеки стандартные... все описал в шапке.

решение очевидно
1) обеспечивайте стабильность параметров управляющих импульсов на пинах ESP
2) делайте отбраковку SD
1.В шапке указал "3.ESP8266, Mega328p или STM32 значения не имеют. Поведение одинаково на всех. "
2.Так и делаю.

Сегодня запущу более углубленные эксперименты. По результатам отпишусь.
 

kid

New member
Итак исходные:
1. Универсальный код записи в файл блоками по 1024байта для испытуемых платформ.
2. Платформы с картридерами на которых гонял тест :Arduino nano, WeMos и Maple mini(STM32)
Все карты("нормальные" и "ненормальные") были изначально отформатированы. "Нормальные" на всех трех сборках вели себя нормально. "Ненормальные" сбоили.
Последняя партия, из первого поста, была представлена двумя картами. Вели себя одинаково на всех сборках - сбоили и глохли так, что потом не запускалась. При установке их в камп никаких аномалий в их работе не наблюдается.

Как-то странно, что нет никакой информации на эту тему. Проблема с картами явно существует и она системная для подобных проектов :unsure:

C:
/*
 * Универсальный скетч для тестирования карты памяти для: Arduino, Esp8266, STM32
 CS pin 10 - Arduino nano
*/
#include <SPI.h>
#include <SD.h>
//#include "SdFat.h"
//SdFat SD; //коментировать для библиотеки SD.h

#define SD_CS_PIN SS

File myFile;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ;// wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");
  pinMode(SD_CS_PIN , OUTPUT);// обязательнно для STM32
  if (!SD.begin(SD_CS_PIN)) {
    Serial.println("initialization failed!");
    while (1)delay(0); //зависаем, delay(0) для esp8266
  }
  Serial.println("initialization done.");
}

void loop() {
  int cycle=0;     // счетчик блоков по 1Мб записанных в файл
  int step=0;    // счетчик блоков по 1024байта записанных в файл
  run:

  myFile = SD.open("example.txt", FILE_WRITE);
  if (SD.exists("example.txt")) {
    Serial.print(cycle);
    Serial.print("-");
    Serial.println(step);
  } else {
    Serial.println("example.txt doesn't exist.");
    while (1)delay(0); // зависаем,delay(0) для esp8266
  }
  for(long i=0;i<1024;i++) {
    myFile.write(byte(0));
    delay(0);// необходимо для ESP8266
  }
  myFile.close();
 
  step++;
  if(step==1024){
    step=0;   
    cycle++;
    if(cycle==1024){
      // удаляем файл 1Гб
      Serial.println("delete file");
      SD.remove("example.txt");
      cycle=0;
    }
  }
 
  goto run;
}
3xx.jpg
 

nikolz

Well-known member
сбойные сбоят одинаково на разных платах ?
предположу что питание плохое
попробуйте по питанию повесить суперкондер 1f плюс электролит на 300мкф или электролит на 10000 мкф
или существенно повысить мощность блока питания
 

nikolz

Well-known member
как сбои проявляются с различными библиотеками?
если они существуют.
и еще попробуйте изменить частоту работы процессора например на ESP и посмотреть как изменится характер сбоев.
 

nikolz

Well-known member
посмотрите здесь
может что-то есть полезное
 

kid

New member
попробуйте изменить частоту работы процессора например на ESP и посмотреть как изменится характер сбоев.
попробуйте уменьшить частоту SPI (HSPI) и сравнить сбои
На разных платформах разная частота проц/SPI: Arduino nano - 16/4MГц, Esp8266 80/12, Maple mini - 72/12МГц. Сбои на картах идентичные. На одной после 10К на второй после 50К. третья начала вести себя совсем плохо... потом и на кампе перестала появляться. Может тупо запилил ее.
как сбои проявляются с различными библиотеками?
Писал в первом посте п2. "2.Библиотеки SD.h или SdFat.h значения не имеют. Проблема идентична с обеими библиотеками. "
За ссылку спасибо. Там обсуждается можно ли подключить карту к esp по spi- можно. Может на тот период это было проблемой.

попробуйте по питанию повесить суперкондер 1f
Был ионистор на 0.47Ф. Фото прилагаю. Поведение ВООБЩЕ никак не изменилось.
Итак. Дальше тратить время нет смысла. Просто брать карты нормальных брендов.
На фото карты из финального теста. Левые - сбоили, правые работали стабильно.
 

Вложения

  • 233.4 KB Просмотры: 14

nikolz

Well-known member
На разных платформах разная частота проц/SPI: Arduino nano - 16/4MГц, Esp8266 80/12, Maple mini - 72/12МГц. Сбои на картах идентичные. На одной после 10К на второй после 50К. третья начала вести себя совсем плохо... потом и на кампе перестала появляться. Может тупо запилил ее.

Писал в первом посте п2. "2.Библиотеки SD.h или SdFat.h значения не имеют. Проблема идентична с обеими библиотеками. "
За ссылку спасибо. Там обсуждается можно ли подключить карту к esp по spi- можно. Может на тот период это было проблемой.


Был ионистор на 0.47Ф. Фото прилагаю. Поведение ВООБЩЕ никак не изменилось.
Итак. Дальше тратить время нет смысла. Просто брать карты нормальных брендов.
На фото карты из финального теста. Левые - сбоили, правые работали стабильно.
согласен.
 

nikolz

Well-known member
единственно что можно предположить это низкие скорости SPI
Надо повышать скорость интерфейса.
 

nikolz

Well-known member
Цитата:
Перед тем как перейти к подробному знакомству с протестированными картами microSD, стоит отметить ещё один важный момент. Скорость работы карт памяти в каждом конкретном случае определяется не только заложенными в них скоростными характеристиками, но и тем, насколько качественно реализован UHS-интерфейс в хосте. Нередки случаи, когда быстродействие SD-карт не раскрывается именно по вине читающего устройства, и грешить в таком случае на карты памяти явно не стоит. Превеликое множество примеров ситуаций, когда производительность карт памяти сдерживается именно на стороне хоста, можно наблюдать с недорогими картридерами непонятного происхождения, которыми наводнены как отечественные торговые точки, так и китайские интернет-магазины.
 
  • Like
Реакции: kid

kid

New member
Превеликое множество примеров ситуаций, когда производительность карт памяти сдерживается именно на стороне хоста, можно наблюдать с недорогими картридерами непонятного происхождения, которыми наводнены как отечественные торговые точки, так и китайские интернет-магазины.
Тут как бы ситуация понятная. Карта фактически напрямую цепляется к ногам процессора :( Упираемся в два варианта: "кривая" библиотека или "кривая" карта.
Думал это какая-то давно известная и решенная проблема.
С "кривыми" библиотеками нет времени разбираться. Поэтому легче перестать играть в рулетку и просто покупать карты немного дороже.
Огромное спасибо за принятое участие.
 

CodeNameHawk

Moderator
Команда форума
Поэтому легче перестать играть в рулетку и просто покупать карты немного дороже.
"Левые" или нонаме карты еще имеют тенденцию самопроизвольно( не по причине многократной перезаписи) переставать работать.
 
Сверху Снизу