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:
- Se, johon ROM-käynnistyskoodi käyttää
- Ne, joita käynnistyslatain käyttää (yleensä u-boot)
- 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