Аварийная запись на microSD. Как реализовать лучше?
Аварийная запись на microSD. Как реализовать лучше?
Приветствую господа!
Разрабатываю устройство у которого имеется microSD на борту для ведения архива измерений и в целом жизни устройства.
Устройство отключается просто выниманием штепселя или отключением автомата - короче плата не в курсе что ей гасят свет, аварийно или штатно.
И если не повезет то файловая система будет убита.
Я решил воткнуть детектор напряжения КР1171СП10 (10 вольт) до преобразователя на 3.3В (K78L03-1000R3).
Сам преобразователь подключить после диода, что бы ток не утекал обратно к детектору и выше.
После преобразователя воткнуть ионистор на 5В 5Ф через токоограничивающий резистор на 2,67 Ом.
Всем этим делом будет питаться МК + microSD + мелочевка, в сумме без карты памяти ток потребления 150мА.
Карта памяти же в зависимости от типа может жрать до 800 мА в пике - кратковременно в процессе активной записи, грубо 5мс, потом ток падает до 30 и ниже мА.
После обнаружения просадки ниже 10 вольт буду запускать процесс записи и завершать работу, ожидая восстановления питания.
Вот тут вопросы возникают:
А можно ли так ионистор использовать?
От чего их ресурс истощается?
Можно ли с него порядка 1А жрать кратковременно?
Сколько он в таком режиме проживет?
Ранее в них паяльником не тыкал - без понятия как их готовить.
Может быть другие варианты решения вопроса кто подкинет?)
220 на плату для детектирования не хочу.
Разрабатываю устройство у которого имеется microSD на борту для ведения архива измерений и в целом жизни устройства.
Устройство отключается просто выниманием штепселя или отключением автомата - короче плата не в курсе что ей гасят свет, аварийно или штатно.
И если не повезет то файловая система будет убита.
Я решил воткнуть детектор напряжения КР1171СП10 (10 вольт) до преобразователя на 3.3В (K78L03-1000R3).
Сам преобразователь подключить после диода, что бы ток не утекал обратно к детектору и выше.
После преобразователя воткнуть ионистор на 5В 5Ф через токоограничивающий резистор на 2,67 Ом.
Всем этим делом будет питаться МК + microSD + мелочевка, в сумме без карты памяти ток потребления 150мА.
Карта памяти же в зависимости от типа может жрать до 800 мА в пике - кратковременно в процессе активной записи, грубо 5мс, потом ток падает до 30 и ниже мА.
После обнаружения просадки ниже 10 вольт буду запускать процесс записи и завершать работу, ожидая восстановления питания.
Вот тут вопросы возникают:
А можно ли так ионистор использовать?
От чего их ресурс истощается?
Можно ли с него порядка 1А жрать кратковременно?
Сколько он в таком режиме проживет?
Ранее в них паяльником не тыкал - без понятия как их готовить.
Может быть другие варианты решения вопроса кто подкинет?)
220 на плату для детектирования не хочу.
- VNS
- Говорящий с текстолитом
- Сообщения: 1614
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: Аварийная запись на microSD. Как реализовать лучше?
[uquote="foton6",url="/forum/viewtopic.php?p=4746379#p4746379"]Карта памяти же в зависимости от типа может жрать до 800 мА в пике[/uquote]
Вы шутите? Это какой порт USB в ПК может выдать 0,8 А? Не встречал microSD с потреблением тока более 100 мА.
Для экономии потребления, используйте карты созданные по технологии TwinMos, их максимальный ток не превышает 50 мА.
Ну а в плане резервного питания, я бы установил аккумулятор (Li-Ion), без лишних преобразователей.
Вы шутите? Это какой порт USB в ПК может выдать 0,8 А? Не встречал microSD с потреблением тока более 100 мА.
Для экономии потребления, используйте карты созданные по технологии TwinMos, их максимальный ток не превышает 50 мА.
Ну а в плане резервного питания, я бы установил аккумулятор (Li-Ion), без лишних преобразователей.
Re: Аварийная запись на microSD. Как реализовать лучше?
ионисторы ониж низковольтные а держать емкостью выгоднее какраз высокое напряжение (потому что просадка в нем менее критична)
чтоб экономнее расходовать емкость 12V конденсатора - можно применить импульсный стэпдаун (buck, напр на mt1470 ) это позволит ~ в 2-3 раза уменьшить необходимую емкость. при этом всего 1000uF 16V электролит даст ~13..15mS запас по времени при разряде 10V->4V при потреблении 1A @3.3V.
ну да и 1A это ооч большой перезаклад, померьте или поверьте )))
чтоб экономнее расходовать емкость 12V конденсатора - можно применить импульсный стэпдаун (buck, напр на mt1470 ) это позволит ~ в 2-3 раза уменьшить необходимую емкость. при этом всего 1000uF 16V электролит даст ~13..15mS запас по времени при разряде 10V->4V при потреблении 1A @3.3V.
ну да и 1A это ооч большой перезаклад, померьте или поверьте )))
Re: Аварийная запись на microSD. Как реализовать лучше?
VNS
Про 800 мА нашел именно что пиковое может быть, пока померить нет возможности, да и надо же разные типы карточек по перебирать.
Аккумуляторы не вариант.
AlexS4
Ну теоретически ионистора хвататет, по размерам он с конденсатор - в целом меня устраивает, как и написал вопрос лишь втом можно ли сделать так как я хочу, не помрет ли ионистор через пару включений выключений.
У меня и так импульсная понижайка K78L03-1000R3, с заявленной эффективностью 80-89%.
Про 800 мА нашел именно что пиковое может быть, пока померить нет возможности, да и надо же разные типы карточек по перебирать.
Аккумуляторы не вариант.
AlexS4
Ну теоретически ионистора хвататет, по размерам он с конденсатор - в целом меня устраивает, как и написал вопрос лишь втом можно ли сделать так как я хочу, не помрет ли ионистор через пару включений выключений.
У меня и так импульсная понижайка K78L03-1000R3, с заявленной эффективностью 80-89%.
- vlasovzloy
- Друг Кота
- Сообщения: 20066
- Зарегистрирован: Чт янв 26, 2012 16:44:29
- Откуда: Таксимо
Re: Аварийная запись на microSD. Как реализовать лучше?
Не помрет
Мои поставщики запчастей с отличной репутацией
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru
Re: Аварийная запись на microSD. Как реализовать лучше?
ну если уже импульсная то просто поставьте на вход преобразователя обычный электролитический конденсатор на 1000+uF на 16..25V и все, ничего другого не нужно! вам же хватит 10+mS для завершения записи? если нет - поставьте электролит пропорционально большей емкости.
(эти прикидки на 1A потребления а в реальности в разы больше времени будет)
это дешевле и надежнее ионистора или других подобных странных решений)
(эти прикидки на 1A потребления а в реальности в разы больше времени будет)
это дешевле и надежнее ионистора или других подобных странных решений)
Re: Аварийная запись на microSD. Как реализовать лучше?
я припаял провода к адаптеру... подключил к МК...

вставил microSD...
файловую систему делать не стал... просто пишу / читаю блоками по 512 байт...
ток чтение / запись 7 mA.
какие 800 мА ? откуда 800 мА ?

вставил 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 мА ?
- Вложения
-
- Screenshot_1.jpg
- (42.14 КБ) 456 скачиваний
Re: Аварийная запись на microSD. Как реализовать лучше?
7мА - что то маловато.
Вот к примеру нашел такие тесты:
http://avr-start.ru/?p=4735
Про 800 вот тут упомянание нашел:
https://habr.com/ru/companies/dcmiran/news/665258/
Я понимаю что 800 это на высоких скоростях у какой то неведомой приблуды, но лучше заложу побольше ресурсов, в данном случаи не критично в плане денег, не серийное устройство
Ну вот,теперь вы вынудили меня тоже прогнать тесты с замерами тока >_<
Чем бы только график снять...
Вот к примеру нашел такие тесты:
http://avr-start.ru/?p=4735
Про 800 вот тут упомянание нашел:
https://habr.com/ru/companies/dcmiran/news/665258/
Я понимаю что 800 это на высоких скоростях у какой то неведомой приблуды, но лучше заложу побольше ресурсов, в данном случаи не критично в плане денег, не серийное устройство
Ну вот,теперь вы вынудили меня тоже прогнать тесты с замерами тока >_<
Чем бы только график снять...
Re: Аварийная запись на microSD. Как реализовать лучше?
пики тока может и больше... мой тестер пики тока не показывает.
мой тестер показывает средний ток... после конденсатора.
мерить пики тока нет смысла... конденсатор сглаживает все пики тока.
мой тестер показывает средний ток... после конденсатора.
мерить пики тока нет смысла... конденсатор сглаживает все пики тока.
Re: Аварийная запись на microSD. Как реализовать лучше?
[uquote="foton6",url="/forum/viewtopic.php?p=4746379#p4746379"]Может быть другие варианты решения вопроса кто подкинет?)[/uquote]А что (и сколько) вы аварийно записывать то хотите? А то может просто поставить FRAM/MRAM и выкинуть все костыли с ионисторами и прочим? Это будет намного дешевле и проще.
PS: Учитываете ещё, что SD-карта кроме потребления, ещё имеет свойство оказываться внезапно занятой. На несколько сотен мсек. (например - подали команду стирания, а тут РАЗ! - авария питания случилась)
Добавлено after 3 minutes 28 seconds:
[uquote="foton6",url="/forum/viewtopic.php?p=4746379#p4746379"]И если не повезет то файловая система будет убита.[/uquote]А если её не будет, то и убиваться нечему получается. Зачем вам ФС "для ведения архива измерений"? Сами себе создаёте искусственно проблему, чтобы потом её решать?
Ведите архив без ФС. И убиваться будет нечему.
PS: Учитываете ещё, что SD-карта кроме потребления, ещё имеет свойство оказываться внезапно занятой. На несколько сотен мсек. (например - подали команду стирания, а тут РАЗ! - авария питания случилась)
Добавлено after 3 minutes 28 seconds:
[uquote="foton6",url="/forum/viewtopic.php?p=4746379#p4746379"]И если не повезет то файловая система будет убита.[/uquote]А если её не будет, то и убиваться нечему получается. Зачем вам ФС "для ведения архива измерений"? Сами себе создаёте искусственно проблему, чтобы потом её решать?
Ведите архив без ФС. И убиваться будет нечему.
Re: Аварийная запись на microSD. Как реализовать лучше?
[uquote="foton6",url="/forum/viewtopic.php?p=4746379#p4746379"]Приветствую господа!
Разрабатываю устройство у которого имеется microSD....[/uquote]
по уму конечно же следить за протуханием 220. под эту тему хорошо подходит детектор нуля на пару деталюшек + оптопара. Плюс - переход через ноль, если требуется, что нить крутить не крутящееся.
запись в микросд можно делать не при отключении, а при включении. тем более , как тут уже сказано было выше, она может вам и тайм-аут выдать нечаянно - вплоть до 2 секунд судя по официальным мануалам от сони. при пропадании питалова лучше всё обрубить (даже микросд), и записать тупо в сектор флеша. этот же подход спасает и при аппаратном исключении. правда тут надо подумать об частоте этих действий и износе флэша.
удачи вам
(круглый)
Разрабатываю устройство у которого имеется microSD....[/uquote]
по уму конечно же следить за протуханием 220. под эту тему хорошо подходит детектор нуля на пару деталюшек + оптопара. Плюс - переход через ноль, если требуется, что нить крутить не крутящееся.
запись в микросд можно делать не при отключении, а при включении. тем более , как тут уже сказано было выше, она может вам и тайм-аут выдать нечаянно - вплоть до 2 секунд судя по официальным мануалам от сони. при пропадании питалова лучше всё обрубить (даже микросд), и записать тупо в сектор флеша. этот же подход спасает и при аппаратном исключении. правда тут надо подумать об частоте этих действий и износе флэша.
удачи вам
(круглый)
- linux_rulezz
- Вымогатель припоя
- Сообщения: 585
- Зарегистрирован: Пн сен 15, 2025 08:43:23
- Откуда: Маленький СССР посреди шариатской республики
Re: Аварийная запись на microSD. Как реализовать лучше?
Эти флешки - больно нежные создания. Лет 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 - а там все прекрасно, шевелится)…
Однако, недолго я радовался: очень быстро одноплатники стали "помирать". Билась файловая система на флешке. ОК, стал монтировать корень ридонли. Думаете, спасло? А вот нет! Ну, теперь вместо месяца-двух одноплатники стали жить по полгода. Но все равно в итоге флешка помирала (причем, иногда помирала "насовсем", а не просто ФС портилась).
В общем, плюнул я на это дело и решил по-другому эту проблему: узлы соединяются оптикой, по которой и пробрасывается 232 или 485 (при желании можно и CAN в оптику купить, но у меня пока получается по большей части point2point). Там, где остро необходим CAN, вместо одноплатника встал недорогой китайский безвентиляторный комп (они на алике по 15-20 тыр продаются, с маржой посредника выходит 19-25, вполне приемлемо для бюджета организации).
По конкретно этому устройству вопрос: а что, записи ведутся настолько часто, что обычной внешней EEPROM не хватит? Хотя, если устройство мало жрет, можно на трех-четырех аккумуляторах 18650 сделать эдакий бесперебойник, возможно, на неделю хватит - тогда не будет проблем с флешкой. (у меня дома над входной дверью файлопомойка висит на intel n100, так такой бесперебойник на четырех 18650 не так давно удерживал ее в рабочем состоянии около 4.5 часов, пока света не было: я его выключить забыл, а как пришел домой, проверил uptime - а там все прекрасно, шевелится)…
Windows must die!
Re: Аварийная запись на microSD. Как реализовать лучше?
у меня флэшки по многу лет живут во всяких орэньжах и бананах. 
есть 2 момента:
на них я обычно держу kernel + rd-image (cpio) перегружаемые в ram,
а записываю на отдельный раздел на этой же флешке, ext4, смонтированный с commit=120 или больше, а по аварии питания делаю sync + shutdown (с литиевым резервным питанием)
а самое главное - беру micro-sd 1 или 2G , не более
если нужна большая емкость для данных то лучше hdd по sata подключить
... или ssd если записи не слишком интенсивные.
есть 2 момента:
на них я обычно держу kernel + rd-image (cpio) перегружаемые в ram,
а записываю на отдельный раздел на этой же флешке, ext4, смонтированный с commit=120 или больше, а по аварии питания делаю sync + shutdown (с литиевым резервным питанием)
а самое главное - беру micro-sd 1 или 2G , не более
если нужна большая емкость для данных то лучше hdd по sata подключить
... или ssd если записи не слишком интенсивные.
Re: Аварийная запись на microSD. Как реализовать лучше?
[uquote="kolobok0",url="/forum/viewtopic.php?p=4746526#p4746526"]запись в микросд можно делать не при отключении, а при включении. тем более , как тут уже сказано было выше, она может вам и тайм-аут выдать нечаянно - вплоть до 2 секунд судя по официальным мануалам от сони.[/uquote]... и ещё не забывать, что если предыдущее выключение произошло в тот момент, когда карта как раз выполняла это самое "действие вплоть до 2 секунд" (запись или стирание), то карту следует вообще-то полностью проверить на неразрушенность данных. Потому как она могла не закончить эту операцию и остановиться где-то на полпути.
И зачем все эти сложности?? Делаем простой кольцевой буфер в SD (а ещё лучше - в чипе SPI-flash) без всяких FS. + текущие индексы кольцевого буфера + текущие накопленные данные -> во FRAM. И всех делов.
[uquote="kolobok0",url="/forum/viewtopic.php?p=4746526#p4746526"]при пропадании питалова лучше всё обрубить (даже микросд), и записать тупо в сектор флеша. этот же подход спасает и при аппаратном исключении. правда тут надо подумать об частоте этих действий и износе флэша.[/uquote]Не нужно ничего. Никаких "детекторов питания" и "записей при включении". Ставим дешёвую FRAM (можно и не дешёвую, ведь у ТС - единичное устройство) и просто пишем туда критические данные постоянно, периодически. Всё просто.
И можно дёргать (по питанию) устройство как угодно часто. И тем более не нужно лезть в ~220V. Или подключать HDD
(как тут уже насоветовали) 
И зачем все эти сложности?? Делаем простой кольцевой буфер в SD (а ещё лучше - в чипе SPI-flash) без всяких FS. + текущие индексы кольцевого буфера + текущие накопленные данные -> во FRAM. И всех делов.
[uquote="kolobok0",url="/forum/viewtopic.php?p=4746526#p4746526"]при пропадании питалова лучше всё обрубить (даже микросд), и записать тупо в сектор флеша. этот же подход спасает и при аппаратном исключении. правда тут надо подумать об частоте этих действий и износе флэша.[/uquote]Не нужно ничего. Никаких "детекторов питания" и "записей при включении". Ставим дешёвую FRAM (можно и не дешёвую, ведь у ТС - единичное устройство) и просто пишем туда критические данные постоянно, периодически. Всё просто.
И можно дёргать (по питанию) устройство как угодно часто. И тем более не нужно лезть в ~220V. Или подключать HDD
Re: Аварийная запись на microSD. Как реализовать лучше?
jcxz писал(а):Всё просто.
))
если у нас есть устройство с критическими данными...
то проще передавать данные на сервер...
время передачи данных на сервер занимает меньше 1 миллисекунды...
это быстрей чем успеют разрядиться конденсаторы в блоке питания устройства.
Вот теперь всё просто.
Re: Аварийная запись на microSD. Как реализовать лучше?
Крылья, лапы, хвосты... Бог ты мой, о чём вы вообще ? изделие штучное
Запись в FRAM решила бы все вопросы буквально за копейки, что по цене,
что программно, об этом уже говорилось тут, а вы сервер, SCADA...
Audiatur et altera pars !
Re: Аварийная запись на microSD. Как реализовать лучше?
а мы смотрим на перспективу...
сегодня устройство одно... завтра много))
а для "много" нужен сервер...

сегодня устройство одно... завтра много))
а для "много" нужен сервер...
- VNS
- Говорящий с текстолитом
- Сообщения: 1614
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: Аварийная запись на microSD. Как реализовать лучше?
[uquote="zAries",url="/forum/viewtopic.php?p=4746601#p4746601"]тут, а вы сервер, SCADA...
[/uquote]
Роме нравятся красивые картинки из интернета. СКАДА систему он и "в глаза не видел"…
потому мальчонка несмышлёныш вставляет понравившиеся картинки на форуме (чтобы были). А то что они здесь как корове седло, он этого не понимает. Мал ещё такое понимать, вот и надувает щёки перед дядьками, якобы он тоже большой. 
Роме нравятся красивые картинки из интернета. СКАДА систему он и "в глаза не видел"…
Re: Аварийная запись на microSD. Как реализовать лучше?
VNS а ты уже все автоматизировал ? у тебя уже всё работает ? ))
https://www.radiokot.ru/forum/viewtopic ... 3&t=198922

https://www.radiokot.ru/forum/viewtopic ... 3&t=198922
- VNS
- Говорящий с текстолитом
- Сообщения: 1614
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: Аварийная запись на microSD. Как реализовать лучше?
Не мне задавай такие вопросы, а тем, кому я писал алгоритмы…
всё автоматизировать не нужно, просто ты ещё мал и глуп, от того этого и не понимаешь.
Подрастёшь, может тогда поймёшь. 