Например TDA7294

Форум РадиоКот • Просмотр темы - Аварийная запись на microSD. Как реализовать лучше?
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср окт 01, 2025 22:37:31

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 40 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 11:37:31 
Встал на лапы

Карма: 1
Рейтинг сообщений: 7
Зарегистрирован: Вс сен 16, 2012 22:00:40
Сообщений: 146
Рейтинг сообщения: 0
Приветствую господа!

Разрабатываю устройство у которого имеется microSD на борту для ведения архива измерений и в целом жизни устройства.
Устройство отключается просто выниманием штепселя или отключением автомата - короче плата не в курсе что ей гасят свет, аварийно или штатно.
И если не повезет то файловая система будет убита.
Я решил воткнуть детектор напряжения КР1171СП10 (10 вольт) до преобразователя на 3.3В (K78L03-1000R3).
Сам преобразователь подключить после диода, что бы ток не утекал обратно к детектору и выше.
После преобразователя воткнуть ионистор на 5В 5Ф через токоограничивающий резистор на 2,67 Ом.
Всем этим делом будет питаться МК + microSD + мелочевка, в сумме без карты памяти ток потребления 150мА.
Карта памяти же в зависимости от типа может жрать до 800 мА в пике - кратковременно в процессе активной записи, грубо 5мс, потом ток падает до 30 и ниже мА.

После обнаружения просадки ниже 10 вольт буду запускать процесс записи и завершать работу, ожидая восстановления питания.

Вот тут вопросы возникают:
А можно ли так ионистор использовать?
От чего их ресурс истощается?
Можно ли с него порядка 1А жрать кратковременно?
Сколько он в таком режиме проживет?
Ранее в них паяльником не тыкал - без понятия как их готовить.

Может быть другие варианты решения вопроса кто подкинет?)
220 на плату для детектирования не хочу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 12:12:11 
Говорящий с текстолитом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 231
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1515
Откуда: Тюмень
Рейтинг сообщения: 0
Карта памяти же в зависимости от типа может жрать до 800 мА в пике

Вы шутите? Это какой порт USB в ПК может выдать 0,8 А? Не встречал microSD с потреблением тока более 100 мА. :dont_know:
Для экономии потребления, используйте карты созданные по технологии TwinMos, их максимальный ток не превышает 50 мА.
Ну а в плане резервного питания, я бы установил аккумулятор (Li-Ion), без лишних преобразователей.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 12:14:51 
Друг Кота
Аватар пользователя

Карма: 31
Рейтинг сообщений: 833
Зарегистрирован: Пт сен 10, 2021 15:19:36
Сообщений: 5785
Откуда: Протвино
Рейтинг сообщения: 0
ионисторы ониж низковольтные а держать емкостью выгоднее какраз высокое напряжение (потому что просадка в нем менее критична)

чтоб экономнее расходовать емкость 12V конденсатора - можно применить импульсный стэпдаун (buck, напр на mt1470 ) это позволит ~ в 2-3 раза уменьшить необходимую емкость. при этом всего 1000uF 16V электролит даст ~13..15mS запас по времени при разряде 10V->4V при потреблении 1A @3.3V.

ну да и 1A это ооч большой перезаклад, померьте или поверьте )))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 12:32:03 
Встал на лапы

Карма: 1
Рейтинг сообщений: 7
Зарегистрирован: Вс сен 16, 2012 22:00:40
Сообщений: 146
Рейтинг сообщения: 0
VNS
Про 800 мА нашел именно что пиковое может быть, пока померить нет возможности, да и надо же разные типы карточек по перебирать.
Аккумуляторы не вариант.

AlexS4
Ну теоретически ионистора хвататет, по размерам он с конденсатор - в целом меня устраивает, как и написал вопрос лишь втом можно ли сделать так как я хочу, не помрет ли ионистор через пару включений выключений.
У меня и так импульсная понижайка K78L03-1000R3, с заявленной эффективностью 80-89%.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 12:39:08 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 2212
Зарегистрирован: Чт янв 26, 2012 16:44:29
Сообщений: 19165
Откуда: Таксимо
Рейтинг сообщения: 0
Не помрет

_________________
Мои поставщики запчастей с отличной репутацией
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 12:42:18 
Друг Кота
Аватар пользователя

Карма: 31
Рейтинг сообщений: 833
Зарегистрирован: Пт сен 10, 2021 15:19:36
Сообщений: 5785
Откуда: Протвино
Рейтинг сообщения: 0
ну если уже импульсная то просто поставьте на вход преобразователя обычный электролитический конденсатор на 1000+uF на 16..25V и все, ничего другого не нужно! вам же хватит 10+mS для завершения записи? если нет - поставьте электролит пропорционально большей емкости.
(эти прикидки на 1A потребления а в реальности в разы больше времени будет)

это дешевле и надежнее ионистора или других подобных странных решений)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 15:10:01 
Друг Кота

Карма: -2
Рейтинг сообщений: 60
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8574
Откуда: .ru
Рейтинг сообщения: 0
я припаял провода к адаптеру... подключил к МК...

Изображение

вставил microSD...
файловую систему делать не стал... просто пишу / читаю блоками по 512 байт...
Спойлер
Код:
#include <mega128.h>
#include <delay.h>
////////////////////////////////////////////////////////////////////////////////////////////
// ATmega128:
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
// microSD (HC) 3,3 V
// TX -
// RX - 7 mA.
// Ожидание - 0 mA.
////////////////////////////////////////////////////////////////////////////////////////////


 
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////// crc  (!) System
unsigned int crc;         // crc
unsigned int bcrc;        // crc буфер
unsigned int a;           // a - счёт
unsigned int b;           // b - счёт
/////////////////////////////////////////////// счёт
unsigned char x;          // x - счёт
/////////////////////////////////////////////// счёт
unsigned char x1;         // x1 - счёт
/////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////// fcrc: 
void fcrc(void)                               
{
crc ^= bcrc;         
 for( a = 0; a < 16; a++ ){         
   if (crc & 0x8000)  crc = ( crc << 1 ) ^ 0x1021; // CRC-16-CCITT // 0x1021
   else               crc =   crc << 1;
 };
}
/////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////// microSD:
/////////////////////////////////////////////// программный SPI3 microSD:
unsigned char tx3;        // tx3 - SPI3
unsigned char rx3;        // rx3 - SPI3
unsigned char mask3;      // mask3 - SPI3
////////////////////////////////////////// программный SPI3/4МГц/0.000.060 microSD:
void SPI3(void)
{
rx3=0;                       // сброс RX
mask3=0b10000000;
do  {
if (tx3 & mask3) PORTD.7 = 1;// выход MOSI
else             PORTD.7 = 0;// выход MOSI
delay_us(2);
PORTD.6=1;                   // выход SCK
if (PIND.5) rx3 |= mask3;    // вход MISO
PORTD.6=0;                   // выход SCK
mask3=(mask3>>1);
}
while (mask3);
delay_us(2);
PORTD.7 = 0;                 // сброс MOSI
}
/////////////////////////////// таймаут microSD:
unsigned char tm_microSD;    // таймаут microSD.
/////////////////////////////// error microSD:
unsigned char error_microSD_EEPROM; // error_microSD_EEPROM.  -начальное 0.
/////////////////////////////// буфер microSD:
unsigned char bufer_microSD[512]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

//////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// TX_microSD:
void TX_microSD(unsigned long x) 
{
/////////////////////// crc bufer_microSD[512]:
crc=0xFFFF;             
for (b=0;b<510;b=b+2) {                                 
  bcrc=bufer_microSD[b]; bcrc=(bcrc<<8)|bufer_microSD[b+1]; fcrc(); 
};
bufer_microSD[510]=(crc>>8);      // crc   
bufer_microSD[511]=crc;           // crc   
///////////////////////////////////////////////
PORTB.0=0;           // SS microSD
/////////////////////// запись Data:
tx3=0x58;    SPI3(); // 01xx xxxx + Номер команды - CMD24
tx3=(x>>24); SPI3(); // адрес
tx3=(x>>16); SPI3(); // адрес
tx3=(x>>8);  SPI3(); // адрес
tx3=x;       SPI3(); // адрес
tx3=0x00;    SPI3(); // 0000 0000. CRC - 0
// ответ R1: 0000 0000 - команда microSD принята 
tx3=0xFF; SPI3();    // задержка 1 байт 0xFF   
tx3=0xFF; SPI3();    // STATUS R1 0000 0000
//////////////////////////////////////////////////////////////////////////////// метка:
tx3=0xFE; SPI3();    // 0xFE метка для команды - CMD24
//////////////////////
for (a=0; a<512; a++) {       
  tx3=bufer_microSD[a]; SPI3(); // bufer_microSD > microSD
};
////////////////////
tx3=0x00; SPI3(); // CRC - 0
tx3=0x00; SPI3(); // CRC - 0
/////////////////////////////////////////////////////////// ответ - данные приняты 0xE5:
tx3=0xFF; SPI3(); // SPI пустой   
/////////////////////////////////////////////////// ждём окончания записи... OUT = 0xFF:
while ( (x1 != 0xFF) && (tm_microSD != 255) ) {
 tx3=0xFF; SPI3(); x1=rx3; // MOSI 0x00 > MOSI 0xFF  // -цикл 34...53
 tm_microSD++;
}; 
//////////////
if (tm_microSD == 255) {              // таймаут microSD:
  error_microSD_EEPROM |= 0b00010000; // 0001 0000 - error microSD_TX
};
tm_microSD = 0;       // сброс таймаут tm_microSD.
////////////////////////////////////////////////////////////////
PORTB.0=1;            // SS microSD
////////////////////////////////////////////////////////////////////////////////////////
// microSD - ток = 0 mA.
}

////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// RX_microSD:
void RX_microSD(unsigned long x)
{
PORTB.0=0;           // SS microSD
/////////////////////// читать Data:
tx3=0x51;    SPI3(); // 01xx xxxx + Номер команды - CMD17
tx3=(x>>24); SPI3(); // адрес по 512 байт 
tx3=(x>>16); SPI3(); // адрес по 512 байт 
tx3=(x>>8);  SPI3(); // адрес по 512 байт 
tx3=x;       SPI3(); // адрес по 512 байт 
tx3=0x00;    SPI3(); // 0000 0000. CRC - 0
// ответ R1: 0000 0000 - команда microSD принята 
tx3=0xFF; SPI3();    // задержка 1 байт 0xFF   
tx3=0xFF; SPI3(); x1=rx3; // STATUS R1 0000 0000
////////////////////////////////////////////////////////////////////// ждём метку (0xFE):
while ( (x1 != 0xFE) && (tm_microSD != 255) ) {
 tx3=0xFF; SPI3(); x1=rx3; // MOSI 0xFF > MOSI 0xFE  // -цикл ...5
 tm_microSD++;
}; 
//////////////
if (tm_microSD == 255) {              // таймаут microSD:
  error_microSD_EEPROM |= 0b00000100; // 0000 0100 - error microSD_RX
};
//////////////
tm_microSD = 0;       // сброс таймаут tm_microSD.
//////////////////////////////////////////////////////////////////////////// читать Data:
for (a=0; a<512; a++) {       
  tx3=0xFF; SPI3(); bufer_microSD[a]=rx3;// microSD > bufer_microSD
  //////////////////////////////////////////////////////////
};
tx3=0x00; SPI3(); // CRC - 0
tx3=0x00; SPI3(); // CRC - 0
///////////////////////
PORTB.0=1;        // SS microSD
//////////////////////////////////////////////////////////////////////////////
tx3=0xFF; SPI3();     // SPI пустой (!)
// microSD - ток = 0 mA. 

///////////////////// crc bufer_microSD[512] RX:
crc=0xFFFF;             
for (b=0;b<512;b=b+2) {                                 
   bcrc=bufer_microSD[b]; bcrc=(bcrc<<8)|bufer_microSD[b+1]; fcrc(); 
};
/////////////////////////// проверка crc:                     
if (crc != 0) {
    error_microSD_EEPROM |= 0b00000010;  // error_microSD_crc
};
///////////////////////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
 
 
 
 
/////////////////////////////////////////////////////////////////////////////////////////////           
void main(void)
{
////////////////////////////////////////////// SPI2 программный microSD
DDRD.5=0;          // MISO
PORTD.5=1;         // MISO +(!) 0xFF
DDRD.6=1;          // SCK
PORTD.6=0;         // SCK
DDRD.7=1;          // MOSI
PORTD.7=0;         // MOSI
DDRB.0=1;          // SS
PORTB.0=1;         // SS
////////////////////////////////////////////////////////////////////////////////////////
 

///////////////////////////////////////////////////////////////// инициализация microSD:
///////////////////////////////// Преамбула - 80 синхроимпульсов.
for (x=0; x<10; x++) { tx3=0xFF; SPI3(); }; // "11111111" 

PORTB.0=0;         // SS microSD 
/////////////////////////////////////////////////////////////////
//сброс microSD и перевод в режим SPI:
tx3=0x40; SPI3(); // 01xx xxxx + Номер команды - CMD0 
tx3=0x00; SPI3(); // 0000 0000
tx3=0x00; SPI3(); // 0000 0000
tx3=0x00; SPI3(); // 0000 0000
tx3=0x00; SPI3(); // 0000 0000
tx3=0x95; SPI3(); // CRC7 
// ответ R1: 0000 0001 - команда microSD принята   
tx3=0xFF; SPI3(); // задержка 1 байт 0xFF   
tx3=0xFF; SPI3(); x1 = rx3; // STATUS R1 0000 0001

//состояния интерфейса microSD (напряжение хоста и любой шаблон):
tx3=0x48; SPI3(); // 01xx xxxx + Номер команды - CMD8     
tx3=0x00; SPI3(); // 0000 0000
tx3=0x00; SPI3(); // 0000 0000
tx3=0x01; SPI3(); // 0000 0001 -напряжение хоста 2.7 – 3.6 V
tx3=0xAA; SPI3(); // 1010 1010 -1010 1010 -проверочный шаблон
tx3=0x87; SPI3(); // CRC7
// ответ R7: 0000 0001; 0000 0000; 0000 0000; 0000 0001; 1010 1010
tx3=0xFF; SPI3(); // задержка 1 байт 0xFF   
tx3=0xFF; SPI3(); // STATUS R1 0000 0001
tx3=0xFF; SPI3(); // 0000 0000     
tx3=0xFF; SPI3(); // 0000 0000
tx3=0xFF; SPI3(); // 0000 0001 -напряжение хоста 2.7 – 3.6 V   
tx3=0xFF; SPI3(); x1 = rx3; // 1010 1010 -проверочный шаблон
/////////////////////////////////////////////////////////////////

while ( (x1 != 0x00) && (tm_microSD != 255) ) { // MOSI 0xFF > MOSI 0x00  // -цикл 2...21 
  //////////////////////////////// ждём ответ R1: 0000 0000 STATUS:
  //старт microSD:  // microSD версия v.2 и выше.
  tx3=0x77; SPI3(); // 01xx xxxx + Номер команды - CMD55
  tx3=0x00; SPI3(); // 0000 0000
  tx3=0x00; SPI3(); // 0000 0000
  tx3=0x00; SPI3(); // 0000 0000
  tx3=0x00; SPI3(); // 0000 0000
  tx3=0x00; SPI3(); // CRC7
  // ответ R1: 0000 0001 - команда microSD принята 
  tx3=0xFF; SPI3(); // задержка 1 байт 0xFF   
  tx3=0xFF; SPI3(); x1 = rx3; // STATUS R1 0000 0001

  //
  tx3=0x69; SPI3(); // 01xx xxxx + Номер команды - CMD41
  tx3=0x40; SPI3(); // 0100 0000 - хост поддерживает карту памяти высокой емкости SD
  tx3=0x00; SPI3(); // 0000 0000 
  tx3=0x00; SPI3(); // 0000 0000
  tx3=0x00; SPI3(); // 0000 0000
  tx3=0x00; SPI3(); // CRC7
  // ответ R1: 0000 0000 - инциализация microSD завершена.
  tx3=0xFF; SPI3(); // задержка 1 байт 0xFF   
  tx3=0xFF; SPI3(); x1 = rx3; // STATUS R1 0000 0000
  /////////////////////////////////////////////////////////////////////
  tm_microSD++;     // таймаут microSD.           
}; 
//////////////
if (tm_microSD == 255) {              // таймаут microSD:       
  error_microSD_EEPROM |= 0b00000001; // 0000 0001 - error init microSD
};
tm_microSD = 0;   // сброс таймаут tm_microSD.
///////////////////////////////////////////
PORTB.0=1;        // SS microSD 
//////////////////////////////////////////////////////////////////////////////////
// microSD - ток = 7 mA.
//////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////

RX_microSD(x);
TX_microSD(x);           

//////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////
}

ток чтение / запись 7 mA.

какие 800 мА ? откуда 800 мА ?
:dont_know:


Вложения:
Screenshot_1.jpg [42.14 KiB]
Скачиваний: 245
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 15:22:32 
Встал на лапы

Карма: 1
Рейтинг сообщений: 7
Зарегистрирован: Вс сен 16, 2012 22:00:40
Сообщений: 146
Рейтинг сообщения: 0
7мА - что то маловато.
Вот к примеру нашел такие тесты:
http://avr-start.ru/?p=4735

Про 800 вот тут упомянание нашел:
https://habr.com/ru/companies/dcmiran/news/665258/

Я понимаю что 800 это на высоких скоростях у какой то неведомой приблуды, но лучше заложу побольше ресурсов, в данном случаи не критично в плане денег, не серийное устройство :)

Ну вот,теперь вы вынудили меня тоже прогнать тесты с замерами тока >_<
Чем бы только график снять...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 15:38:50 
Друг Кота

Карма: -2
Рейтинг сообщений: 60
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8574
Откуда: .ru
Рейтинг сообщения: 0
пики тока может и больше... мой тестер пики тока не показывает.
мой тестер показывает средний ток... после конденсатора.
мерить пики тока нет смысла... конденсатор сглаживает все пики тока.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 18:39:20 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 181
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1589
Рейтинг сообщения: 0
Может быть другие варианты решения вопроса кто подкинет?)
А что (и сколько) вы аварийно записывать то хотите? А то может просто поставить FRAM/MRAM и выкинуть все костыли с ионисторами и прочим? Это будет намного дешевле и проще.

PS: Учитываете ещё, что SD-карта кроме потребления, ещё имеет свойство оказываться внезапно занятой. На несколько сотен мсек. (например - подали команду стирания, а тут РАЗ! - авария питания случилась)

Добавлено after 3 minutes 28 seconds:
И если не повезет то файловая система будет убита.
А если её не будет, то и убиваться нечему получается. Зачем вам ФС "для ведения архива измерений"? Сами себе создаёте искусственно проблему, чтобы потом её решать? 8)
Ведите архив без ФС. И убиваться будет нечему.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 22:09:29 
Грызет канифоль

Зарегистрирован: Ср дек 30, 2009 09:55:39
Сообщений: 278
Рейтинг сообщения: 0
Приветствую господа!

Разрабатываю устройство у которого имеется microSD....



по уму конечно же следить за протуханием 220. под эту тему хорошо подходит детектор нуля на пару деталюшек + оптопара. Плюс - переход через ноль, если требуется, что нить крутить не крутящееся.

запись в микросд можно делать не при отключении, а при включении. тем более , как тут уже сказано было выше, она может вам и тайм-аут выдать нечаянно - вплоть до 2 секунд судя по официальным мануалам от сони. при пропадании питалова лучше всё обрубить (даже микросд), и записать тупо в сектор флеша. этот же подход спасает и при аппаратном исключении. правда тут надо подумать об частоте этих действий и износе флэша.


удачи вам
(круглый)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Ср сен 17, 2025 22:21:33 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн сен 15, 2025 08:43:23
Сообщений: 62
Рейтинг сообщения: 0
Эти флешки - больно нежные создания. Лет 5-7 назад я массово начал было использовать дешевые (700-1000 рублей за штучку) одноплатники (orange pi zero, zero 2 и далее) в своих железках. Ведь куда дешевле взять одноплатник с нормальным линуксом на борту и завести там всю сетевую подчасть, а разную хитрую периферию держать на микроконтроллере, чем пытаться поднять ssh, https и т.п. на микроконтроллере.
Однако, недолго я радовался: очень быстро одноплатники стали "помирать". Билась файловая система на флешке. ОК, стал монтировать корень ридонли. Думаете, спасло? А вот нет! Ну, теперь вместо месяца-двух одноплатники стали жить по полгода. Но все равно в итоге флешка помирала (причем, иногда помирала "насовсем", а не просто ФС портилась).
В общем, плюнул я на это дело и решил по-другому эту проблему: узлы соединяются оптикой, по которой и пробрасывается 232 или 485 (при желании можно и CAN в оптику купить, но у меня пока получается по большей части point2point). Там, где остро необходим CAN, вместо одноплатника встал недорогой китайский безвентиляторный комп (они на алике по 15-20 тыр продаются, с маржой посредника выходит 19-25, вполне приемлемо для бюджета организации).

По конкретно этому устройству вопрос: а что, записи ведутся настолько часто, что обычной внешней EEPROM не хватит? Хотя, если устройство мало жрет, можно на трех-четырех аккумуляторах 18650 сделать эдакий бесперебойник, возможно, на неделю хватит - тогда не будет проблем с флешкой. (у меня дома над входной дверью файлопомойка висит на intel n100, так такой бесперебойник на четырех 18650 не так давно удерживал ее в рабочем состоянии около 4.5 часов, пока света не было: я его выключить забыл, а как пришел домой, проверил uptime - а там все прекрасно, шевелится)…


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Чт сен 18, 2025 01:49:22 
Друг Кота
Аватар пользователя

Карма: 31
Рейтинг сообщений: 833
Зарегистрирован: Пт сен 10, 2021 15:19:36
Сообщений: 5785
Откуда: Протвино
Рейтинг сообщения: 0
у меня флэшки по многу лет живут во всяких орэньжах и бананах. ;)
есть 2 момента:
на них я обычно держу kernel + rd-image (cpio) перегружаемые в ram,

а записываю на отдельный раздел на этой же флешке, ext4, смонтированный с commit=120 или больше, а по аварии питания делаю sync + shutdown (с литиевым резервным питанием)

а самое главное - беру micro-sd 1 или 2G , не более :)
если нужна большая емкость для данных то лучше hdd по sata подключить
... или ssd если записи не слишком интенсивные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Чт сен 18, 2025 09:34:11 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 181
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1589
Рейтинг сообщения: 0
запись в микросд можно делать не при отключении, а при включении. тем более , как тут уже сказано было выше, она может вам и тайм-аут выдать нечаянно - вплоть до 2 секунд судя по официальным мануалам от сони.
... и ещё не забывать, что если предыдущее выключение произошло в тот момент, когда карта как раз выполняла это самое "действие вплоть до 2 секунд" (запись или стирание), то карту следует вообще-то полностью проверить на неразрушенность данных. Потому как она могла не закончить эту операцию и остановиться где-то на полпути.
И зачем все эти сложности?? Делаем простой кольцевой буфер в SD (а ещё лучше - в чипе SPI-flash) без всяких FS. + текущие индексы кольцевого буфера + текущие накопленные данные -> во FRAM. И всех делов.

при пропадании питалова лучше всё обрубить (даже микросд), и записать тупо в сектор флеша. этот же подход спасает и при аппаратном исключении. правда тут надо подумать об частоте этих действий и износе флэша.
Не нужно ничего. Никаких "детекторов питания" и "записей при включении". Ставим дешёвую FRAM (можно и не дешёвую, ведь у ТС - единичное устройство) и просто пишем туда критические данные постоянно, периодически. Всё просто.

И можно дёргать (по питанию) устройство как угодно часто. И тем более не нужно лезть в ~220V. Или подключать HDD :facepalm: (как тут уже насоветовали) :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Чт сен 18, 2025 10:34:59 
Друг Кота

Карма: -2
Рейтинг сообщений: 60
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8574
Откуда: .ru
Рейтинг сообщения: 0
jcxz писал(а):
Всё просто.

:shock:
))

если у нас есть устройство с критическими данными...

Изображение

то проще передавать данные на сервер...

Изображение

время передачи данных на сервер занимает меньше 1 миллисекунды...
это быстрей чем успеют разрядиться конденсаторы в блоке питания устройства.

Вот теперь всё просто.
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Чт сен 18, 2025 11:53:48 
Прорезались зубы
Аватар пользователя

Карма: 5
Рейтинг сообщений: 22
Зарегистрирован: Ср сен 11, 2024 10:18:53
Сообщений: 214
Рейтинг сообщения: 3
Изображение
Крылья, лапы, хвосты... Бог ты мой, о чём вы вообще ? изделие штучное
Запись в FRAM решила бы все вопросы буквально за копейки, что по цене,
что программно, об этом уже говорилось тут, а вы сервер, SCADA...
:facepalm:

_________________
Audiatur et altera pars !


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Чт сен 18, 2025 12:03:02 
Друг Кота

Карма: -2
Рейтинг сообщений: 60
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8574
Откуда: .ru
Рейтинг сообщения: 0
а мы смотрим на перспективу...
сегодня устройство одно... завтра много))
а для "много" нужен сервер...
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Чт сен 18, 2025 12:18:32 
Говорящий с текстолитом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 231
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1515
Откуда: Тюмень
Рейтинг сообщения: 0
тут, а вы сервер, SCADA...
:facepalm:

Роме нравятся красивые картинки из интернета. СКАДА систему он и "в глаза не видел"… :))) потому мальчонка несмышлёныш вставляет понравившиеся картинки на форуме (чтобы были). А то что они здесь как корове седло, он этого не понимает. Мал ещё такое понимать, вот и надувает щёки перед дядьками, якобы он тоже большой. :music:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Чт сен 18, 2025 12:47:18 
Друг Кота

Карма: -2
Рейтинг сообщений: 60
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8574
Откуда: .ru
Рейтинг сообщения: 0
VNS а ты уже все автоматизировал ? у тебя уже всё работает ? ))

https://www.radiokot.ru/forum/viewtopic ... 3&t=198922

:))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Аварийная запись на microSD. Как реализовать лучше?
СообщениеДобавлено: Чт сен 18, 2025 15:48:43 
Говорящий с текстолитом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 231
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1515
Откуда: Тюмень
Рейтинг сообщения: 0
Не мне задавай такие вопросы, а тем, кому я писал алгоритмы… :wink: всё автоматизировать не нужно, просто ты ещё мал и глуп, от того этого и не понимаешь. :roll: Подрастёшь, может тогда поймёшь. :dont_know:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 40 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 74


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y