Kysymys:
Kuinka ECC toimii nandwrite / nanddumpin kanssa mtd-utilsissa?
Cybergibbons
2015-09-27 10:33:03 UTC
view on stackexchange narkive permalink

Työskentelen laitteella, jolla on NAND-flash-siru TSOP48: ssa, SK Hynix H27U1G8F2BTR (1 Gbit / 128 Mt, 2048 tavua (+ 64 Tt varaosaa) sivut, 128 Tt lohkot).

Olen tyhjentänyt siru ja kaataa sisällön tiedostoon. Tämä tiedosto sisältää myös OOB (out-of-band) -tiedot, mikä johtaa 138412032 tavun tiedostoon.

Luon uuden simuloidun NAND MTD -laitteen käyttämällä:

  modprobe nandsim first_id_byte = 0xad second_id_byte = 0xf1 third_id_byte = 0x00 4th_id_byte = 0x1d  

Mikä johtaa laitteeseen, jolla on oikeat parametrit:

  $ mtdinfo / dev / mtd0mtd0Name : NAND-simulaattoriosio 0 Tyyppi: nandEraseblock-koko: 131072 tavua, 128,0 KiBA Pyyhintälohkojen määrä: 1024 (134217728 tavua, 128,0 MiB) Syöttö- / lähtöyksikön vähimmäiskoko: 2048 tavua Sivun alaosa: 512 tavuaOOB-koko: 64 tavua Merkki: pieni / vähäinen : 0Huovat lohkot ovat sallittuja: trueDevice on kirjoitettavissa: true  

Voin nyt kirjoittaa kuvani mtd-tiedostoon nandwrite -toiminnolla -o -vaihtoehto ilmaisemaan, että dumpissa on OOB-tietoja:

  nandwrite -o / dev / mt d0 with_oob.bin  

Sitten voin pudottaa kuvan käyttämällä nanddump:

  nanddump / dev / mtd0 -f ilman_oob. bin  

Tämä johtaa 134217728 tavun tiedostoon ilman OOB-tietoja. Tämä tiedosto on järkevä (kuten siinä, sisältää tiedostojärjestelmät, jotka voin liittää).

Muutaman kerran olen nähnyt ECC-virheitä suoritettaessa nanddump .

Kuinka tämä nandsim , nandwrite - ja nandddump -yhdistelmä päättää, mitä ECC-järjestelmää käytetään? Salama on peräisin TI AM335 -järjestelmästä, ja sikäli kuin tiedän, ECC-järjestelmästä päättää prosessorin ja käyttöjärjestelmän yhdistelmä. Mistä nämä apuohjelmat tietävät mitä tehdä?

Saatat olla parempi onni kysyä osoitteesta http://electronics.stackexchange.com/ täällä.
Luulen, että yritän siirtää sen, jos en saa mitään täällä. Olen kokeillut muutamia muita paikkoja, ja vastaukset ovat olleet tiedä tai "lukenut koodi" (mikä on hienoa, mutta en silti pysty selvittämään, miten se toimii).
üks vastaus:
bshm
2016-06-18 15:09:41 UTC
view on stackexchange narkive permalink

Ensinnäkin käytetyn ECC-järjestelmän ei tarvitse välttämättä olla kaikkien salaman pyyhkäisylohkojen kohdalla. Käytössä on tavallisesti 3 erityyppistä flash-osiota, ja jokaiselle tyypille menetelmä erottaa käytetyn ECC-koodin:

  1. Se, johon ROM-käynnistyskoodi käyttää
  2. Ne, joita käynnistyslatain käyttää (yleensä u-boot)
  3. Ne, joita käyttöjärjestelmä käyttää (olettaen, että käytät Linuxia)

Yleensä salaman OOB-koko rajoittaa tietyn ECC-menetelmän käyttöä. AM335x_U-Boot_User's_Guide (ei voi lähettää linkkiä tänne maineensa vuoksi) selittää sen osioissa BCH Flash OOB Layout ja esimerkki vastaa käyttämääsi flash-sirua. 64 tavua 2 kt sivua rajoittaa käytännössä käytettävissä olevat ECC-algoritmit BCH8-, BCH4- tai HAMMING-koodeihin.

BCH Flash OOB -asettelu

Mihin tahansa ECC-malliin on lisättävä joitain ylimääräisiä tietoja kirjoitettaessa NAND-osan aiheuttamien virheiden havaitsemiseksi ja korjaamiseksi (jos mahdollista). BCH-kaavion yhteydessä tarvitaan joitain tavuja ECC: hen liittyvien tietojen tallentamiseen.

NAND-muistin osaan, johon lisätiedot, kuten ECC-tiedot, tallennetaan Out Of Band- tai OOB-osiota.

Kahta ensimmäistä tavua käytetään virheellisen lauseen merkkiin - 0xFFFF => hyvä lohko

Seuraavia 'N' tavuja käytetään BCH-tavuihin

N = B * numero sivun 512 tavun sektoreista

B = 8 tavua per 512 tavun sektoria BCH4: ssä B = 14 tavua per 512 tavun sektoria BCH8: ssa B = 26 tavua per 512 tavun sektoria BCH8: ssa B = 26 tavua / 512 tavun sektoria BCH16: ssa

Joten 2k sivun kokoiselle NAND-salamalle, jossa on 64 tavun OOB-koko, käytämme BCH8: ta. Tämä kuluttaa 2 + (14 * 4) = 58 tavua 64 tavusta.

ROM-käynnistyskoodin käyttämä ECC

AM335x-prosessorin ROM-käynnistyskoodi päättää, mitä ECC-mallia käytetään NAND-flashille, riippuen AM335x: n teknisen ohjekirjan luvussa 26.1 esitetystä mekanismista .7.4 NAND

ECC-korjaus Oletuksena käytetty ECC-korjaus on BCH 8b / sektori GPMC- ja ELM-laitteistoa käyttäen. Laitetunnuskoodeille D3h, C3h, D5h, C5h, D7h, C7h, DEh, CEh, kun valmistajan koodi (ensimmäinen ID-tavu) on 98h, solutyyppitiedot tarkistetaan ID-tietojen 4. tavussa. Jos se on yhtä suuri kuin 10b, käytetty ECC-korjaus on BCH 16b / sektori. Lisäksi ROM: n suorittama ECC-laskenta voidaan kytkeä kokonaan pois päältä SYSBOOT-toiminnolla [9]. Tämä on erityisen hyödyllistä, kun se on yhteydessä NAND-laitteisiin, jotka ovat rakentaneet ECC-moottorit.

Muita tapoja hallita ECC-käyttäytymistä ovat ONFI tai I2C EEPROM, mutta H27U1G8F2BTR-lomakkeessa ei mainita ONFI: ta arvaa, että flash-siru ei tue sitä.

Joten BCH8: ta tai BCH16: ta tai ei ECC-mekanismia käytetään ensimmäisessä 128K: ssa, jonka ROM-käynnistyslatain lukee NAND-flashista. käynnistyslatauslaite

Käynnistäjä lataajan päättää tämän itse. Esimerkiksi U-bootille nämä tiedot kootaan u-boot ja ensimmäisen tason bootloaderiksi (SPL / MLO). Tietoja ohjataan käännösaikana määritetyillä U-Boot-kokoonpanoasetuksilla. Uusimmat U-boot-versiot voivat vaihtaa ecc: n ajon aikana käyttämällä nandecc-komentoa.

Käyttöjärjestelmän käyttämä ECC

Valinta on täysin käyttöjärjestelmäkohtainen. AM335x-prosessoreita käyttäville Linux-sulautetuille järjestelmille tiedän, että nämä tiedot välitetään ytimeen laitepuun avulla.

Mitä ECC-menetelmää nandsim käyttää

On olemassa parametri nimeltä bch , joka voidaan välittää nandsim-moduulille valitsemalla ecc-koodi. Koodista luulen, että se alustetaan nollaan, joten se ei käytä mitään ECC-koodia. Joten näyttää siltä, ​​että nandsim voi käyttää BCH8: ta ja BCH16: ta, mutta vain yhtä koko simuloidulle flashille.

modprobe nandsim bch = 8 first_id_byte = 0xad second_id_byte = 0xf1 third_id_byte = 0x00 neljäs_id_byte = 0x1d

Mitä ECC-menetelmää nanddump / nandwrite käyttää

Tämä riippuu jälleen käyttöjärjestelmästä / Linuxista, jota käytit flashin tyhjentämiseen. Kuten nandsim-moduulissa, todellisilla mtd-ohjaimilla on tapoja määrittää käytetty ECC-malli (ytimen parametrit, laitepuu). Mutta voit myös kehottaa nanddumpia ohittamaan ECC-tiedot.

Viitteet



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...