Ke kenya ts'ebetsong ea ka ea "ring buffer" ho NOR flash

prehistory

Ho na le mechini e rekisoang ea moralo oa rona. Ka hare ho Raspberry Pi le lithapo tse ling ka boto e arohaneng. Moamoheli oa chelete ea tšepe, moamoheli oa likoloto, setsi sa banka se hokahane ... Ntho e 'ngoe le e 'ngoe e laoloa ke lenaneo le ingoletseng. Histori eohle ea mosebetsi e ngotsoe ho log ka flash drive (MicroSD), e fetisetsoang ka Inthanete (ho sebelisa modem ea USB) ho seva, moo e bolokiloeng sebakeng sa polokelo. Lintlha tsa thekiso li kentsoe 1c, ho boetse ho na le sehokelo se bonolo sa webo bakeng sa ho beha leihlo, jj.

Ke hore, koranta e bohlokoa - bakeng sa accounting (chelete, thekiso, joalo-joalo), ho beha leihlo (mefuta eohle ea liphoso le maemo a mang a matla a maholo); Ena, e mong a ka re, ke boitsebiso bohle boo re nang le bona ka mochine ona.

bothata

Li-flash drive li iponahatsa e le lisebelisoa tse sa tšepahaleng haholo. Ba hloleha ka mokhoa o lakatsehang. Sena se lebisa ho nako ea mochini ka bobeli le (haeba ka lebaka le itseng log e ne e ke ke ea fetisetsoa inthaneteng) ho lahleheloa ke data.

Ena hase phihlelo ea pele ea ho sebelisa li-flash drives, pele ho sena ho ne ho e-na le morero o mong o nang le lisebelisoa tse fetang lekholo, moo makasine eo e neng e bolokiloe ho li-drive tsa USB flash, ho ne ho boetse ho e-na le mathata a ho tšepahala, ka linako tse ling palo ea ba hlōlehileng. khoeli e ne e le ho tse mashome. Re lekile li-flash drive tse fapaneng, ho kenyeletsoa tse nang le "brand" tse nang le memori ea SLC, 'me mefuta e meng e ts'epahala ho feta e meng, empa ho nkela li-flash drive sebaka ha hoa ka ha rarolla bothata ka botlalo.

Ela hloko ka kopo! Nako e telele! Haeba u sa thahaselle "hobane'ng", empa feela ka "joang", u ka tsamaea ka ho toba Qetellong Lingoloa.

u etsa qeto ea

Ntho ea pele e tlang kelellong ke: lahla MicroSD, kenya, mohlala, SSD, le boot ho eona. Hoa khoneha, mohlomong, empa e theko e boima, 'me ha e tšepahale hakaalo (ho eketsoa adaptara ea USB-SATA; lipalo-palo tsa ho hlōleha bakeng sa li-SSD tsa tekanyetso le tsona ha li khothatse).

USB HDD le eona ha e shebahale e le tharollo e khahlang haholo.

Ka hona, re tla ho khetho ena: tlohela booting ho tloha ho MicroSD, empa e sebelise ka mokhoa oa ho bala feela, 'me u boloke tlaleho ea ts'ebetso (le boitsebiso bo bong bo ikhethang ho karolo e itseng ea hardware - nomoro ea serial, li-calibrations tsa sensor, joalo-joalo) kae-kae. .

Sehlooho sa FS e baloang feela bakeng sa li-raspberries se se se ithutile ka hare le ka ntle, nke ke ka lula ka lintlha tsa ts'ebetsong sehloohong sena. (empa haeba ho na le thahasello, mohlomong ke tla ngola sengoloa se senyane sehloohong sena). Ntho e le 'ngoe feela eo ke ratang ho e ela hloko ke hore ka bobeli ho tloha phihlelo ea botho le ho tsoa litlhahlobong tsa ba seng ba ntse ba e sebelisa, ho na le phaello ea ho tšepahala. E, ho ke ke ha khoneha ho felisa ho senyeha ka ho feletseng, empa ho fokotsa haholo hangata hoa khoneha. 'Me likarete li fetoha bonngoe, e leng se etsang hore ho be bonolo ho nkela basebeletsi ba litšebeletso sebaka.

Lisebelisoa

Ho ne ho se na lipelaelo tse khethehileng mabapi le khetho ea mofuta oa memori - NOR Flash.
Likhang:

  • khokahanyo e bonolo (hangata ke bese ea SPI, eo u seng u ntse u e-na le phihlelo ea ho e sebelisa, kahoo ha ho na mathata a hardware a lebelletsoeng esale pele);
  • theko e se nang kelello;
  • protocol e tloaelehileng ea ts'ebetso (ts'ebetsong e se e ntse e le ka har'a kernel ea Linux, haeba u lakatsa, u ka nka motho oa boraro, e leng teng, kapa u ngole ea hau, ka lehlohonolo ntho e 'ngoe le e' ngoe e bonolo);
  • ho tšepahala le mohlodi:
    ho tswa ho database e tloaelehileng: data e bolokiloe ka lilemo tse 20, 100000 e hlakola lipotoloho bakeng sa thibela e 'ngoe le e' ngoe;
    ho tsoa mehloling ea batho ba boraro: BER e tlase haholo, e fana ka maikutlo a hore ha ho hlokahale likhoutu tsa ho lokisa liphoso (mesebetsi e meng e nka ECC bakeng sa NOR, empa hangata e ntse e bolela MLC NOR; sena le sona sea etsahala).

Ha re hakanye litlhoko tsa bophahamo ba modumo le mohlodi.

Ke kopa hore data e netefatsoe hore e bolokehe matsatsi a 'maloa. Sena sea hlokahala e le hore haeba ho na le mathata leha e le afe a puisano, histori ea thekiso ha e lahlehe. Re tla tsepamisa maikutlo matsatsing a 5, nakong ena (esita le ho nahanela mafelo-beke le matsatsi a phomolo) bothata bo ka rarolloa.

Hona joale re bokella hoo e ka bang 100kb ea lifate ka letsatsi (li-entries tse likete tse 3-4), empa butle-butle palo ena e ntse e hōla - lintlha li ntse li eketseha, liketsahalo tse ncha li ntse li eketsoa. Ho feta moo, ka linako tse ling ho na le ho phatloha (sensor e 'ngoe e qala ho spamming ka lintlha tse fosahetseng, mohlala). Re tla bala lirekoto tse likete tse 10 li-byte tse 100 ka 'ngoe - megabyte ka letsatsi.

Ka kakaretso, 5MB ea data e hloekileng (e hatelitsoeng hantle) e tsoa. Ho feta ho bona (khakanyo e fosahetseng) 1MB ea data ea litšebeletso.

Ke hore, re hloka chip ea 8MB haeba re sa sebelise compression, kapa 4MB ha re e sebelisa. Linomoro tsa sebele tsa mofuta ona oa memori.

Ha e le mohloli: haeba re rera hore mohopolo oohle o tla ngoloa hape ka matsatsi a mang le a mang a 5, joale ho feta lilemo tse 10 tsa tšebeletso re fumana lipotoloho tse ka tlase ho sekete.
E-re ke u hopotse hore moetsi o tšepisa likete tse lekholo.

Hanyane ka NOR vs NAND

Kajeno, ehlile, memori ea NAND e tumme haholo, empa nke ke ka e sebelisa bakeng sa morero ona: NAND, ho fapana le NOR, e hlile e hloka tšebeliso ea likhoutu tsa ho lokisa liphoso, tafole ea li-blocks tse mpe, joalo-joalo, le maoto a NAND chips hangata ho feta.

Mefokolo ea NOR e kenyelletsa:

  • molumo o monyenyane ('me, ho latela, theko e phahameng ka megabyte);
  • lebelo le tlaase la puisano (haholo-holo ka lebaka la hore sebopeho sa serial se sebelisoa, hangata SPI kapa I2C);
  • ho hlakola butle (ho ipapisitse le boholo ba block, ho nka ho tloha ho karolo ea motsotsoana ho isa ho metsotsoana e mengata).

Ho bonahala eka ha ho letho le bohlokoa bakeng sa rona, kahoo re tsoela pele.

Haeba lintlha li thahasellisa, microcircuit e khethiloe ho25df321a (leha ho le joalo, sena ha se bohlokoa, ho na le li-analogue tse ngata 'marakeng tse lumellanang le pinout le tsamaiso ea litaelo; le haeba re batla ho kenya microcircuit ho tloha ho moetsi o fapaneng le / kapa boholo bo fapaneng, ntho e' ngoe le e 'ngoe e tla sebetsa ntle le ho fetola khoutu).

Ke sebelisa mokhanni ea hahelletsoeng ka har'a kernel ea Linux; ho Raspberry, ka lebaka la ts'ehetso ea sekoaelo sa sefate, ntho e 'ngoe le e' ngoe e bonolo haholo - o hloka ho kenya sekoaelo se hlophisitsoeng ho /boot/overlays le ho fetola hanyenyane /boot/config.txt.

Mohlala oa dts file

Ho bua 'nete, ha ke na bonnete ba hore e ngotsoe ntle le liphoso, empa e sebetsa.

/*
 * 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?";
    };
};

Le mola o mong ho config.txt

dtoverlay=at25:spimaxfrequency=50000000

Ke tla siea tlhaloso ea ho hokahanya chip ho Raspberry Pi. Ka lehlakoreng le leng, ha ke setsebi sa elektronike, ka lehlakoreng le leng, ntho e 'ngoe le e' ngoe mona ke banal esita le bakeng sa ka: microcircuit e na le maoto a 8 feela, ao re a hlokang fatše, matla, SPI (CS, SI, SO, SCK). ); maemo a ts'oana le a Raspberry Pi, ha ho na wiring e eketsehileng e hlokahalang - hokela feela lithakhisa tse 6 tse bontšitsoeng.

Mokhoa oa bothata

Joalo ka tloaelo, polelo ea bothata e feta makhetlo a 'maloa,' me ho 'na ho bonahala eka ke nako ea e latelang. Kahoo a re emeng, re kopanye se seng se ngotsoe, 'me re hlakise lintlha tse setseng moriting.

Kahoo, re nkile qeto ea hore log e tla bolokoa ho SPI NOR Flash.

NOR Flash ke eng bakeng sa ba sa tsebeng?

Ena ke memori e sa fetoheng eo o ka etsang lits'ebetso tse tharo ka eona:

  1. Ho bala:
    Ho bala ho tloaelehileng haholo: re fetisetsa aterese le ho bala li-byte tse ngata kamoo re li hlokang;
  2. Rekoto:
    Ho ngolla ho NOR Flash ho shebahala joalo ka ntho e tloaelehileng, empa e na le ntho e le 'ngoe e ikhethang: o ka fetola 1 ho isa ho 0 feela, empa eseng ka tsela e fapaneng. Mohlala, haeba re ne re na le 0x55 ka seleng ea memori, ka mor'a ho ngola 0x0f ho eona, 0x05 e tla be e se e bolokiloe moo. (sheba tafole e ka tlase);
  3. Hlakola:
    Ehlile, re hloka ho khona ho etsa ts'ebetso e fapaneng - fetola 0 ho 1, sena ke sona seo ts'ebetso ea ho hlakola e leng sona. Ho fapana le tse peli tsa pele, ha e sebetse ka li-byte, empa e na le li-block (bonyane bo fokolang ba ho hlakola ka har'a chip e khethiloeng ke 4kb). Hlakola e senya thibela eohle 'me ke eona feela tsela ea ho fetola 0 ho ea ho 1. Ka hona, ha u sebetsa ka memori ea flash, hangata u tlameha ho hokahanya mehaho ea data ho moeli oa ho hlakola.
    E rekota ka NOR Flash:

Lintlha tsa binary

E ne le
01010101

E rekotiloeng
00001111

E se e le
00000101

Log ka boeona e emela tatellano ea lirekoto tsa bolelele bo fapaneng. Bolelele bo tloaelehileng ba rekoto bo ka ba li-byte tse 30 (le hoja ho na le litlaleho tse bolelele ba li-kilobyte tse 'maloa ka linako tse ling). Tabeng ena, re sebetsa le bona feela e le sete ea li-byte, empa, haeba u thahasella, CBOR e sebelisoa ka hare ho litlaleho.

Ho phaella ho log, re hloka ho boloka boitsebiso bo bong ba "setting", bobeli bo nchafalitsoeng eseng: ID ea sesebelisoa se itseng, li-calibrations tsa sensor, "folakha ea "sesebelisoa se holofetseng" ka nakoana, joalo-joalo.
Litaba tsena ke sehlopha sa lirekoto tsa boleng ba bohlokoa, hape li bolokiloe ho CBOR.
Ho se latelang re tla e bitsa moelelo.

Haeba re hopola moo sehlooho sena se qalileng teng, ke habohlokoa haholo ho netefatsa hore ho boloka boitsebiso bo ka tšeptjoang 'me, haeba ho khoneha, ts'ebetso e tsoelang pele esita le haeba ho na le ho hlōleha ha hardware / bobolu ba data.

Ho ka nahanoa ka mehloli efe ea mathata?

  • Ho tima nakong ea ho ngola / ho hlakola. Sena se tsoa sehlopheng sa "ha ho na leqheka khahlanong le crowbar."
    Boitsebiso bo tsoang ho lipuisano ka stackexchange: ha matla a tima ha a ntse a sebetsa ka flash, ka bobeli hlakola (beha ho 1) 'me u ngole (setetsoe ho 0) ho lebisa boitšoarong bo sa hlalosoang: data e ka ngoloa, e ngotsoe ka mokhoa o itseng (e re, re fetisitse 10 bytes / 80 bits). , empa ha ho e-s'o ka ho ngoloa li-bits tse 45 feela), ho ka etsahala hape hore tse ling tsa likaroloana li tla ba boemong ba "bohareng" (ho bala ho ka hlahisa 0 le 1);
  • Liphoso tsa memori ea flash ka boeona.
    BER, leha e le tlase haholo, e ke ke ea lekana le zero;
  • Liphoso tsa libese
    Lintlha tse fetisoang ka SPI ha li sirelelitsoe ka tsela efe kapa efe, liphoso tse peli le liphoso tsa khokahano li ka hlaha - tahlehelo kapa ho kenngoa ha likotoana (e leng se lebisang ho khopameng ho hoholo ha data);
  • Liphoso / glitches tse ling
    Liphoso tsa khoutu, Raspberry glitches, tšitiso ea basele ...

Ke hlophisitse litlhoko, tseo ka maikutlo a ka, phethahatso ea tsona e leng ea bohlokoa ho netefatsa ho tšepahala:

  • Lirekoto li tlameha ho kena mohopolong oa flash hang-hang, ho ngola ho liehang ha ho nahaneloe; - haeba phoso e etsahala, e tlameha ho bonoa le ho sebetsoa kapele kamoo ho ka khonehang; - sistimi e tlameha, haeba ho khonahala, e hlaphoheloe liphosong.
    (mohlala o tsoang bophelong "kamoo e sa lokelang ho ba kateng", eo ke nahanang hore motho e mong le e mong o kile a kopana le eona: ka mor'a ho tsosolosoa ha tšohanyetso, tsamaiso ea faele e "robehile" 'me tsamaiso ea ho sebetsa ha e qale)

Mehopolo, mekhoa, maikutlo

Ha ke qala ho nahana ka bothata bona, mehopolo e mengata e ile ea hlaha hloohong ea ka, mohlala:

  • sebelisa compression ya data;
  • sebelisa mekhoa e bohlale ea data, mohlala, ho boloka lihlooho tsa rekoto ka thoko ho lirekoto ka botsona, e le hore haeba ho na le phoso tlalehong efe kapa efe, u ka bala tse ling ntle le mathata;
  • sebelisa libaka tse nyenyane ho laola ho phethoa ha ho rekota ha matla a tima;
  • boloka lichelete tsa lichelete bakeng sa ntho e 'ngoe le e' ngoe;
  • sebelisa mofuta o itseng oa likhoutu tse thibelang lerata.

E meng ea mehopolo ena e ile ea sebelisoa, ha e meng e ile ea etsoa qeto ea hore e tloheloe. Ha re tsamayeng ka tatellano.

Khatello ea data

Liketsahalo ka botsona tseo re li ngolang koranteng li tšoana hantle ebile lia phetoa ("lahlela chelete ea tšepe ea li-ruble tse 5", "tobetsa konopo bakeng sa ho fana ka phetoho", ...). Ka hona, compression e lokela ho sebetsa haholo.

The compression overhead ha e na thuso (processor ea rona e matla haholo, esita le Pi ea pele e ne e e-na le mokokotlo o le mong o nang le maqhubu a 700 MHz, mefuta ea morao-rao e na le li-cores tse 'maloa tse nang le maqhubu a fetang gigahertz), sekhahla sa phapanyetsano le polokelo se tlaase (tse ngata). megabytes ka motsotsoana), boholo ba lirekoto bo nyane. Ka kakaretso, haeba khatello e na le tšusumetso mosebetsing, e tla ba ntle feela. (ha e nyatse ka ho feletseng, e bolela feela). Hape, ha re na Linux e kentsoeng, empa Linux e tloaelehileng - kahoo ts'ebetsong ha ea lokela ho hloka boiteko bo bongata (ho lekane ho hokahanya laebrari le ho sebelisa mesebetsi e mengata ho eona).

Sekhechana sa log se nkiloe sesebelisoa se sebetsang (1.7 MB, 70 tse likete tse kenngoeng) 'me ea qala ho hlahlojoa bakeng sa compressibility ho sebelisa gzip, lz4, lzop, bzip2, xz, zstd e fumanehang komporong.

  • gzip, xz, zstd e bontšitse liphetho tse tšoanang (40Kb).
    Ke ile ka makatsoa ke hore xz ea feshene e iponahatsa mona boemong ba gzip kapa zstd;
  • lzip e nang le litlhophiso tsa kamehla e fane ka liphetho tse mpe hanyane;
  • lz4 le lzop ha li bontše liphetho tse ntle haholo (150Kb);
  • bzip2 e bontšitse sephetho se setle ka mokhoa o makatsang (18Kb).

Kahoo, data e hatelloa hantle haholo.
Kahoo (haeba re sa fumane liphoso tse bolaeang) ho tla ba le khatello! Hobane data e ngata e ka lekana ho flash drive e tšoanang.

A re nahaneng ka mefokolo.

Bothata ba pele: re se re lumellane hore rekoto e 'ngoe le e' ngoe e tlameha ho ea ho flash hang-hang. Ka tloaelo, setsi sa polokelo ea lintho tsa khale se bokella lintlha ho tloha mohloling o kenang ho fihlela o etsa qeto ea hore ke nako ea ho ngola mafelo-beke. Re hloka ho fumana hang-hang "block" e hatisitsoeng ea data ebe re e boloka mohopolong o sa fetoheng.

Ke bona litsela tse tharo:

  1. Hatisa rekoto e 'ngoe le e' ngoe u sebelisa khatiso ea bukana ho e-na le li-algorithms tse boletsoeng ka holimo.
    Ke khetho e sebetsang ka botlalo, empa ha ke e rate. Ho etsa bonnete ba hore ho na le boemo bo nepahetseng ba khatello, buka e hlalosang mantsoe e tlameha ho "lokisoa" ho latela lintlha tse itseng; phetoho efe kapa efe e tla lebisa ho theoheng ha maemo a khatello. Ee, bothata bo ka rarolloa ka ho theha mofuta o mocha oa bukantswe, empa ena ke hlooho e bohloko - re tla hloka ho boloka diphetolelo tsohle tsa bukantswe; kenong e 'ngoe le e 'ngoe re tla hloka ho bontša hore na e hatisitsoe ka mofuta ofe oa bukantswe...
  2. Hatisa rekoto e 'ngoe le e' ngoe u sebelisa li-algorithms tsa "classical", empa ntle le tse ling.
    Li-algorithms tsa khatello tse ntseng li nahanoa ha li etselitsoe ho sebetsa le lirekoto tsa boholo bona (mashome a li-byte), tekanyo ea khatello e tla ba ka tlase ho 1 (ke hore, ho eketsa molumo oa data ho e-na le ho hatella);
  3. Etsa FLUSH ka mor'a ho rekota ka 'ngoe.
    Lilaebrari tse ngata tsa khatello li na le tšehetso bakeng sa FLUSH. Ena ke taelo (kapa paramethara ea mokhoa oa ho hatella), ha o amohela hore polokelo ea litaba e theha molatsoana o hatelitsoeng e le hore o ka sebelisoa ho khutlisa. tsohle data e sa hatelloang e seng e amohetsoe. Analogue e joalo sync tsamaisong ea lifaele kapa commit ka sql.
    Ntho ea bohlokoa ke hore ts'ebetso e latelang ea compression e tla khona ho sebelisa dikishinari e bokelletsoeng mme tekanyo ea compression e ke ke ea utloa bohloko joalo ka mofuta o fetileng.

Ke nahana hore ho hlakile hore ke khethile khetho ea boraro, a re e shebeng ka ho qaqileng.

Fumana sehlooho se setle mabapi le FLUSH ho zlib.

Ke ile ka etsa tlhahlobo ea lengole ho latela sengoloa, ke nkile likenyo tsa 70 tse likete tse tsoang sesebelisoa sa 'nete, se nang le boholo ba leqephe la 60Kb. (re tla khutlela boholong ba leqephe hamorao) e amohetse:

Lintlha tsa pele
Compress gzip -9 (ha ho FLUSH)
zlib e nang le Z_PARTIAL_FLUSH
zlib e nang le Z_SYNC_FLUSH

Bolumo, KB
1692
40
352
604

Ha u habanya feela, theko e tlatsitsoeng ke FLUSH e phahame haholo, empa ha e le hantle ha re na boikhethelo - ebang re se ke ra hatella ho hang, kapa ho hatella (le ka katleho haholo) ka FLUSH. Ha rea ​​​​lokela ho lebala hore re na le lirekoto tse likete tse 70, ho fokotseha ho hlahisoang ke Z_PARTIAL_FLUSH ke li-byte tse 4-5 feela ka rekoto. Mme karo-karolelano ea compression e batla e le 5: 1, e leng se fetang sephetho se setle haholo.

E kanna ea makatsa, empa Z_SYNC_FLUSH ha e le hantle ke mokhoa o sebetsang haholoanyane oa ho etsa FLUSH

Ha u sebelisa Z_SYNC_FLUSH, li-byte tse 4 tsa ho qetela tsa keno ka 'ngoe e tla lula e le 0x00, 0x00, 0xff, 0xff. 'Me haeba re li tseba, ha ho hlokahale hore re li boloke, kahoo boholo ba ho qetela ke 324Kb feela.

Sengoliloeng seo ke se hokahantseng le sona se na le tlhaloso:

Mofuta o mocha oa 0 block o nang le litaba tse se nang letho o kentsoe.

Mofuta oa 0 block o nang le litaba tse se nang letho o na le:

  • hlooho ea li-bits tse tharo;
  • 0 ho ea ho li-bits tse 7 tse lekanang le zero, ho finyella ho lumellana ha li-byte;
  • tatelano ya dibyte tse nne 00 00 FF FF.

Joalo ka ha u bona habonolo, bolokong ba ho qetela pele ho li-byte tsena tse 4 ho na le li-bits tse 3 ho isa ho tse 10 tsa zero. Leha ho le joalo, tloaelo e bontšitse hore ho na le bonyane li-bits tse 10 tsa zero.

Hoa fumaneha hore li-blocks tse khutšoane joalo tsa data hangata (kamehla?) li kentsoe ho sebelisoa mofuta oa 1 (block e tsitsitseng), e hlileng e qetellang ka li-bits tse 7, e fanang ka kakaretso ea 10-17 e netefalitsoeng ea zero ('me ba bang kaofela ba tla e be lefela ka monyetla oa hoo e ka bang 50%).

Kahoo, ho data ea liteko, maemong a 100% ho na le zero byte e le 'ngoe pele ho 0x00, 0x00, 0xff, 0xff,' me maemong a fetang karolo ea boraro ho na le li-bayte tse peli tsa zero. (mohlomong 'nete ke hore ke sebelisa binary CBOR,' me ha u sebelisa mongolo JSON, li-blocks tsa mofuta oa 2 - dynamic block e ne e tla ba e tloaelehileng haholoanyane, ka ho latellana, li-blocks ntle le li-byte tse eketsehileng tsa zero pele ho 0x00, 0x00, 0xff, 0xff e tla kopana le eona).

Ka kakaretso, ho sebelisa lintlha tsa tlhahlobo tse fumanehang, hoa khoneha ho lekana ka tlase ho 250Kb ea data e hatelitsoeng.

U ka boloka hanyane ka ho juggling bits: hajoale re iphapanyetsa boteng ba likotoana tse 'maloa tsa zero qetellong ea boloko, likotoana tse' maloa qalong ea block le tsona ha li fetohe ...
Empa joale ke ile ka etsa qeto e tiileng ea ho khaotsa, ho seng joalo ka lebelo lena nka qetella ke iketselitse pokello ea ka ea polokelo ea litaba.

Ka kakaretso, ho tsoa ho data ea ka ea liteko ke fumane li-byte tse 3-4 ka mongolo o mong le o mong, tekanyo ea compression e bile ho feta 6: 1. Ke tla bua 'nete: Ke ne ke sa lebella sephetho se joalo; ka maikutlo a ka, ntho leha e le efe e molemo ho feta 2: 1 e se e le sephetho se lokafatsang tšebeliso ea khatello.

Ntho e 'ngoe le e' ngoe e hantle, empa zlib (deflate) e ntse e le mokhoa oa khale oa ho hatella, o lokeloang hantle le oa khale oa compression algorithm. Taba feela ea hore 32Kb ea ho qetela ea phallo ea data e sa hatelletsoeng e sebelisoa joalo ka bukantswe e shebahala e makatsa kajeno (ke hore, haeba data block e ts'oana haholo le se neng se le ka har'a phallo ea 40Kb e fetileng, e tla qala ho bolokoa hape, 'me e ke ke ea bua ka ketsahalo e fetileng). Litsing tsa khale tsa khale tsa khale, boholo ba dikishinari hangata bo lekanngoa ka megabytes ho fapana le kilobytes.

Kahoo re tsoela pele ka boithuto ba rona ba mini-archivers.

Ka mor'a moo re ile ra leka bzip2 (hopola, ntle le FLUSH e bontšitse tekanyo e tsotehang ea compression ea hoo e ka bang 100: 1). Ka bomalimabe, e sebelitse hampe haholo ka FLUSH; boholo ba data e hatelitsoeng e bile kholo ho feta data e sa hatelloang.

Maikutlo a ka mabapi le mabaka a ho hloleha

Libbz2 e fana ka khetho e le 'ngoe feela ea flush, e bonahalang e hlakola buka e hlalosang mantsoe (e ts'oanang le Z_FULL_FLUSH ho zlib); ha ho na puo ea khatello e sebetsang ka mor'a sena.

Mme ea ho qetela e ileng ea lekoa ke zstd. Ho ipapisitsoe le liparamente, e hatella ebang ke boemong ba gzip, empa ka potlako haholo, kapa e betere ho feta gzip.

Oho, ka FLUSH ha ea ka ea sebetsa hantle haholo: boholo ba data e hatelitsoeng e ne e ka ba 700Kb.

Я ke botsitse leqepheng la github ea morero, ke fumane karabo ea hore u lokela ho itšetleha ka li-byte tse 10 tsa data ea tšebeletso bakeng sa sebaka se seng le se seng sa data e hatelitsoeng, e haufi le liphetho tse fumanoeng; ha ho na mokhoa oa ho fumana deflate.

Ke ile ka etsa qeto ea ho emisa nakong ena litekong tsa ka tsa li-archivers (e re ke u hopotse hore xz, lzip, lzo, lz4 ha lia ka tsa iponahatsa esita le sethaleng sa liteko ntle le FLUSH, 'me ha kea ka ka nahana ka li-algorithms tse sa tloaelehang tsa compression).

Ha re khutleleng mathateng a ho boloka litlaleho.

Ea bobeli (joalokaha ba re ka tatellano, eseng ka boleng) bothata ke hore data e hatelitsoeng ke molapo o le mong, oo ho oona ho lulang ho buuoa ka likarolo tse fetileng. Ka hona, haeba karolo ea data e hatelitsoeng e senyehile, ha re lahleheloe feela thibela e amanang le data e sa tsitsang, empa hape le tsohle tse latelang.

Ho na le mokhoa oa ho rarolla bothata bona:

  1. Thibela bothata hore bo se ke ba etsahala - eketsa redundancy ho data e hatelitsoeng, e tla u lumella ho khetholla le ho lokisa liphoso; re tla bua ka taba ena hamorao;
  2. Fokotsa liphello haeba bothata bo hlaha
    Re se re boletse pejana hore o ka hatella thibela e 'ngoe le e' ngoe ea data ka boithaopo, 'me bothata bo tla nyamela ka boeona (tšenyo ea data ea block e le' ngoe e tla lebisa ho lahleheloa ke data feela bakeng sa thibelo ena). Leha ho le joalo, ena ke boemo bo feteletseng boo compression ea data e ke keng ea sebetsa. Ho fapana le hoo: sebelisa 4MB eohle ea chip ea rona joalo ka polokelo e le 'ngoe, e tla re fa khatello e ntle haholo, empa litlamorao tse mpe haeba ho ka ba le bobolu ba data.
    E, ho sekisetsa hoa hlokahala mabapi le ho tšepahala. Empa re tlameha ho hopola hore re nts'etsapele sebopeho sa polokelo ea data bakeng sa memori e sa fetoheng e nang le BER e tlase haholo le nako e phatlalalitsoeng ea polokelo ea data ea lilemo tse 20.

Nakong ea liteko, ke fumane hore tahlehelo e kholo kapa e sa bonahaleng maemong a khatello e qala ho li-block tsa data e hatelitsoeng ka tlase ho 10 KB ka boholo.
Ho ne ho boletsoe pejana hore memori e sebelisitsoeng e ngotsoe; Ha ke bone lebaka leo ka lona "leqephe le le leng - sebaka se le seng sa data e hatelitsoeng" se sa lokelang ho sebelisoa.

Ka mantsoe a mang, boholo bo fokolang ba leqephe ke 16Kb (e nang le pokello ea tlhaiso-leseling ea litšebeletso). Leha ho le joalo, boholo bo joalo ba leqephe bo beha lithibelo tse kholo ho boholo ba rekoto.

Le hoja ke e-s'o lebelle lirekoto tse kholo ho feta li-kilobyte tse 'maloa ka mokhoa o hatelitsoeng, ke ile ka etsa qeto ea ho sebelisa maqephe a 32Kb (bakeng sa kakaretso ea maqephe a 128 ka chip).

Kakaretso:

  • Re boloka data e hatisitsoeng re sebelisa zlib (deflate);
  • Bakeng sa ho kena ka 'ngoe re beha Z_SYNC_FLUSH;
  • Bakeng sa rekoto e 'ngoe le e' ngoe e hatisitsoeng, re fokotsa li-byte tse latelang (mohlala 0x00, 0x00, 0xff, 0xff); sehloohong re bontša hore na re khaola li-byte tse kae;
  • Re boloka lintlha maqepheng a 32Kb; ho na le molapo o le mong oa data e hatisitsoeng ka har'a leqephe; Leqepheng le leng le le leng re qala ho hatella hape.

'Me, pele ke qeta ka compression, ke rata ho lebisa tlhokomelo ea hau tabeng ea hore re na le li-byte tse seng kae feela tsa data e hatelitsoeng ka rekoto, kahoo ho bohlokoa haholo hore u se ke ua phahamisa tlhahisoleseling ea litšebeletso, li-byte tsohle li bohlokoa mona.

Ho boloka Lihlooho tsa data

Kaha re na le lirekoto tsa bolelele bo fapaneng, re hloka ho tseba ka tsela e itseng ho beoa / meeli ea lirekoto.

Ke tseba mekhoa e meraro:

  1. Litlaleho tsohle li bolokiloe ka molapo o tsoelang pele, pele ho na le hlooho ea rekoto e nang le bolelele, ebe tlaleho ka boeona.
    Boemong bona, lihlooho le data li ka ba bolelele bo fapaneng.
    Ha e le hantle, re fumana lenane le hokahaneng le le leng le sebelisoang ka linako tsohle;
  2. Lihlooho le lirekoto ka botsona li bolokiloe melapong e fapaneng.
    Ka ho sebelisa lihlooho tsa bolelele bo sa feleng, re etsa bonnete ba hore tšenyo ea hlooho e le 'ngoe ha e ame tse ling.
    Mokhoa o ts'oanang o sebelisoa, mohlala, lits'ebetsong tse ngata tsa lifaele;
  3. Litlaleho li bolokiloe ka molapo o tsoelang pele, moeli oa rekoto o khethoa ke letšoao le itseng (setšoantšo / tatellano ea litlhaku tse thibetsoeng ka har'a li-blocks tsa data). Haeba ho na le lesupa ka hare ho rekoto, joale re e nkela sebaka ka tatellano e itseng (e balehe).
    Mokhoa o tšoanang o sebelisoa, ka mohlala, ho protocol ea PPP.

Ke tla etsa papiso.

Khetho ea 1:
Ke kenya ts'ebetsong ea ka ea "ring buffer" ho NOR flash
Ntho e 'ngoe le e' ngoe e bonolo haholo mona: ho tseba bolelele ba tlaleho, re ka bala aterese ea hlooho e latelang. Kahoo re tsamaea ka lihlooho ho fihlela re kopana le sebaka se tletseng 0xff (sebaka sa mahala) kapa qetellong ea leqephe.

Khetho ea 2:
Ke kenya ts'ebetsong ea ka ea "ring buffer" ho NOR flash
Ka lebaka la bolelele bo fapaneng ba rekoto, re ke ke ra bolela esale pele hore na re tla hloka lirekoto tse kae (ka hona lihlooho) ka leqephe. U ka jala lihlooho le data ka bobona maqepheng a fapaneng, empa ke khetha mokhoa o fapaneng: re beha lihlooho le lintlha leqepheng le le leng, empa lihlooho (tsa boholo bo sa feleng) li tsoa qalong ea leqephe, data (ea bolelele bo fapaneng) e tsoa qetellong. Hang ha ba "kopana" (ha ho na sebaka se lekaneng sa mahala bakeng sa ho kena ho ncha), re nka leqephe lena le phethehile.

Khetho ea 3:
Ke kenya ts'ebetsong ea ka ea "ring buffer" ho NOR flash
Ha ho na tlhoko ea ho boloka bolelele kapa tlhahisoleseling e 'ngoe mabapi le sebaka sa data hloohong; matšoao a bontšang meeli ea litlaleho a lekane. Leha ho le joalo, data e tlameha ho sebetsoa ha ho ngoloa / ho bala.
Ke ne ke tla sebelisa 0xff e le letšoao (le tlatsang leqephe ka mor'a ho hlakola), kahoo sebaka sa mahala se ke ke sa nkoa e le data.

Tafole ea papiso:

Khetho ea 1
Khetho ea 2
Khetho ea 3

Ho mamella liphoso
-
+
+

Ho sebetsa ka thata
+
-
+

Ho rarahana ho kenngwa tshebetsong
*
**
**

Khetho ea 1 e na le phoso e bolaeang: haeba leha e le efe ea lihlooho e senyehile, ketane eohle e latelang e senyeha. Likhetho tse setseng li u lumella ho khutlisa data leha ho ka ba le tšenyo e kholo.
Empa mona ho loketse ho hopola hore re nkile qeto ea ho boloka data ka mokhoa o hatelitsoeng, ka hona re lahleheloa ke data eohle e leqepheng ka mor'a rekoto e "robehileng", kahoo le hoja ho na le minus tafoleng, ha re etse joalo. e nke hloko.

Ho kopana:

  • khethong ea pele, re hloka ho boloka bolelele ba hlooho feela; haeba re sebelisa li-integer tsa bolelele bo feto-fetohang, hangata re ka feta ka byte e le 'ngoe;
  • ka khetho ea bobeli re hloka ho boloka aterese ea ho qala le bolelele; tlaleho e tlameha ho ba boholo bo sa fetoheng, ke hakanya li-byte tse 4 bakeng sa rekoto (li-byte tse peli bakeng sa offset, le li-byte tse peli bakeng sa bolelele);
  • khetho ea boraro e hloka feela tlhaku e le 'ngoe ho bontša qalo ea ho rekota, hammoho le ho rekota ka boeona ho tla eketseha ka 1-2% ka lebaka la ho sireletsa. Ka kakaretso, hoo e ka bang tekano le khetho ea pele.

Qalong, ke ne ke nka khetho ea bobeli e le eona e ka sehloohong (ka ba ka ngola ts'ebetsong). Ke ile ka e tlohela feela ha qetellong ke etsa qeto ea ho sebelisa compression.

Mohlomong ka letsatsi le leng ke ntse ke tla sebelisa khetho e tšoanang. Ka mohlala, haeba ke tlameha ho sebetsana le polokelo ea data bakeng sa sekepe se tsamaeang pakeng tsa Lefatše le Mars, ho tla ba le litlhoko tse fapaneng ka ho feletseng tsa ho tšepahala, mahlaseli a bokahohle, ...

Ha e le khetho ea boraro: Ke e file linaleli tse peli bakeng sa bothata ba ho kenya ts'ebetsong hobane feela ke sa rate ho senya ka ho sireletsa, ho fetola bolelele ba ts'ebetso, joalo-joalo. E, mohlomong ke leeme, empa ke tla tlameha ho ngola khoutu - hobaneng u iqobella ho etsa ntho eo u sa e rateng.

Kakaretso: Re khetha khetho ea polokelo ka mokhoa oa liketane "hlooho e nang le bolelele - data ea bolelele bo fapaneng" ka lebaka la ts'ebetso le boiketlo ba ts'ebetsong.

Ho Sebelisa Mabala a Bit ho Lekola Katleho ea Ts'ebetso ea ho Ngola

Ha ke hopole hona joale hore na ke fumane khopolo eo hokae, empa e shebahala tjena:
Bakeng sa keno e 'ngoe le e' ngoe, re fana ka likotoana tse 'maloa ho boloka lifolakha.
Joalokaha re boletse pejana, kamora ho hlakola likotoana tsohle li tlatsitsoe ka 1s, mme re ka fetola 1 ho isa ho 0, empa eseng ka tsela e fapaneng. Kahoo bakeng sa "folakha ha e so beoe" re sebelisa 1, hobane "folakha e behiloe" re sebelisa 0.

Mona ke hore na ho beha rekoto ea bolelele bo fapaneng ho flash ho ka shebahala joang:

  1. Beha folakha "ho rekota bolelele ho qalile";
  2. Ngola bolelele;
  3. Beha folakha ea "data e qalile";
  4. Re rekota data;
  5. Beha folakha ea "rekoto e felile".

Ho phaella moo, re tla ba le "phoso e etsahetseng" folakha, bakeng sa lifolakha tse 4 tse feletseng.

Tabeng ena, re na le linaha tse peli tse tsitsitseng "1111" - ho rekota ha ho so qale 'me "1000" - ho rekota ho atlehile; ha ho ka ba le tšitiso e sa lebelloang ea mokhoa oa ho rekota, re tla fumana linaha tse mahareng, tseo re ka li bonang le ho li sebetsa.

Mokhoa ona o thahasellisa, empa o sireletsa feela khahlanong le ho tima ha motlakase ka tšohanyetso le mefokolo e tšoanang, eo, ha e le hantle, e leng ea bohlokoa, empa sena se hole le lona feela (kapa esita le lona le ka sehloohong) lebaka la ho hlōleha ho ka khonehang.

Kakaretso: Ha re tsoeleng pele ho batla tharollo e ntle.

Lichelete

Lichecksum li boetse li etsa hore ho khonehe ho etsa bonnete ba (ka monyetla o utloahalang) hore re bala hantle se neng se lokela ho ngoloa. 'Me, ho fapana le likarolo tse boletsoeng ka holimo, li lula li sebetsa.

Haeba re nahana ka lethathamo la mehloli ea mathata eo re buileng ka eona ka holimo, joale checksum e khona ho lemoha phoso ho sa tsotellehe tšimoloho ea eona. (ntle le, mohlomong, bakeng sa bajaki ba kotsi - le bona ba ka etsa cheke).

Kahoo haeba sepheo sa rona ke ho netefatsa hore data e nepahetse, li-checksums ke mohopolo o motle.

Khetho ea algorithm bakeng sa ho bala cheke ha ea ka ea hlahisa lipotso - CRC. Ka lehlakoreng le leng, thepa ea lipalo e etsa hore ho khonehe ho tšoara mefuta e itseng ea liphoso 100%; ka lehlakoreng le leng, ho data e sa reroang, algorithm ena hangata e bonts'a monyetla oa ho thulana ha ho kholo ho feta moeli oa khopolo. Ke kenya ts'ebetsong ea ka ea "ring buffer" ho NOR flash. E ka 'na ea se ke ea e-ba algorithm e potlakileng, leha e le hore e lula e le bonyane ho latela palo ea likhohlano, empa e na le boleng ba bohlokoa haholo: litekong tseo ke ileng ka kopana le tsona, ho ne ho se na mekhoa eo ka ho hlaka e ileng ea hlōleha. Botsitso ke boleng bo ka sehloohong tabeng ena.

Mohlala oa thuto ea volumetric: karolo ea 1, karolo ea 2 (lihokelo ho narod.ru, masoabi).

Leha ho le joalo, mosebetsi oa ho khetha cheke ha o so fele; CRC ke lelapa lohle la licheke. U hloka ho etsa qeto ka bolelele, ebe u khetha polynomial.

Ho khetha bolelele ba cheke ha se potso e bonolo joalo ka ha e bonahala qalong.

E re ke etse mohlala:
A re be le monyetla oa hore ho be le phoso ho baiti e 'ngoe le e 'ngoe Ke kenya ts'ebetsong ea ka ea "ring buffer" ho NOR flash le cheke e nepahetseng, ha re bale palo e tloaelehileng ea liphoso ho lirekoto tse milione:

Data, byte
Checksum, byte
Liphoso tse sa lemoheng
Ho fumana liphoso tse fosahetseng
Kakaretso e fosahetseng

1
0
1000
0
1000

1
1
4
999
1003

1
2
0
1997
1997

1
4
0
3990
3990

10
0
9955
0
9955

10
1
39
990
1029

10
2
0
1979
1979

10
4
0
3954
3954

1000
0
632305
0
632305

1000
1
2470
368
2838

1000
2
10
735
745

1000
4
0
1469
1469

Ho ka bonahala eka ntho e 'ngoe le e' ngoe e bonolo - ho itšetlehile ka bolelele ba data e sirelelitsoeng, khetha bolelele ba checksum ka bonyane ba lintho tse fosahetseng tse fosahetseng - 'me leqheka le ka mokotleng.

Leha ho le joalo, bothata bo hlaha ka li-checksums tse khutšoane: leha ba tseba ho bona liphoso tse nyane, ba ka khona ka monyetla o moholo ho amohela data e sa reroang e le e nepahetseng. Ho ne ho se ho ntse ho e-na le sehlooho se buang ka Habré se hlalosang bothata bophelong ba sebele.

Ka hona, ho etsa hore papali ea cheke e sa sebetseng e batla e sa khonehe, o hloka ho sebelisa li-checksum tse bolelele ba likotoana tse 32 kapa tse telele. (bakeng sa bolelele bo fetang li-bits tse 64, hangata ho sebelisoa li-cryptographic hash).

Ho sa tsotellehe taba ea hore ke ngotse pejana hore re hloka ho boloka sebaka ka mekhoa eohle, re ntse re tla sebelisa 32-bit checksum (li-bits tse 16 ha li lekane, monyetla oa ho thulana o feta 0.01%; le 24 bits, joalo ka ha ba e re, ha ba eo mona kapa mane) .

Khanyetso e ka hlaha mona: na re bolokile byte e 'ngoe le e' ngoe ha re khetha compression e le hore joale re fane ka li-byte tse 4 hang-hang? Na ho ne ho ke ke ha e-ba molemo hore u se ke ua hatella kapa ua eketsa cheke? Ha e le hantle ha ho na compression ha e bolele, hore ha re hloke ho hlahloba botšepehi.

Ha re khetha polynomial, re ke ke ra khutlisetsa lebili, empa re nka CRC-32C e tsebahalang hona joale.
Khoutu ena e lemoha liphoso tse 6 lipaketeng ho fihla ho li-byte tse 22 (mohlomong e le nyeoe e tloaelehileng ho rona), liphoso tse 4 lipaketeng ho fihla ho li-byte tse 655 (hape ke nyeoe e tloaelehileng bakeng sa rona), 2 kapa palo efe kapa efe e sa tloaelehang ea liphoso tse nyane lipaketeng. ya bolelele bofe kapa bofe bo lekaneng.

Haeba mang kapa mang a thahasella lintlha

Sengoloa sa Wikipedia mabapi le CRC.

Litekanyetso tsa khoutu crc-32c mabapi le Webosaete ea Koopman - mohlomong setsebi se ka sehloohong sa CRC lefatšeng.

В sengoloa sa hae ke khoutu e 'ngoe e khahlisang, e fanang ka liparamente tse betere hanyenyane bakeng sa bolelele ba liphutheloana tse amanang le rona, empa ha kea ka ka nka phapang e le ea bohlokoa, 'me ke ne ke e-na le bokhoni bo lekaneng ba ho khetha khoutu e tloaelehileng ho e-na le e tloaelehileng le e batlisisitsoeng hantle.

Hape, kaha data ea rona e hatelloa, ho hlaha potso: na re lokela ho bala checksum ea data e hatelitsoeng kapa e sa tsitsang?

Likhang tse molemong oa ho bala checksum ea data e sa tsitsang:

  • Qetellong re hloka ho hlahloba ts'ireletso ea polokelo ea data - kahoo re e hlahloba ka ho toba (ka nako e ts'oanang, liphoso tse ka khonehang ts'ebetsong ea khatello ea maikutlo / decompression, tšenyo e bakoang ke mohopolo o robehileng, joalo-joalo e tla hlahlojoa);
  • Algorithm ea deflate ho zlib e na le ts'ebetsong e holileng hantle le ha ea lokela oela ka data e kentsoeng e "khopameng"; ho feta moo, hangata e khona ho bona liphoso ka mokhoa o ikemetseng molapong oa ho kenya, ho fokotsa monyetla o akaretsang oa ho se bone phoso (e entse tlhahlobo ka ho khelosa hanyane rekotong e khuts'oane, zlib e bone phoso. hoo e ka bang karolo ea boraro ea linyeoe).

Likhang khahlanong le ho bala checksum ea data e sa tsitsang:

  • CRC e "lokiloe" ka ho khetheha bakeng sa liphoso tse fokolang tse hlahang mohopolong oa flash (phoso e nyenyane molapong o hatelitsoeng e ka baka phetoho e kholo ho phallo ea phallo, eo ka eona, ka mokhoa o hlakileng, re ka "tšoarang" ho thulana);
  • Ha ke rate mohopolo oa ho fetisetsa data e ka senyehang ho decompressor, Ke mang ea tsebangkamoo a tla itšoara kateng.

Morerong ona, ke nkile qeto ea ho kheloha tloaelo e amoheloang ka kakaretso ea ho boloka cheke ea data e sa hatelletsoeng.

Kakaretso: Re sebelisa CRC-32C, re bala cheke ho tsoa ho data ka mokhoa oo li ngotsoeng ka ona ho khanya (kamora ho hatelloa).

Khalefo

Tšebeliso ea li-coding tse sa hlokahaleng, ha e le hantle, ha e felise tahlehelo ea data, leha ho le joalo, e ka khona haholo (hangata ka litaelo tse ngata tsa boholo) ea fokotsa menyetla ea tahlehelo ea data e ke keng ea fumanoa.

Re ka sebelisa mefuta e fapaneng ea ho fokotsa mosebetsi ho lokisa liphoso.
Likhoutu tsa Hamming li ka lokisa liphoso tse le 'ngoe, likhoutu tsa Reed-Solomon, likopi tse ngata tsa data tse kopantsoeng le li-checksums, kapa li-encodings tse kang RAID-6 li ka thusa ho khutlisa data leha ho ka ba le bobolu bo boholo.
Qalong, ke ne ke ikemiselitse ho sebelisa mokhoa o pharalletseng oa likhoutu tse thibelang liphoso, empa joale ke ile ka hlokomela hore re lokela ho qala ka ho ba le maikutlo a hore na ke liphoso life tseo re batlang ho itšireletsa ho tsona, ebe joale re khetha ho ngola.

Re boletse pejana hore liphoso li lokela ho tšoaroa kapele kamoo ho ka khonehang. Ke maemong afe moo re ka kopanang le liphoso?

  1. Rekoto e sa phethoang (ka lebaka le itseng ka nako ea ho rekota matla a ile a tima, Raspberry e ile ea hoama, ...)
    Oho, ha ho e-na le phoso e joalo, se setseng ke ho hlokomoloha litlaleho tse sa nepahaleng le ho nahana ka lintlha tse lahlehileng;
  2. Ngola liphoso (ka lebaka le itseng, se neng se ngotsoe mohopolong oa flash e ne e se se ngotsoeng)
    Re ka lemoha hang-hang liphoso tse joalo haeba re etsa tlhahlobo e baloang hang ka mor'a ho rekota;
  3. Ho sotha ha data mohopolong nakong ea polokelo;
  4. Liphoso tsa ho bala
    Ho e lokisa, haeba checksum e sa lumellane, ho lekane ho pheta ho bala ka makhetlo a 'maloa.

Ke hore, ke liphoso tsa mofuta oa boraro feela (bobolu bo itlelang feela ba data nakong ea polokelo) bo ke keng ba lokisoa ntle le likhoutu tse manganga. Ho bonahala eka liphoso tse joalo li ntse li le sieo haholo.

Kakaretso: ho ile ha etsoa qeto ea ho lahla li-coding tse sa hlokahaleng, empa haeba ts'ebetso e bontša phoso ea qeto ena, joale khutlela ho nahanela taba (ka lipalo-palo tse seng li bokeletsoe mabapi le ho hlōleha, e leng ho tla lumella ho khetha mofuta o nepahetseng oa khouto).

Прочее

Ehlile, sebopeho sa sengoloa ha se re lumelle ho lokafatsa karolo e 'ngoe le e 'ngoe ka sebopeho (mme matla a ka a se a felile), kahoo ke tla bua ka bokhutšoanyane lintlha tse ling tse sa kang tsa angoa pejana.

  • Ho ile ha etsoa qeto ea ho etsa hore maqephe ohle a “lekane”
    Ke hore, ho ke ke ha e-ba le maqephe a khethehileng a nang le metadata, likhoele tse arohaneng, joalo-joalo, empa ho e-na le hoo ho tla ba le khoele e le 'ngoe e ngolang maqephe ohle hape.
    Sena se tiisa hore esita le ho apara maqepheng, ha ho na ntlha e le 'ngoe ea ho hlōleha,' me kea e rata feela;
  • Hoa hlokahala ho fana ka phetolelo ea sebopeho.
    Sebopeho se se nang nomoro ea phetolelo sehloohong se sebe!
    Ho lekane ho kenyelletsa tšimo e nang le Nomoro e itseng ea Boselamose (saeno) ho sehlooho sa leqephe, se tla bonts'a mofuta oa sebopeho se sebelisitsoeng. (Ha ke nahane hore ts'ebetsong ho tla ba le tse leshome le metso e 'meli);
  • Sebelisa hlooho ea bolelele bo feto-fetohang bakeng sa lirekoto (tseo ho tsona ho nang le tse ngata), ho leka ho etsa hore 1 byte e telele maemong a mangata;
  • Ho kenyelletsa bolelele ba hlooho le bolelele ba karolo e fokolitsoeng ea rekoto e hatelitsoeng, sebelisa li-binary codes tsa bolelele bo feto-fetohang.

E thusitse haholo jenereithara ea inthaneteng Likhoutu tsa Huffman. Ka metsotso e seng mekae feela re khonne ho khetha likhoutu tse hlokahalang tsa bolelele bo fapaneng.

Tlhaloso ea sebopeho sa polokelo ea data

Byte odara

Likarolo tse kholo ho feta li-byte li bolokiloe ka sebopeho se seholo (network byte order), ke hore, 0x1234 e ngotsoe joalo ka 0x12, 0x34.

Pagination

Memori eohle ea flash e arotsoe ka maqephe a boholo bo lekanang.

Saese e sa feleng ea leqephe ke 32Kb, empa ha e fete 1/4 ea boholo ba kakaretso ea chip (bakeng sa chip ea 4MB, maqephe a 128 a fumanoa).

Leqephe le leng le le leng le boloka datha ntle le tse ling (ke hore, lintlha tse leqepheng le le leng ha li bue ka lintlha tse leqepheng le leng).

Maqephe ohle a baloa ka tatellano ea tlhaho (ka tatellano e nyolohang ea liaterese), ho qala ka nomoro 0 (leqephe la zero le qala atereseng ea 0, leqephe la pele le qala ho 32Kb, leqephe la bobeli le qala ho 64Kb, joalo-joalo)

Chip ea memori e sebelisoa e le cyclic buffer (ring buffer), ke hore, ho ngola pele ho ea leqepheng la nomoro ea 0, ebe nomoro ea 1, ..., ha re tlatsa leqephe la ho qetela, potoloho e ncha e qala le ho rekota ho tsoela pele ho tloha leqepheng la zero. .

Ka hare ho leqephe

Ke kenya ts'ebetsong ea ka ea "ring buffer" ho NOR flash
Qalong ea leqephe, hlooho ea leqephe la 4-byte e bolokiloe, ebe ho hlahlojoa hlooho (CRC-32C), ebe litlaleho li bolokiloe ka mokhoa oa "header, data, checksum".

Sehlooho sa leqephe (botala bo litšila setšoantšong) se na le:

  • lebala la Nomoro ea Boloi ba li-byte tse peli (hape ke lets'oao la mofuta oa sebopeho)
    bakeng sa mofuta oa hajoale oa sebopeho se baloang joalo ka 0xed00 ⊕ номер страницы;
  • k'hamera ea li-byte tse peli "Phetolelo ea leqephe" (nomoro ea potoloho ea memori).

Likenyo tse leqepheng li bolokiloe ka mokhoa o hatelitsoeng (ho sebelisoa algorithm ea deflate). Lirekoto tsohle tse leqepheng le le leng li hatelloa ka khoele e le 'ngoe (ho sebelisoa buka e hlalosang mantsoe e tloaelehileng), 'me leqepheng le leng le le leng le lecha khatello e qala bocha. Ke hore, ho theola rekoto efe kapa efe, lirekoto tsohle tse fetileng tse tsoang leqepheng lena (le ena feela) lia hlokahala.

Rekoto e 'ngoe le e' ngoe e tla hatelloa ka folakha ea Z_SYNC_FLUSH, 'me qetellong ea molatsoana o hatelitsoeng ho tla ba le li-byte tse 4 0x00, 0x00, 0xff, 0xff, mohlomong tse etelletsoeng pele ke li-bete tse ling tse peli kapa tse ling tse peli.
Re lahla tatelano ena (4, 5 kapa 6 byte bolelele) ha re ngolla ho flash memory.

Sehlooho sa rekoto ke 1, 2 kapa 3 byte e bolokang:

  • karolo e le 'ngoe (T) e bontšang mofuta oa rekoto: 0 - moelelo, 1 - log;
  • sebaka sa bolelele bo fapaneng (S) ho tloha ho 1 ho ea ho li-bits tse 7, ho hlalosa bolelele ba hlooho le "mohatla" o lokelang ho kenngoa tlalehong bakeng sa ho senyeha;
  • bolelele ba rekoto (L).

Tafole ea boleng ba S:

S
Bolelele ba lihlooho, li-byte
E lahliloe ka ho ngola, byte

0
1
5 (00 00 00 ff ff)

10
1
6 (00 00 00 00 ff ff)

110
2
4 (00 00 ff ff)

1110
2
5 (00 00 00 ff ff)

11110
2
6 (00 00 00 00 ff ff)

1111100
3
4 (00 00 ff ff)

1111101
3
5 (00 00 00 ff ff)

1111110
3
6 (00 00 00 00 ff ff)

Ke lekile ho etsa mohlala, ha ke tsebe hore na ho hlakile hakae:
Ke kenya ts'ebetsong ea ka ea "ring buffer" ho NOR flash
Yellow mona e bontša tšimo ea T, e tšoeu ea S, e tala L (bolelele ba data e hatelitsoeng ka li-byte), e putsoa data e hatelitsoeng, e khubelu ea li-byte tsa ho qetela tsa data e hatisitsoeng e sa ngoloang ho hopola mohopolo.

Kahoo, re ka ngola lihlooho tsa rekoto tsa bolelele bo tloaelehileng haholo (ho fihla ho li-byte tse 63 + 5 ka mokhoa o hatelitsoeng) ka mokhoa o le mong.

Ka mor'a tlaleho e 'ngoe le e' ngoe, ho bolokoa CRC-32C checksum, moo boleng bo sothehileng ba checksum e fetileng bo sebelisoang e le boleng ba pele (init).

CRC e na le thepa ea "nako", mokhoa o latelang oa sebetsa (hammoho le kapa ho tlosa phetoho e nyane ts'ebetsong): Ke kenya ts'ebetsong ea ka ea "ring buffer" ho NOR flash.
Ke hore, ha e le hantle, re bala CRC ea li-byte tsohle tse fetileng tsa lihlooho le lintlha tse leqepheng lena.

Ka ho toba ho latela checksum ke sehlooho sa rekoto e latelang.

Hlooho e entsoe ka tsela ea hore byte ea eona ea pele e lula e fapane le 0x00 le 0xff (haeba ho e-na le li-byte tsa pele tsa hlooho re kopana le 0xff, joale sena se bolela hore sena ke sebaka se sa sebelisoeng; 0x00 e bontša phoso).

Algorithms ea mohlala

Ho bala ho tsoa ho Flash Memory

'Malo ofe kapa ofe o tla le cheke ea cheke.
Haeba checksum e sa lumellane, ho bala ho phetoa ka makhetlo a 'maloa ka tšepo ea ho bala lintlha tse nepahetseng.

(sena sea utloahala, Linux ha e balehe ho tsoa ho NOR Flash, e lekiloeng)

Ngola ho memori ya flash

Re ngola lintlha.
Ha re li bale.

Haeba data e baloang e sa lumellane le data e ngotsoeng, re tlatsa sebaka seo ka li-zero ebe re bontša phoso.

Ho lokisa microcircuit e ncha bakeng sa ts'ebetso

Bakeng sa ho qala, sehlooho se nang le mofuta oa 1 se ngolloa leqepheng la pele (kapa ho fapana le zero).
Ka mor'a moo, moelelo oa pele o ngotsoe leqepheng lena (e na le UUID ea mochine le litlhophiso tsa kamehla).

Ke eona, memori ea flash e se e loketse ho sebelisoa.

Ho kenya mochine

Ha u laela, li-byte tsa pele tsa 8 tsa leqephe le leng le le leng (hlooho + CRC) li baloa, maqephe a nang le Nomoro ea Boselamose e sa tsejoeng kapa CRC e fosahetseng e hlokomolohuoa.
Ho tsoa maqepheng a "nepahetseng", ho khethoa maqephe a nang le boholo bo bongata, 'me leqephe le nang le palo e phahameng ka ho fetisisa le nkiloe ho bona.
Tlaleho ea pele e baloa, ho nepahala ha CRC le ho ba teng ha folakha ea "moemo" ho hlahlojoa. Haeba tsohle li tsamaea hantle, leqephe lena le nkoa e le la morao-rao. Haeba ho se joalo, re khutlela ho e fetileng ho fihlela re fumana leqephe la "phela".
'me leqepheng le fumanoeng re bala litlaleho tsohle, tseo re li sebelisang le folakha ea "context".
Boloka bukantswe ya zlib (e tla hlokahala bakeng sa ho kenya leqephe lena).

Ke eona feela, download e felile, moelelo oa taba o khutliselitsoe, o ka sebetsa.

Ho eketsa Keno ea Journal

Re hatella rekoto ka bukantswe e nepahetseng, re hlakisa Z_SYNC_FLUSH. Re bona hore na rekoto e hatisitsweng e ya lekana leqepheng la jwale.
Haeba e sa lumellane (kapa ho bile le liphoso tsa CRC leqepheng), qala leqephe le lecha (sheba ka tlase).
Re ngola fatše rekoto le CRC. Haeba phoso e etsahala, qala leqephe le lecha.

Leqephe le lecha

Re khetha leqephe la mahala le nang le palo e fokolang (re nka leqephe la mahala e le leqephe le nang le cheque e fosahetseng hloohong kapa ka mofuta o ka tlase ho ea hajoale). Haeba ho se na maqephe a joalo, khetha leqephe le nang le bonyane ba nomoro ho ba nang le mofuta o lekanang le oa hajoale.
Re hlakola leqephe le khethiloeng. Re hlahloba litaba ka 0xff. Haeba ho na le phoso, nka leqephe le latelang la mahala, joalo-joalo.
Re ngola hlooho leqepheng le hlakotsoeng, ho kena ha pele ke boemo ba hona joale ba moelelo oa taba, e latelang ke tlaleho e sa ngoloang (haeba e le teng).

Tšebeliso ea sebopeho

Ka maikutlo a ka, e ile ea fetoha mokhoa o motle oa ho boloka melaetsa e meng kapa e fokolang ea boitsebiso (sengoloa se hlakileng, JSON, MessagePack, CBOR, mohlomong protobuf) ho NOR Flash.

Ehlile, sebopeho se "lokiloe" bakeng sa SLC NOR Flash.

Ha ea lokela ho sebelisoa le mecha ea litaba ea BER e phahameng joalo ka NAND kapa MLC NOR (na mohopolo o joalo oa fumaneha hore o ka rekisoa?.

Ho feta moo, ha ea lokela ho sebelisoa le lisebelisoa tse nang le FTL ea tsona: USB flash, SD, MicroSD, joalo-joalo (bakeng sa mohopolo o joalo ke thehile sebopeho se nang le boholo ba leqephe la li-byte tse 512, ho saena qalong ea leqephe le leng le le leng le linomoro tse ikhethang tsa rekoto - ka linako tse ling ho ne ho khonahala ho khutlisa data eohle ho tsoa ho "glitched" flash drive ka ho bala ka tatellano e bonolo).

Ho ipapisitsoe le mesebetsi, sebopeho se ka sebelisoa ntle le liphetoho ho li-flash drive ho tloha ho 128Kbit (16Kb) ho isa ho 1Gbit (128MB). Haeba o lakatsa, o ka e sebelisa ho li-chips tse kholo, empa mohlomong o hloka ho fetola boholo ba leqephe (Empa mona potso ea ho khoneha ha moruo e se e ntse e hlaha; theko ea boholo bo boholo NOR Flash ha e khothatse).

Haeba motho a fumana sebopeho se thahasellisa 'me a batla ho se sebelisa morerong o bulehileng, ngola, ke tla leka ho fumana nako, ho bentša khoutu ebe ke e romella ho github.

fihlela qeto e

Joalokaha u ka bona, qetellong mokhoa ona o ile oa fetoha o bonolo esita le ho tena.

Ho thata ho bonahatsa ho iphetola ha pono ea ka sehloohong, empa nkholoe: qalong ke ne ke batla ho etsa ntho e rarahaneng, e ke keng ea senyeha, e khonang ho pholoha esita le ho phatloha ha nyutlelie haufi-ufi. Leha ho le joalo, lebaka (ke ts'epa) le ntse le hapile, 'me butle-butle lintho tse tlang pele li ile tsa fetohela boemong bo bonolo le bo kopanetsoeng.

Na e ka ’na eaba ke ne ke fositse? E, ehlile. Ho ka etsahala, ka mohlala, hore re rekile sehlopha sa li-microcircuits tsa boleng bo tlase. Kapa ka mabaka a mang lisebelisoa li ke ke tsa finyella litebello tsa ho tšepahala.

Ke na le moralo bakeng sa see? Ke nahana hore ka mor'a ho bala sehlooho sena ha u na pelaelo hore ho na le moralo. Ebile eseng a le mong.

Ka kutloisiso e tebileng haholoanyane, sebopeho se ile sa ntlafatsoa ka bobeli e le khetho ea ho sebetsa le "balune ea teko".

Hajoale ntho e 'ngoe le e' ngoe e tafoleng e sebetsa hantle, ha e le hantle ka letsatsi le leng tharollo e tla sebelisoa (hoo e ka bang) ka lisebelisoa tse makholo, a re boneng se etsahalang ts'ebetsong ea "combat" (ka lehlohonolo, ke tšepa hore sebopeho se u lumella ho lemoha liphoso ka botšepehi; kahoo u ka bokella lipalo-palo tse feletseng). Ka likhoeli tse 'maloa ho tla khoneha ho etsa liqeto ('me haeba u le malimabe, le pejana).

Haeba, ho itšetlehile ka liphello tsa tšebeliso, mathata a tebileng a fumanoa 'me ho hlokahala ntlafatso, joale ka sebele ke tla ngola ka eona.

Lingoliloeng

Ke ne ke sa batle ho etsa lethathamo le lelelele le tenang la mesebetsi e sebelisitsoeng; ka mor'a moo, bohle ba na le Google.

Mona ke ile ka etsa qeto ea ho siea lethathamo la lintho tseo ke li fumaneng tse neng li bonahala li thahasellisa haholo ho 'na, empa butle-butle li ile tsa fallela ka ho toba sengolong sa sengoloa,' me ntho e le 'ngoe ea sala lethathamong:

  1. Tšebeliso infgen ho tsoa ho mongoli zlib. E ka hlahisa litaba tsa deflate/zlib/gzip ka ho hlaka. Haeba u tlameha ho sebetsana le sebopeho sa ka hare sa sebopeho sa deflate (kapa gzip), ke se khothaletsa haholo.

Source: www.habr.com

Eketsa ka tlhaloso