Cherechedza chinyorwa! Yakareba! Kana iwe usingafariri "nei", asi chete mu "sei", unogona kuenda zvakananga Pakupedzisira zvinyorwa.
chisarudzo
Chinhu chekutanga chinouya mupfungwa ndechekuti: siya MicroSD, isa, semuenzaniso, SSD, uye boot kubva mairi. Nechepfungwa zvinogoneka, pamwe, asi zvinodhura, uye zvisina kuvimbika (adapter ye-USB-SATA inowedzerwa; nhamba dzekutadza dzebhajeti SSDs hadzikurudzire).
USB HDD zvakare haina kutaridzika seyakanyanya kutaridzika mhinduro.
Naizvozvo, isu takasvika pane iyi sarudzo: siya kubhowa kubva kuMicroSD, asi shandisa iwo mukuverenga-chete modhi, uye chengetedza irogi rekuvhiya (uye rumwe ruzivo rwakasiyana kune chimwe chidimbu chehardware - serial nhamba, sensor calibrations, nezvimwewo) kumwewo. .
Тема read-only ФС для малинки уже изучена вдоль и поперёк, я не буду останавливаться на деталях реализации в этой статье (asi kana paine kufarira, pamwe ndichanyora mini-chinyorwa pane ino nyaya). Chinhu chimwe chete chandinoda kucherechedza ndechekuti zvese kubva pane zvakaitika pachedu uye kubva pawongororo yeavo vakatozviita, kune budiriro mukuvimbika. Ehe, hazvibviri kubvisa zvachose kuparara, asi zvakanyanya kuderedza kuwanda kwavo kunogoneka. Uye makadhi ari kubatana, izvo zvinoita kuti kutsiva kuve nyore kune vashandi vebasa.
простое подключение (чаще всего шина SPI, опыт использования которой уже есть, так что «железных» проблем не предвидится);
mutengo usina musoro;
standard inoshanda protocol (kushandiswa kwatove muLinux kernel, kana uchida, unogona kutora wechitatu-bato, iyo iripo, kana kutonyora yako, rombo rakanaka zvese zviri nyore);
kuvimbika uye zviwanikwa:
kubva kune yakajairwa dhetabheti: data inochengeterwa makore makumi maviri, 20 erase cycles kune yega block;
kubva kune wechitatu masosi: yakanyanya kuderera BER, inomiririra hapana chikonzero chekukanganisa makodhi makodhi (в некоторых работах рассматривается ECC для NOR, но обычно всё-таки там имеют в виду MLC NOR, бывает и такое).
Хочется, чтобы гарантированно сохранялись данные за несколько дней. Нужно это для того, чтобы в случае каких-либо проблем со связью история продаж не была потеряна. Будем ориентироваться на 5 дней, за этот срок (kunyangwe uchifunga nezvekupera kwevhiki uye mazororo) dambudziko rinogona kugadziriswa.
Isu iye zvino tinounganidza anenge 100kb ematanda pazuva (3-4 zviuru zvinyorwa), asi zvishoma nezvishoma iyi nhamba iri kukura - iyo tsanangudzo iri kuwedzera, zviitiko zvitsva zviri kuwedzerwa. Uyezve, dzimwe nguva kune kuputika (imwe sensor inotanga spamming nenhema positives, semuenzaniso). Tichaverengera zviuru gumi zvinyorwa 10 bytes imwe neimwe - megabytes pazuva.
Pakazara, 5MB yeakachena (yakanyatso kumanikidzwa) data inobuda. Zvimwe kwavari (грубая прикидка) 1Мб служебных данных.
То есть нам нужна микросхема на 8Мб если не использовать сжатие, или 4Мб если использовать. Вполне реальные цифры для этого типа памяти.
Zvinoita sekuti hapana chinhu chakakosha kwatiri, saka tinoenderera mberi.
Kana iyo nhoroondo inonakidza, iyo microcircuit yakasarudzwa pa25df321a(впрочем, это несущественно, на рынке куча аналогов, совместимых по распиновке и системе команд; даже если мы захотим поставить микросхему одругого производителя и/или другого объёма, то всё заработает без изменения кода).
Я использую встроенный в ядро Linux драйвер, на Raspberry благодаря поддержке device tree overlay всё очень просто — нужно положить в /boot/overlays скомпилированный оверлей и немного модифицировать /boot/config.txt.
Muenzaniso dts faira
Kutaura chokwadi, handina chokwadi chekuti zvakanyorwa pasina zvikanganiso, asi zvinoshanda.
/*
* Device tree overlay for at25 at spi0.1
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709";
/* disable spi-dev for spi0.1 */
fragment@0 {
target = <&spi0>;
__overlay__ {
status = "okay";
spidev@1{
status = "disabled";
};
};
};
/* the spi config of the at25 */
fragment@1 {
target = <&spi0>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
flash: m25p80@1 {
compatible = "atmel,at25df321a";
reg = <1>;
spi-max-frequency = <50000000>;
/* default to false:
m25p,fast-read ;
*/
};
};
};
__overrides__ {
spimaxfrequency = <&flash>,"spi-max-frequency:0";
fastread = <&flash>,"m25p,fast-read?";
};
};
И ещё строчка в config.txt
dtoverlay=at25:spimaxfrequency=50000000
Ini ndichasiya tsananguro yekubatanidza chip kuRaspberry Pi. Kune rumwe rutivi, ini handisi nyanzvi mune zvemagetsi, kune rumwe rutivi, zvinhu zvose pano zviri banal kunyange kwandiri: microcircuit ine makumbo 8 chete, ayo tinoda pasi, simba, SPI (CS, SI, SO, SCK). ); iwo mazinga akafanana neaya eRaspberry Pi, hapana yekuwedzera wiring inodiwa - ingobatanidza iyo yakaratidzwa 6 pini.
Record:
Kunyorera kuNOR flash kunoratidzika seyenguva dzose, asi ine imwe chete yakasarudzika: unogona kungochinja 1 kusvika 0, asi kwete zvinopesana. Semuenzaniso, kana isu taive ne0x55 musero yekurangarira, zvino mushure mekunyora 0x0f kwairi, 0x05 inenge yatochengetwa ipapo. (ona tafura iri pazasi);
Dzima:
Разумеется, нам нужно уметь делать и обратную операцию — менять 0 на 1, именно для этого и существует операция erase. В отличие от первых двух, она оперирует не байтами, а блоками (минимальный erase block в выбранной микросхеме — 4кб). Erase уничтожает весь блок целиком и это единственный способ поменять 0 на 1. Поэтому, при работе с флеш-памятью часто приходится выравнивать структуры данных на границу erase block.
Kurekodha neNOR Flash:
Binary data
Zvanga zviri 01010101
Recorded 00001111
Zvave 00000101
Сам журнал представляет последовательность записей переменной длины. Типичная длина записи около 30 байт (хотя иногда случаются и записи длиной в несколько килобайт). Mune ino kesi, isu tinoshanda navo seti seti yemabheti, asi, kana uchifarira, CBOR inoshandiswa mukati mezvinyorwa.
Если вспомнить с чего начиналась эта статья, то очень важно обеспечить надёжность хранения данных и, по возможности, беспрерывную работу даже в случае аппаратных сбоев/повреждения данных.
Manyukoi ezvinetso anogona kurangarirwa?
Kudzima panguva yekunyora/kudzima mabasa. Izvi zvinobva muchikamu che "hapana hunyengeri hunopesana necrowbar."
Информация из hurukuro pane stackexchange: kana simba radzimwa uchishanda neflash, zvese zviri zviviri dzima (kuiswa ku1) uye nyora (yakaiswa ku0) inotungamira kune isina kutsanangurwa maitiro: data inogona kunyorwa, yakanyorwa zvishoma (taura, takatamisa gumi bytes/10 bits. , asi kwete chete 80 bits inogona kunyorwa), zvinogonawo kuti mamwe mabhiti achange ari mu "pakati" mamiriro (kuverenga kunogona kubudisa zvose 45 uye 0);
shandisa akangwara data zvimiro, semuenzaniso, kuchengetedza misoro yerekodhi zvakasiyana kubva kune zvinyorwa ivo pachavo, kuitira kuti kana paine chikanganiso mune chero rekodhi, iwe unogona kuverenga zvakasara pasina matambudziko;
shandisa bit fields kudzora kupedzwa kwekurekodha kana simba radzimwa;
Dzvinyirira rekodhi rega rega uchishandisa kudzvanya kweduramazwi pachinzvimbo chealgorithms yakurukurwa pamusoro.
Iyo isarudzo inoshanda zvachose, asi ini handiifarire. Kuti ive nechokwadi chekuwedzera kana kushomeka mwero wekumanikidza, duramazwi rinofanirwa "kurongedzerwa" kune chaiyo data; chero shanduko inozotungamira kune yekumanikidza kudonha zvine njodzi. Hongu, dambudziko rinogona kugadziriswa nekugadzira vhezheni itsva yeduramazwi, asi uku kurwadza kwemusoro - tichada kuchengetedza mavhezheni ese eduramazwi; muchikamu chega chega tichada kuratidza kuti yakatsikiswa neshanduro yeduramazwi...
Сжимать каждую запись «классическими» алгоритмами, но независимо от других.
The compression algorithms iri kutariswa haina kugadzirirwa kushanda nemarekodhi ehukuru uhu (makumi emabhayiti), iyo yekumanikidza reshiyo ichave yakajeka isingasviki 1 (kureva, kuwedzera data vhoriyamu pachinzvimbo chekumanikidza);
Ita FLUSH mushure mekurekodha kwega kwega.
Во многих библиотеках сжатия есть поддержка FLUSH. Это команда (или параметр к процедуре сжатия), получив которую архиватор формирует сжатый поток так, чтобы чтобы на его основании можно восстановить all the uncompressed data yakatogamuchirwa. Analogue yakadaro sync mumafaira masisitimu kana commit muri sql.
Chakakosha ndechekuti mashandiro anotevera ekumanikidza anozokwanisa kushandisa duramazwi rakaunganidzwa uye iyo yekumanikidza reshiyo haizotambura zvakanyanya sezvakaita mushanduro yapfuura.
Сделал по мотивам статьи наколенный тест, взял 70 тысяч записей журнала с реального устройства, при размере страницы в 60Кб (tichadzoka kuhukuru hwepeji gare gare) rakagamuchira:
Data yekutanga
Kudzvanya gzip -9 (hapana FLUSH)
zlib ine Z_PARTIAL_FLUSH
zlib ine Z_SYNC_FLUSH
Vhoriyamu, KB
1692
40
352
604
На первый взгляд цена, вносимая FLUSH чрезмерно высока, однако на самом деле у нас небогатый выбор — или не сжимать вовсе, или сжимать (и весьма эффективно) с FLUSH. Не надо забывать, что у нас 70 тысяч записей, избыточность, вносимая Z_PARTIAL_FLUSH составляет всего 4-5 байт на запись. А коэффициент сжатия оказался почти 5:1, что более, чем отличный результат.
Zvinogona kuuya sechishamiso, asi Z_SYNC_FLUSH inotova nzira inoshanda yekuita FLUSH.
Paunenge uchishandisa Z_SYNC_FLUSH, mabhayithi mana ekupedzisira ega ega ekupinda anogara ari 4x0, 00x0, 00xff, 0xff. Uye kana tichidziziva, saka hatifanirwe kuzvichengeta, saka saizi yekupedzisira i0Kb chete.
Iyo nyowani mhando 0 block ine zvisina chinhu zvirimo inowedzerwa.
A type 0 block with empty contents consists of:
iyo matatu-bit block header;
0 kusvika 7 bits akaenzana ne zero, kuwana byte alignment;
iyo mana-byte kutevedzana 00 00 FF FF.
Sezvauri kuona zviri nyore, mubhuroko rekupedzisira pamberi peaya mabhayiti mana pane kubva pa4 kusvika pagumi zero bits. Nekudaro, maitiro aratidza kuti pane angangoita gumi zero bits.
Zvinoitika kuti mapfupi mabhuroki e data anowanzo (nguva dzose?) akavharidzirwa uchishandisa block yerudzi rwekutanga (fixed block), iyo inopera ne1 zero bits, ichipa huwandu hwe7-10 yakavimbiswa zero bits (uye mamwe achaita. ive zero ine mukana we 17%).
Saka, pabvunzo data, mu100% yezviitiko pane zero byte isati yasvika 0x00, 0x00, 0xff, 0xff, uye mune inodarika chikamu chimwe muzvitatu pane maviri zero byte. (zvichida chokwadi ndechekuti ini ndinoshandisa binary CBOR, uye kana ndichishandisa mavara JSON, mabhuroki emhando yechipiri - dynamic block angave akajairika, zvichiteerana, mabhuroko asina mamwe zero byte pamberi pe2x0, 00x0, 00xff, 0xff angasangana).
Iwe unogona kuchengetedza zvishoma nekuita bit juggling: ikozvino isu tinoregeredza kuvepo kweashoma zero bits pakupera kwebhuroka, mashoma mabhiti pakutanga kwebhuroka zvakare haachinje...
Asi ipapo ndakaita sarudzo yakasimba yekumira, zvikasadaro pamwero uyu ndaigona kupedzisira ndagadzira yangu yekuchengetera zvinyorwa.
Итого, я из своих тестовых данных получил 3-4 байта на запись, коэффициент сжатия получился более 6:1. Честно скажу: я на такой результат и не рассчитывал, на мой взгляд всё, что лучше 2:1 — уже результат, оправдывающий использование сжатия.
Вторая (как говорится по порядку, а не по значению) проблема — сжатые данные представляют из себя единый поток, в котором постоянно идут отсылки на предыдущие участки. Таким образом, при повреждении какого-то участка сжатых данных мы теряем не только связанный с ним блок несжатых данных, но и все последующие.
Pane nzira yekugadzirisa dambudziko iri:
Dzivirira dambudziko kuti rirege kuitika - wedzera redundancy kune yakamanikidzwa data, iyo ichakubvumidza iwe kuona nekugadzirisa zvikanganiso; tichazotaura nezvazvo gare gare;
Минимизировать последствия в случае возникновения проблемы
Мы уже говорили ранее, что можно каждый блок данных сжимать независимо, при этом проблема исчезнет сама собой (порча данных одного блока приведёт к потере данных только этого блока). Однако, это крайний случай, при котором сжатие данных будет неэффективно. Противоположная крайность: использовать все 4Мб нашей микросхемы как единый архив, что даст нам отличное сжатие, но катастрофические последствия в случае порчи данных. Hongu, kubvumirana kunodiwa maererano nekuvimbika. Asi isu tinofanirwa kuyeuka kuti isu tiri kugadzira dhata rekuchengetedza fomati yekusagadzikana yekuyeuka ine yakaderera zvakanyanya BER uye yakaziviswa data yekuchengetedza nguva yemakore makumi maviri.
В процессе экспериментов я обнаружил, что более-менее заметные потери уровня сжатия начинаются на блоках сжатых данных рамером менее 10Кб.
Zvakambotaurwa kuti ndangariro yakashandiswa yapeji; Ini handioni chikonzero nei "peji rimwe - rimwe bhuroka reakamanikidzwa data" tsamba isingafanirwe kushandiswa.
Isu tinochengeta data yakamanikidzwa tichishandisa zlib (deflate);
Для каждой записи устанавливаем Z_SYNC_FLUSH;
Kune yega yega yakamanikidzwa rekodhi, isu tinocheka mabheti ekutevera (semuenzaniso 0x00, 0x00, 0xff, 0xff); в заголовке указываем как много байт мы отрезали;
Isu tinochengeta data mumapeji 32Kb; pane imwe rwizi rwe data yakamanikidzwa mukati pejiji; Papeji rega rega tinotanga compression zvakare.
Uye, ndisati ndapedza nekumanikidza, ndinoda kukwevera pfungwa dzako kune chokwadi chekuti isu tine mashoma mabyte e data akadzvanywa pane rekodhi, saka zvakakosha zvakanyanya kuti usapfudze ruzivo rwesevhisi, yega yega inoverengera pano.
Все записи хранятся в непрерывном потоке, сначала идёт заголовок записи, содержащий длину, а потом сама запись.
Mune ino embodiment, ese misoro uye data inogona kuve yehurefu hwakasiyana.
Chaizvoizvo, tinowana runyoro rwakabatana runoshandiswa nguva dzese;
Nekuda kwekusiyana kwerekodhi kureba, hatigone kufanotaura kuti marekodhi mangani (uye saka misoro) yatinozoda peji. Iwe unogona kuparadzira misoro uye data pachayo pamapeji akasiyana, asi ini ndinosarudza imwe nzira: tinoisa zvese misoro uye data pane peji rimwe chete, asi misoro (yehukuru hunogara) inouya kubva pakutanga kwepeji, uye iyo data (yehurefu hwakasiyana) inobva kumagumo. Pavanongo "sangana" (hapana nzvimbo yakakwana yemahara yekupinda patsva), tinofunga peji ino yakakwana.
Sarudzo 3:
Iko hakuna chikonzero chekuchengetedza kureba kana rumwe ruzivo nezve nzvimbo yedata mumusoro; mamaki anoratidza miganhu yezvinyorwa zvakakwana. Nekudaro, iyo data inofanirwa kugadziriswa pakunyora / kuverenga.
Ini ndaizoshandisa 0xff sechiratidzo (inozadza peji mushure mekudzima), saka nzvimbo yemahara haizobatwa sedata.
Сравнительная таблица:
Sarudzo 1
Sarudzo 2
Sarudzo 3
Kukanganisa kushivirira
-
+
+
Compactness
+
-
+
Сложность реализации
*
**
**
Sarudzo 1 ine chikanganiso chinouraya: kana chero yemisoro yakakuvadzwa, ketani yese inotevera inoparadzwa. Sarudzo dzasara dzinokutendera kuti udzore imwe data kunyangwe pakaitika kukuvara kukuru.
Но тут уместно вспомнить, что мы решили хранить данные в сжатом виде, так и так мы теряем все данные на странице после «битой» записи, так что хоть в таблице и стоит минус, мы его не учитываем.
Compactness:
mune yekutanga sarudzo, isu tinofanirwa kuchengetedza kureba chete mumusoro; kana tikashandisa akasiyana-kureba integers, saka kazhinji tinogona kupfuura nebyte imwe;
во втором варианте нам нужно хранить начальный адрес и длину; запись должна быть постоянного размера, я оцениваю в 4 байта на запись (два байта на смещение, и два байта на длину);
третьему варианту достаточно всего одного символа для обозначения начала записи, плюс сама запись из-за экранирования вырастет на 1-2%. В целом примерный паритет с первым вариантом.
Возможно, когда-нибудь я всё-таки буду использовать подобный вариант. Например, если мне придётся заниматься хранением данных для корабля, курсирующего между Землёй и Марсом — совсем другие требования к надёжности, космическое излучение, …
Kana iri yechitatu sarudzo: Ndakaipa nyeredzi mbiri kuomerwa kwekuita nekuda kwekuti ini handifarire kukanganisa nekudzivirira, kushandura kureba mukuita, nezvimwe. Hongu, pamwe ndine rusarura, asi ndichafanira kunyora kodhi - sei uchizvimanikidza kuita chimwe chinhu chausingade.
Pfupiso: выбираем вариант хранения в виде цепочек «заголовок с длиной — данные переменной длины» из-за эффективности и простоты реализации.
Kushandisa Bit Fields kutarisa Kubudirira Kwekunyora Mashandiro
Ini handichayeuki iko zvino kwandakawana zano, asi rinotaridzika seizvi:
Pakupinda kwega kwega, tinogovera akati wandei mabheti ekuchengetedza mireza. Sezvatakambotaura, mushure mekudzima mabits ese akazadzwa ne1s, uye isu tinogona kuchinja 1 kusvika 0, asi kwete zvinopesana. Saka kuti "mureza hauna kuiswa" tinoshandisa 1, nekuti "mureza wakaiswa" tinoshandisa 0.
Если расматривать список потенциальных источников проблем, о которых мы говорили выше, то контрольная сумма способна распознать ошибку независимо от её происхождения (за исключением, пожалуй, злокозненных инопланетян — те могут подделать и контрольную сумму тоже).
Saka kana chinangwa chedu chiri chekuona kuti data racho rakasimba here, macheki ipfungwa huru.
Sarudzo yealgorithm yekuverenga iyo checksum haina kusimudza chero mibvunzo - CRC. Kune rimwe divi, masvomhu zvivakwa zvinoita kuti zvikwanise kubata mamwe marudzi ezvikanganiso 100%; kune rimwe divi, pane zvisina tsarukano data iyi algorithm inowanzo ratidza mukana wekudhumhana kwete wakakura kupfuura iyo theoretical muganho. . Iyo inogona kunge isiri iyo inokurumidza algorithm, kana nguva dzose ishoma maererano nenhamba yekudhumhana, asi ine hunhu hwakakosha: mumiedzo yandakasangana nayo, pakanga pasina mapatani ayo akakundikana zvakajeka. Kugadzikana ndihwo hutano hukuru munyaya iyi.
В его статье pane imwe kodhi inonakidza, обеспечивающий чуть лучшие параметры для актуальных для нас длин пакетов, но я не посчитал разницу существенной, а себя достаточно компетентным, чтобы выбрать кастомный код вместо стандартного и хорошо исследованного.
Zvakare, sezvo data redu rakamanikidzwa, mubvunzo unomuka: tinofanirwa kuverenga here cheki yedata yakamanikidzwa kana isina kudzvanywa?
Iyo deflate algorithm muzlib ine yakaringana kuita uye havafanirwe kudaro падать при «кривых» входных данных, более того, зачастую он способен самостоятельно обнаружить ошибки во входном потоке, снизив общую вероятность необнаружения ошибки (провёл тест с инвертированием одиночного бита в короткой записи, zlib обнаружил ошибку примерно в трети случаев).
CRC «заточен» именно под немногочисленные битовые ошибки, которые характерны для флеш-памяти (битовая ошибка в сжатом потоке может дать массовое изменение выходного потока, на котором, чисто теоретически, мы можем «поймать» коллизию);
Ini handisi kunyatsoda iyo pfungwa yekupfuudza ingangotyoka data kune decompressor, Ndiani anozivakuti achaita sei.
Muchirongwa ichi, ndakafunga kutsauka kubva pane inogamuchirwa tsika yekuchengeta cheki ye data isina kudzvanywa.
Pfupiso: Isu tinoshandisa CRC-32C, isu tinoverenga cheki kubva kune data muchimiro chavakanyorerwa kupenya (mushure mekumanikidza).
Redundancy
Использование избыточного кодирования не позволяет, конечно, исключить потерю данных, однако, оно может существенно (зачастую на многие порядки) снизить вероятность невосстановимой потери данных.
Kusapera kurekodha (nekuda kwechimwe chikonzero panguva yekurekodha simba rakadzimwa, iyo Raspberry yakaoma, ...)
Maiwe, kana paine chikanganiso chakadaro, zvese zvinosara ndezvekuregeredza zvinyorwa zvisiri izvo uye kufunga nezve data rakarasika;
Ошибки записи (по каким-либо причинам в flash-память записалось не то, что записывалось)
Tinogona kuona nekukurumidza zvikanganiso zvakadaro kana tikaita bvunzo kuverenga nekukurumidza mushure mekurekodha;
Pfupiso: было решено отказаться от избыточного кодирования, но, если эксплуатация покажет ошибочность этого решения, то вернуться к рассмотрению вопроса (с уже накопленной статистикой по сбоям, которая позволит выбрать оптимальный вид кодирования).
Zvakasarudzwa kuita mapeji ese "akaenzana"
То есть не будет каких-то специальных страниц с метаданными, отдельными потоками и т.п., вместо этого единый поток, который переписывает все страницы по очереди.
Izvi zvinovimbisa kunyange kupfeka pamapeji, hapana imwe pfungwa yekukundikana, uye ini ndinongoifarira;
Izvo zvakakosha kupa shanduro yefomati.
Fomati isina nhamba yevhezheni mumusoro yakaipa!
Достаточно добавить в заголовок страницы поле с неким Magic Number (сигнатурой), которое будет указывать на используемую версию формата (Ini handifunge kuti mukuita kuchave nevane gumi nevaviri vavo);
Записи на странице хранятся в сжатом виде (используется алгоритм deflate). Все записи на одной странице сжимаются в одном потоке (используется общий словарь), на каждой новой странице сжатие начинается заново. То есть для декомпрессии любой записи требуются все предыдущие записи с этой страницы (и только с этой).
Каждая запись сжимется с флагом Z_SYNC_FLUSH, при этом в конце сжатого потока оказываются 4 байта 0x00, 0x00, 0xff, 0xff, предварённые, возможно, ещё одним или двумя нулевыми байтами.
Isu tinorasa kutevedzana uku (4, 5 kana 6 bytes kureba) pakunyorera kuflash memory.
Заголовок записи представляет из себя 1, 2 или 3 байта, хранящие:
Haifanirwe kushandiswa neyepamusoro BER midhiya senge NAND kana MLC NOR (yeuko yakadai inotowanikwa kutengeswa here?.
Uyezve, haifanirwe kushandiswa nemidziyo ine yavo FTL: USB flash, SD, MicroSD, nezvimwe (yekuyeuka kwakadaro ini ndakagadzira fomati ine saizi yepeji ye512 bytes, siginecha pakutanga kwepeji rega rega uye yakasarudzika manhamba erekodhi - dzimwe nguva zvaigoneka kudzoreredza data rese kubva ku "glitched" flash drive nekureruka kuverenga kwakateedzana).
Zvichienderana nemabasa, iyo fomati inogona kushandiswa pasina shanduko pamadhiraivha kubva ku128Kbit (16Kb) kuenda ku1Gbit (128MB). Kana uchida, unogona kuishandisa pane akakura machipisi, asi ungangoda kugadzirisa saizi yepeji (Asi pano mubvunzo wekuita kwehupfumi watomuka; mutengo wehombe-vhoriyamu NOR Flash haukurudzire).
Если кому-то формат показался интересным, и он захочет использовать его в открытом проекте — пишите, постараюсь найти время, причесать код и выложить на github.