Форум РадиоКот https://radiokot.ru/forum/ |
|
Аварийная запись на microSD. Как реализовать лучше? https://radiokot.ru/forum/viewtopic.php?f=2&t=199127 |
Страница 1 из 2 |
Автор: | foton6 [ Ср сен 17, 2025 11:37:31 ] |
Заголовок сообщения: | Аварийная запись на microSD. Как реализовать лучше? |
Приветствую господа! Разрабатываю устройство у которого имеется microSD на борту для ведения архива измерений и в целом жизни устройства. Устройство отключается просто выниманием штепселя или отключением автомата - короче плата не в курсе что ей гасят свет, аварийно или штатно. И если не повезет то файловая система будет убита. Я решил воткнуть детектор напряжения КР1171СП10 (10 вольт) до преобразователя на 3.3В (K78L03-1000R3). Сам преобразователь подключить после диода, что бы ток не утекал обратно к детектору и выше. После преобразователя воткнуть ионистор на 5В 5Ф через токоограничивающий резистор на 2,67 Ом. Всем этим делом будет питаться МК + microSD + мелочевка, в сумме без карты памяти ток потребления 150мА. Карта памяти же в зависимости от типа может жрать до 800 мА в пике - кратковременно в процессе активной записи, грубо 5мс, потом ток падает до 30 и ниже мА. После обнаружения просадки ниже 10 вольт буду запускать процесс записи и завершать работу, ожидая восстановления питания. Вот тут вопросы возникают: А можно ли так ионистор использовать? От чего их ресурс истощается? Можно ли с него порядка 1А жрать кратковременно? Сколько он в таком режиме проживет? Ранее в них паяльником не тыкал - без понятия как их готовить. Может быть другие варианты решения вопроса кто подкинет?) 220 на плату для детектирования не хочу. |
Автор: | VNS [ Ср сен 17, 2025 12:12:11 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
Карта памяти же в зависимости от типа может жрать до 800 мА в пике Вы шутите? Это какой порт USB в ПК может выдать 0,8 А? Не встречал microSD с потреблением тока более 100 мА. ![]() Для экономии потребления, используйте карты созданные по технологии TwinMos, их максимальный ток не превышает 50 мА. Ну а в плане резервного питания, я бы установил аккумулятор (Li-Ion), без лишних преобразователей. |
Автор: | AlexS4 [ Ср сен 17, 2025 12:14:51 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
ионисторы ониж низковольтные а держать емкостью выгоднее какраз высокое напряжение (потому что просадка в нем менее критична) чтоб экономнее расходовать емкость 12V конденсатора - можно применить импульсный стэпдаун (buck, напр на mt1470 ) это позволит ~ в 2-3 раза уменьшить необходимую емкость. при этом всего 1000uF 16V электролит даст ~13..15mS запас по времени при разряде 10V->4V при потреблении 1A @3.3V. ну да и 1A это ооч большой перезаклад, померьте или поверьте ))) |
Автор: | foton6 [ Ср сен 17, 2025 12:32:03 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
VNS Про 800 мА нашел именно что пиковое может быть, пока померить нет возможности, да и надо же разные типы карточек по перебирать. Аккумуляторы не вариант. AlexS4 Ну теоретически ионистора хвататет, по размерам он с конденсатор - в целом меня устраивает, как и написал вопрос лишь втом можно ли сделать так как я хочу, не помрет ли ионистор через пару включений выключений. У меня и так импульсная понижайка K78L03-1000R3, с заявленной эффективностью 80-89%. |
Автор: | vlasovzloy [ Ср сен 17, 2025 12:39:08 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
Не помрет |
Автор: | AlexS4 [ Ср сен 17, 2025 12:42:18 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
ну если уже импульсная то просто поставьте на вход преобразователя обычный электролитический конденсатор на 1000+uF на 16..25V и все, ничего другого не нужно! вам же хватит 10+mS для завершения записи? если нет - поставьте электролит пропорционально большей емкости. (эти прикидки на 1A потребления а в реальности в разы больше времени будет) это дешевле и надежнее ионистора или других подобных странных решений) |
Автор: | roman.com [ Ср сен 17, 2025 15:10:01 ] | ||
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? | ||
я припаял провода к адаптеру... подключил к МК... вставил 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 мА ? ![]()
|
Автор: | foton6 [ Ср сен 17, 2025 15:22:32 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
7мА - что то маловато. Вот к примеру нашел такие тесты: http://avr-start.ru/?p=4735 Про 800 вот тут упомянание нашел: https://habr.com/ru/companies/dcmiran/news/665258/ Я понимаю что 800 это на высоких скоростях у какой то неведомой приблуды, но лучше заложу побольше ресурсов, в данном случаи не критично в плане денег, не серийное устройство ![]() Ну вот,теперь вы вынудили меня тоже прогнать тесты с замерами тока >_< Чем бы только график снять... |
Автор: | roman.com [ Ср сен 17, 2025 15:38:50 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
пики тока может и больше... мой тестер пики тока не показывает. мой тестер показывает средний ток... после конденсатора. мерить пики тока нет смысла... конденсатор сглаживает все пики тока. |
Автор: | jcxz [ Ср сен 17, 2025 18:39:20 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
Может быть другие варианты решения вопроса кто подкинет?) А что (и сколько) вы аварийно записывать то хотите? А то может просто поставить FRAM/MRAM и выкинуть все костыли с ионисторами и прочим? Это будет намного дешевле и проще.PS: Учитываете ещё, что SD-карта кроме потребления, ещё имеет свойство оказываться внезапно занятой. На несколько сотен мсек. (например - подали команду стирания, а тут РАЗ! - авария питания случилась) Добавлено after 3 minutes 28 seconds: И если не повезет то файловая система будет убита. А если её не будет, то и убиваться нечему получается. Зачем вам ФС "для ведения архива измерений"? Сами себе создаёте искусственно проблему, чтобы потом её решать? ![]() Ведите архив без ФС. И убиваться будет нечему. |
Автор: | kolobok0 [ Ср сен 17, 2025 22:09:29 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
Приветствую господа! Разрабатываю устройство у которого имеется microSD.... по уму конечно же следить за протуханием 220. под эту тему хорошо подходит детектор нуля на пару деталюшек + оптопара. Плюс - переход через ноль, если требуется, что нить крутить не крутящееся. запись в микросд можно делать не при отключении, а при включении. тем более , как тут уже сказано было выше, она может вам и тайм-аут выдать нечаянно - вплоть до 2 секунд судя по официальным мануалам от сони. при пропадании питалова лучше всё обрубить (даже микросд), и записать тупо в сектор флеша. этот же подход спасает и при аппаратном исключении. правда тут надо подумать об частоте этих действий и износе флэша. удачи вам (круглый) |
Автор: | linux_rulezz [ Ср сен 17, 2025 22:21:33 ] |
Заголовок сообщения: | 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 - а там все прекрасно, шевелится)… |
Автор: | AlexS4 [ Чт сен 18, 2025 01:49:22 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
у меня флэшки по многу лет живут во всяких орэньжах и бананах. ![]() есть 2 момента: на них я обычно держу kernel + rd-image (cpio) перегружаемые в ram, а записываю на отдельный раздел на этой же флешке, ext4, смонтированный с commit=120 или больше, а по аварии питания делаю sync + shutdown (с литиевым резервным питанием) а самое главное - беру micro-sd 1 или 2G , не более ![]() если нужна большая емкость для данных то лучше hdd по sata подключить ... или ssd если записи не слишком интенсивные. |
Автор: | jcxz [ Чт сен 18, 2025 09:34:11 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
запись в микросд можно делать не при отключении, а при включении. тем более , как тут уже сказано было выше, она может вам и тайм-аут выдать нечаянно - вплоть до 2 секунд судя по официальным мануалам от сони. ... и ещё не забывать, что если предыдущее выключение произошло в тот момент, когда карта как раз выполняла это самое "действие вплоть до 2 секунд" (запись или стирание), то карту следует вообще-то полностью проверить на неразрушенность данных. Потому как она могла не закончить эту операцию и остановиться где-то на полпути.И зачем все эти сложности?? Делаем простой кольцевой буфер в SD (а ещё лучше - в чипе SPI-flash) без всяких FS. + текущие индексы кольцевого буфера + текущие накопленные данные -> во FRAM. И всех делов. при пропадании питалова лучше всё обрубить (даже микросд), и записать тупо в сектор флеша. этот же подход спасает и при аппаратном исключении. правда тут надо подумать об частоте этих действий и износе флэша. Не нужно ничего. Никаких "детекторов питания" и "записей при включении". Ставим дешёвую FRAM (можно и не дешёвую, ведь у ТС - единичное устройство) и просто пишем туда критические данные постоянно, периодически. Всё просто.И можно дёргать (по питанию) устройство как угодно часто. И тем более не нужно лезть в ~220V. Или подключать HDD ![]() ![]() |
Автор: | roman.com [ Чт сен 18, 2025 10:34:59 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
jcxz писал(а): Всё просто. ![]() )) если у нас есть устройство с критическими данными... то проще передавать данные на сервер... время передачи данных на сервер занимает меньше 1 миллисекунды... это быстрей чем успеют разрядиться конденсаторы в блоке питания устройства. Вот теперь всё просто. ![]() |
Автор: | roman.com [ Чт сен 18, 2025 12:03:02 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
а мы смотрим на перспективу... сегодня устройство одно... завтра много)) а для "много" нужен сервер... ![]() |
Автор: | VNS [ Чт сен 18, 2025 12:18:32 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
тут, а вы сервер, SCADA... ![]() Роме нравятся красивые картинки из интернета. СКАДА систему он и "в глаза не видел"… ![]() ![]() |
Автор: | roman.com [ Чт сен 18, 2025 12:47:18 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
VNS а ты уже все автоматизировал ? у тебя уже всё работает ? )) https://www.radiokot.ru/forum/viewtopic ... 3&t=198922 ![]() |
Автор: | VNS [ Чт сен 18, 2025 15:48:43 ] |
Заголовок сообщения: | Re: Аварийная запись на microSD. Как реализовать лучше? |
Не мне задавай такие вопросы, а тем, кому я писал алгоритмы… ![]() ![]() ![]() |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |