itthon / Dolgozzon az interneten / Dinamikus memóriavezérlő. Közvetlen memória hozzáférés vezérlő: Diagram, logika, állapotok és működési mód A gyorsítótárvezérlő funkciói

Dinamikus memóriavezérlő. Közvetlen memória hozzáférés vezérlő: Diagram, logika, állapotok és működési mód A gyorsítótárvezérlő funkciói

A mikrokontrollerek processzormagja:
- számtani logikai egység
- az emlékezet szervezése

Jó napot kedves rádióamatőrök!
Üdvözlöm a "" oldalon

Ma (pontosabban több cikk során) közelebbről is szemügyre vesszük alapján Bármi mikrokontrollerprocesszormag.

Főbb elemek:

1. Aritmetikai logikai egység

ALU- a mikrokontroller szíve (és talán az elme, becsülettel és lelkiismerettel).
Itt nem fogunk belemenni a „mániás feldaraboló” szerepébe, és a készülék belsejében való turkálásba. Csak annyit tudunk meg, hogy az ALU-nak köszönhetően a mikrokontroller minden munkája megtörténik. Ha valaha is vágyik arra, hogy mélyebben megismerje a mikrokontroller "szívének" működését (és jó lesz, ha megjelenik), akkor a csodálatos szerzők, Belov, Ryumik, Evstifeev, Revich, Baranov és még sokan mások könyveiben. , mindig megtalálja a részletes választ .

2. Mikrokontroller memória (memóriaszervezés)

Mielőtt megvizsgálnánk a mikrokontroller memóriáját, beszéljünk egy kicsit a memóriáról általában.
Az emberi emlékezet - minden világos vele - lehet „szilárd” (amikor szilárd emlékezetben van, és néha még józan eszében is), és sajnos „szivárgó”. És minden információ az úgynevezett "neuronokban" - kis memóriasejtekben - tárolódik.
A mikrokontrollerekkel szinte minden ugyanaz. Csak akkor, ha egy személynek van a legkisebb információ tárolására szolgáló sejtje, amelyet „neuronnak” neveznek a legkisebb memóriacella egy mikrokontroller számára az információ tárolását " bit“.
Egy bit egy logikai egyet vagy egy logikai nullát tárolhat.
Bita memória mennyiségének minimális mértékegysége a mikroprocesszoros technológiában.
A memória következő fő vagy leggyakoribb egysége byte.
Byteez nyolc bitnyi információ. Egy bájt csak nyolc nullát és egyet tud tárolni.
Egy bájtba írható maximális szám 255. Ha a programban dolgozol nagy számok akkor tudnia kell (hogy megtudja, hány bájt szükséges egy szám tárolásához), hogy a maximális szám, amelyre írható:
– egy bájt = 255
– két bájt = 65535
– három bájt = 16 777 215
- négy bájt - több mint 4 milliárd (ha nem vagy legalább száz a Forbes magazinban, akkor nincs szükség négy bájt memóriára a számok tárolásához).
A memóriába írás és a memóriából való olvasás bájtokban történik (egy bitnyi információ nem írható vagy olvasható).
A következő mértékegység az kilobájt.
Egy kilobájtban 1024 bájt információ található. (pontosan 1024, nem 1000 bájt).
A memória mennyiségének mérésére is vannak nagy értékek (megabyte, gigabyte), de ezeket még nem használják a mikrokontrollerekben.
Remélem, hogy minden világos számunkra az elektronikus memória mértékegységeivel:

A memória szervezése a mikrokontrollerben

Az AVR chipek háromféle memóriával rendelkeznek:
programmemória, más néven FLASH memória
adatmemória, más néven RAM (RAM)más néven SRAM
nem felejtő memória, más néven EEPROM, más néven EEPROM
A mikrokontroller rendelkezik három címtér amelyben a fenti típusú memória található. Ugyanakkor az adatmemória (a lefoglalt címtér értelmében) kissé megfosztottnak bizonyult - meg kell osztania a címterét a regisztereket tartalmazó memóriacellákkal. Általános rendeltetésűés I / O regiszterek (a következő cikkben részletesen megismerheti őket). Ezek a regiszterek fizikailag nem tartoznak az adatmemóriához, hanem ugyanabban a címtérben vannak. Ha a programmemória és a nem felejtő memória kezdőcíme nulla címről indul, akkor az adatmemória kezdőcíme nem a nulla címről kezdődik - az általános célú regiszterek és az I/O regiszterek a nulla címről foglalják el a helyüket, és csak azok. ezeket követik a programmemória cellák címei.
Az ATiny MCU-k bizonyos típusai nem rendelkeznek adatmemóriával.

Programmemória (FLASH memória)

Program memóriaúgy van kialakítva, hogy a programjainkat tárolja benne, valamint minden olyan adatot, amelyre szükségünk van, amelyek a program végrehajtása során nem változnak (konstansok). A mikrokontroller áramellátásának kikapcsolásakor a programmemóriában lévő összes adat mentésre kerül.
Program memória természetesen minden mikrokontroller megvan. A programmemória mérete az MK típusától függően 1 kilobájttól 256 kilobájtig terjed.
Program memória hozzáférés csak a programozónak van az MK programozásánál, maga az MK is hozzáfér a programmemóriához, de csak a memóriából kiolvasni az adatokat, oda nem tud semmit írni (soha nem lehet tudni, hirtelen el akarja rontani a programunkat). Igaz, a Mega család MK-jának van lehetősége (a programozó engedélyével) változtatásokat végrehajtani a programmemóriában, de ez egy másik történet.
A programmemória esetében további két típusú memóriamérés létezik - " szó"és" oldalon“.
A tény az, hogy programmemória két bájtból álló cellákból áll. Az ilyen cellát "szónak" nevezik. És ez így történik, mert szinte minden MK-parancs két bájtból áll, és ennek megfelelően két bájt szükséges a programmemóriában az íráshoz. Minden MK parancs egy „szó”. Számos olyan parancs létezik, amelyek írásához 4 bájt memóriára van szükség – két szó –, de az ilyen parancsok megtalálhatók a 8 kilobájtnál nagyobb programmemóriával rendelkező MK-kban.
Ily módon programmemória egyik cellájába írható:
- bármely két bájtból álló parancs
- a parancs fele, amely 4 bájtból áll
- két konstans, amelyek mindegyike egy bájtba illeszkedik, vagy egy tizenhat bites konstans. Ugyanakkor, ha három egybájtos állandót ír a memóriába, akkor is négy bájtot (két szót) foglalnak el a memóriában.
Kívül, a programmemóriába való írást nemcsak „szavak”, hanem „oldalak” is végrehajtják. . Oldalméret 64 és 256 bájt között van (minél nagyobb a programmemória, annál nagyobb az „oldal”). Mit jelent. Ha 11 szavas (22 bájt) kis programot készítesz, akkor is egy oldalnyi programmemóriát foglal el, pl. legalább 64 bájt. Az „extra” 42 bájt nullákkal vagy egyesekkel lesz kitöltve. Ezek a piték.
De ez még nem minden.
A programmemória három állapotú lehet(ha mondhatom):
1. Minden memória a programozó rendelkezésére áll
Ebben az esetben az összes memóriát teljesen feltölthetjük programunkkal és adatainkkal. És a program a nulla memóriacímről indul.
2. A memória egy része MK-t foglal el
Abban az esetben, ha az MK-t használják működés közben (és remélem, emlékszel, mi az), az MK a memória egy részét a megszakítások feldolgozása érdekében veszi, és tárolja benne. megszakítási vektorok“.
Ami.
Amikor megengedjük az MK-nak, hogy feldolgozza a megszakításokat, akkor a memória nulla címétől kiindulva néhány cellát felvesz a címek tárolására, amelyekre az MK-nak el kell mennie a megszakítási rutin végrehajtásához. Az MK minden megszakításhoz két bájt memóriát foglal le (egy szó), amelyek a megszakítási rutinok címeit tárolják. Ezeket a címeket, amelyek jelzik, hogy a memóriában hol található az adott megszakítás feldolgozására szolgáló szubrutin, az úgynevezett „ megszakítási vektorok“. És a memória teljes területét, amelyben a „megszakítási vektorok” tárolják, az ún. megszakítási vektor táblázat. A megszakításokhoz használt memóriacellák száma közvetlenül függ az adott mikrokontroller lehetséges megszakításainak számától (néhánytól több tucatig). Minden megszakítás a programmemória elején található, a nulla címtől kezdve, és egyértelmű sorrendjük van. A nulla címen a reset megszakítási vektor mindig található. Amikor bekapcsoljuk a készüléket, vagy a gombbal újraindítjuk, akkor a reset megszakítás indul el. Az MK a nulla címből (a cellából) kiolvassa azt a címet, amely azt jelzi, hogy a memóriában hol található programunk eleje, és erre a címre lépve elindítja a program végrehajtását. Maga a program ebben az esetben a programmemóriában közvetlenül a megszakítási tábla után helyezkedik el.
3. Az MK a programmemória egy másik részét veszi (pontosabban nem veszi, hanem lefoglal egy területet a memória végén, amelybe a programozó egy speciális programot - a „betöltőt” helyez el).
Ez lehetséges a „MEGA” családba tartozó MCU-kban, amelyek lehetővé teszik az MCU számára, hogy változtatásokat hajtson végre a program memóriájában. Mit jelent.
Néhány MK-nak megvan a képessége önprogram. Az amatőrök gyakorlatában az MK ezt a lehetőségét rendkívül ritkán használják. Az újraprogramozás (önprogramozás) képességére főleg egy mikrokontrolleren lévő eszköz ipari gyártása esetén van szükség, amelyhez frissítést lehet kiadni. szoftver. Ezt a lehetőséget nem vesszük figyelembe, legalábbis egyelőre nem. Csak azt kell tudnunk, hogy az önprogramozást támogató MK-kban a programmemória két részre van osztva :
- felső - pályázati program rész, ahol a programunk található, és megszakítási vektorokat
- Alsó - bootloader szakasz (Boot Loader rész- angolul), ahol a programozó elhelyezi a betöltő programját. A rendszerbetöltő szakasz mérete az MK programmemória teljes méretétől függ, és 128 bájttól 4096 bájtig terjedhet. Ha nem élünk az MK önprogramozási lehetőségével, akkor ez a rész a programunkra és adatainkra vonatkozik.
Nos, a FLASH memóriát programmemóriának nevezik, mert az úgynevezett Flash technológiával készül (mint a mindannyiunknál megszokott számítógépes „flash drive”).
A programmemória 10 000 újraprogramozási ciklust tesz lehetővé.

Adatmemória (statikus RAM, SRAM)

RAM, ez adatmemória típus SRAM, amelynek célja a program eredményeként nyert különféle adatok tárolása benne.
A mikrokontroller áramellátásának kikapcsolásakor minden benne tárolt adat elveszik.
Adatmemória szinte minden mikrokontrollerben elérhető (a Tiny család legegyszerűbb MK-iban hiányzik).
A Mega család összes MC-jében (és a Tiny család MC-jeinek egy részében) a beépített adatmemória mennyisége 128 bájttól 8 kilobájtig terjed, és szinte az egészet a rendelkezésünkre bocsátjuk. Csak egy kis MK-ra van szüksége a verem rendszerezéséhez (később megtudjuk, mi az). Néhány MK biztosít kapcsolatot külső memória(bármilyen típusú lehet - FLASH, SRAM, EEPROM) 64 kilobájtig. Az ilyen MK-k külső memóriájának csatlakoztatása esetén ez mintegy az adatmemória folytatása lesz.
Az adatmemóriába írás és onnan való olvasás bájtonként történik, és a programmemóriával ellentétben nincs oldalakra és szavakra osztva.

Nem felejtő memória (EEPROM)

Nem felejtő memória adatmemóriára is utal, de ez utóbbival ellentétben több funkciója is van. Adatok és állandók tárolására szolgál, amelyeket áram hiányában meg kell őrizni.
Minden mikrokontroller rendelkezik EEPROM-mal.
A mikrokontroller áramellátásának kikapcsolásakor a nem felejtő memóriában tárolt összes adat elmentésre kerül (ezért nevezik nem felejtőnek).
A nem felejtő memória mennyisége, az MK típusától függően, 64 bájttól 4 kilobájtig terjed.
Információk írása és olvasása a memóriába bájtonként történik. A MEGA család régebbi modelljeiben azonban a nem felejtő memóriának, valamint a programmemóriának van oldalrekordja. Az oldal mérete kicsi, mindössze 4 bájt. A gyakorlatban ez a funkció nem számít - mind az írás, mind az olvasás továbbra is bájtonként történik.
Írási és törlési ciklusok száma a memória eléri a 100 ezret.
Az EEPROM fő jellemzője, hogy amikor adatokat írunk rá, nagyon „lassúvá” válik – egy bájt írása 2-4 milliszekundumig tart (ez nagyon alacsony sebesség), és előfordulhat például, hogy - vagy megszakítás, mely esetben az adatírási folyamat tönkremegy.
Ráadásul a nulla címről nem ajánlott adatokat írni a nem felejtő memóriába (nem emlékszem ennek az információnak a forrására, de pontosan emlékszem, mit olvastam valahol) - az MK működése során az adatok megsérülhetnek . Előfordul, hogy a programozók néhány bájttal hátrébb lépnek a memória elejétől, és csak a következő cellákban kezdik el írni az adatokat.

Minden flash-memória középpontjában egy szilíciumkristály áll, amelyen nem egészen hétköznapi térhatású tranzisztorok képződnek. Egy ilyen tranzisztornak két szigetelt kapuja van: vezérlő (vezérlés) és lebegő (lebegő). Ez utóbbi képes elektronokat, azaz töltést tartani. A cellában, mint minden térhatású tranzisztorban, van egy lefolyó és egy forrás (4.1. ábra). Az írás során pozitív feszültséget adunk a vezérlőkapuhoz, és a lefolyóból a forrás felé mozgó elektronok egy részét a lebegő kapura tereljük. Az elektronok egy része legyőzi a szigetelőréteget és behatol (diffundál) az úszókapun. Sok évig ott maradhatnak.

Az elektronok koncentrációja a lebegő kapu területén meghatározza a tranzisztor két stabil állapotának egyikét - a memóriacellát. Az első, kezdeti állapotban a lebegőkapun az elektronok száma kicsi, és a tranzisztor nyitásának küszöbfeszültsége viszonylag alacsony (logikai). Ha elegendő elektron van betöltve a lebegő kapura, a tranzisztor a második állandósult állapotába kerül. Nyitási feszültsége meredeken növekszik, ami egy logikai nullának felel meg. Olvasáskor mérik

Rizs. 4.1. Flash memória cella

küszöbfeszültség, amelyet a lefolyóra kell kapcsolni a tranzisztor bekapcsolásához. Az információ eltávolításához rövid ideig negatív feszültséget kapcsolunk a vezérlőkapuhoz, és az úszókapu elektronjai visszadiffundálnak a forrás felé. A tranzisztor ismét logikai egység állapotába kerül, és a következő írásig abban marad. Figyelemre méltó, hogy a flash memóriában egy tranzisztor egy bit információt tárol - ez egy cella. A "memorizálás" egész folyamata az elektronok félvezetőben való diffúzióján alapul. Ez két nem túl optimista következtetéshez vezet.

A töltés tárolási ideje nagyon hosszú, és években mérik, de még mindig korlátozott. A termodinamika és a diffúzió törvényei kimondják, hogy az elektronok koncentrációja a különböző területeken végül kiegyenlítődik.

Ugyanezen okból korlátozott az írási-újraírási ciklusok száma: százezertől több millióig. Idővel maga az anyag lebomlása és a p-n-átmenetek elkerülhetetlenül bekövetkeznek. Például a Kingston Compact Flash kártyák 300 000 írási ciklusra vannak besorolva. Transcend Compact Flash – bekapcsolva

1 000 000, míg a Transcend 32 Gb-os USB flash meghajtója csak 100 000.

Két flash memória architektúra létezik. Eltérnek a cellákhoz való hozzáférés módjában és ennek megfelelően a belső vezetők felépítésében.

A Memory NOR (OR-NOT) lehetővé teszi a cellák egyenkénti elérését. Minden cellának külön vezetéke van. A NOR memóriacímtér lehetővé teszi, hogy egyedi bájtokkal vagy szavakkal dolgozzon (minden szó tartalmaz

2 bájt). Ez az architektúra komoly korlátozásokat ír elő a chip területegységenkénti maximális memóriamennyiségére vonatkozóan. A NOR memóriát jelenleg csak BIOS chipekben és más kis kapacitású ROM-okban, például mobiltelefonokban használják.

A NAND (NAND) memóriában minden cella egy "bitvonal" és egy "szósor" metszéspontjában van. A sejteket egy klaszterhez hasonló kis blokkokba csoportosítják merevlemez. Mind az olvasás, mind az írás csak egész blokkokban vagy sorokban történik. Minden modern cserélhető adathordozó NAND memóriára épül.

A NAND chipek legnagyobb gyártói az Intel, a Micron Technology, a Sony és a Samsung. A gyártott chipek választéka meglehetősen nagy, és évente többször is frissül.

Vezérlők

A memóriavezérlő az olvasás és az írás vezérlésére szolgál. Jelenleg a vezérlőt mindig külön elemként valósítják meg (vagy egy szabványos formájú mikrochip, vagy egy memóriakártyába ágyazott, csomagolatlan chip), bár folyamatban van a vezérlő közvetlen flash memória chipbe történő integrálása. .

A vezérlőket teljesen specifikus flash memória chipekhez tervezték és gyártják. A cellák címzésének módja szerkezetileg be van ágyazva a vezérlőbe. Amikor egy flash memória chipre ír, az adatok meghatározott módon vannak elrendezve, ami modellenként változik. A gyártók titokban tartják ezeket a finomságokat, és láthatóan nem tervezik nyilvánosságra hozni. Nyilvánvalóan sokkal több vezérlő firmware készül, mint maguk a vezérlőmodellek. A vezérlő firmware (firmware) és a címfordító táblázat (fordító) a flash memória szolgáltatási területére íródnak. Ezt a területet kezdi el olvasni a vezérlő közvetlenül a tápfeszültség rákapcsolása után. A cellák tényleges címzésén kívül a vezérlő számos egyéb funkciót is ellát: a hibás szektorok figyelését, a hibajavítást (ECC - hibaellenőrzés és -javítás), valamint a cellák egyenletes elhasználódását (kopásszint-szabályozás).

A memóriachipek gyártásában a technológiai norma a nem működő cellák átlagosan legfeljebb 2% -ának jelenléte. Idővel számuk növekedhet, ezért a merevlemezekhez hasonlóan a flash memóriában tartalék kötetet biztosítanak. Ha hibás szektor jelenik meg, a vezérlő formázás vagy írás közben lecseréli a címét a fájlkiosztási táblában a tartalék terület szektorcímére. A javítást a vezérlő végzi, de egy adott adathordozó fájlrendszerének szintjén hajtják végre.

A cellák korlátozott erőforrásai miatt (egyenként több millió olvasási/írási ciklus) a vezérlőnek olyan funkciója van, amely figyelembe veszi a kopás egyenletességét. Az információk egyenletes rögzítésének biztosítása érdekében a szabad területet feltételesen szakaszokra osztják, és mindegyiknél figyelembe veszik az írási műveletek számát. A ciklusstatisztika a memória rejtett szolgáltatási területén kerül rögzítésre, és a vezérlő rendszeresen hozzáfér ehhez az információhoz. A címzést nem befolyásolja.

USB flash meghajtó szerkezete

A különféle esetek ellenére minden USB flash meghajtót ugyanúgy terveztek. Ha a tok felei össze vannak rögzítve, akkor általában könnyen szétválnak. A vízálló vagy divatos tokokat romboló módszerekkel, például vágással kell kinyitni.

Az USB flash meghajtó belsejében lévő táblán (4.2. ábra) szükségszerűen két mikroáramkör található: egy memóriachip és egy vezérlő. Mindkettő gyári jelzésű. Néha az alaplap két flash memória chipet hordoz, amelyek párban működnek. A mikroáramkörök csővezetéke több ellenállásból és diódából, egy teljesítménystabilizátorból és egy kvarcrezonátorból áll. A közelmúltban a stabilizátort egyre inkább közvetlenül a vezérlőbe építik be, és a tartozékok száma minimálisra csökkent. Ezen kívül a tábla tartalmazhat LED kijelzőés egy mini kapcsoló az írásvédelemhez.

Rizs. 4.2. Flash lemez eszköz

Az USB-csatlakozó közvetlenül az alaplapra van forrasztva. Az érintkezők forrasztási pontjai sok modellben meglehetősen sérülékenyek, mivel viselik a mechanikai terhelést a készülék csatlakoztatásakor és leválasztásakor.

Memóriakártyák típusai és kialakítása

Sok vállalat időről időre különböző típusú memóriakártyákat kínál a felhasználóknak. Ritka kivételektől eltekintve a kapcsolatok számát és elrendezését tekintve mind inkompatibilisek egymással, ill elektromos jellemzők, A Flash-kártyáknak két típusa van: párhuzamos (párhuzamos) és soros (soros) interfésszel.

táblázatban. A 4.1. táblázat felsorolja a jelenleg megtalálható 12 fő memóriakártyát. Az egyes típusokon belül további fajták találhatók, melyeket figyelembe véve közel 40 féle kártya létezéséről beszélhetünk.

4.1. táblázat. Memóriakártyák típusai

Memóriakártya típusa

Teljes méretek, mm)

Maximális

konstruktív

Felület

Compact Flash (CF)

Párhuzamos 50 tű

Soros 9 tűs

Multimédiás kártya (MMS)

Soros 7 tűs

Soros 7 tűs

Nagy sebességű mms

Soros 13 tűs

Soros 10 tűk

Memory Stick PRO

Soros 10 tűk

Memory Stick Duo

Soros 10 tűk

SmartMedia (SSFDC)

Párhuzamos 22 tű

Párhuzamos 22 tű

Soros 8 tűs

Az MMC-kártyák két módban működhetnek: MMC (MultiMedia Card) és SPI (Serial Peripheral Interface). Az SPI-mód az MMC-protokoll része, és a Motorola és néhány más gyártó mikrokontrollereinek SPI-csatornájával való kommunikációra szolgál.

Az SD (Secure Digital) kártyanyílásba helyezheti be MMS kártya(Multimédia kártya), de nem fordítva. Az SD kártya vezérlő hardveres adattitkosítást tartalmaz, maga a memória pedig egy speciális területtel van ellátva, ahol a titkosítási kulcsot tárolják. Ezt annak érdekében tették, hogy megakadályozzák a zenei felvételek illegális másolását, amelyek tárolására és értékesítésére ilyen adathordozót terveztek. A kártya írásvédelmi kapcsolóval rendelkezik.

A CompactFlash (CF) kártyák egyszerűen behelyezhetők a PCMCIA Type II foglalatba. Bár a PCMCIA-nak 68 tűje van, a CF-nek pedig csak 50, a kialakítás CompactFlash kártyák teljes kompatibilitást biztosít, és rendelkezik a PCMCIA-AT A formátum összes funkciójával.

Minden Memory Stick (Sony szabvány) viszonylag kompatibilis. A szabvány elméletileg legfeljebb 2 TB-os memóriakártya kapacitást biztosít, bár a valóságban a kapacitás eléri a gigabájt egységeket.

A SmartMedia kártyák gyakorlatilag elavultak, csak nagyon régi digitális fényképezőgépekben találhatók meg. Figyelemre méltó, hogy ez volt az egyetlen szabvány, amelyben a vezérlő nem a kártya belsejében, hanem az olvasóban volt.

A memóriakártyák kialakítása nem szétválasztható - ez egy javításra alkalmatlan eszköz. A kicsomagolatlan mikroáramköröket a következtetésekkel együtt a vegyületbe öntik, és mindegyiket műanyag héjba préselik. A kristályhoz csak az eszköz kinyitásával lehet eljutni, de a vezetők sérülése szinte elkerülhetetlen.

Olvasók

USB flash meghajtó olvasásához egy normál USB csatlakozó: a számítógép szabványosnak tekinti az ilyen eszközöket kivehető meghajtó vezérlőjüknek köszönhetően. Az összes memóriakártya vezérlőit soros vagy párhuzamos interfészek - a kártyán lévő érintkezők - címzik a számítógéphez. Mindegyik interfészhez megfelelő adapterre van szükség - kiegészítő vezérlő, illesztve ezt az interfészt egy szabványos USB-porthoz.

A kártyaolvasó egy vagy több hasonló vezérlőből, teljesítmény-átalakítóból és különböző memóriakártyák csatlakozóiból álló eszköz (4.3. ábra). Az áramellátás +5 V-os forrásról USB kábelen keresztül történik.

Rizs. 4.3. kártyaolvasó

Leggyakrabban többféle kártyatípushoz vannak kialakítva "kombájnok": 6-tól 40-ig. A kártyaolvasóban sokkal kevesebb nyílás található, mivel minden nyílást többféle kártyatípushoz használnak, amelyek mérete és érintkezőinek elhelyezkedése hasonló. Jellemzői szerint különböző modellek gyakorlatilag egyenértékűek, de főként a támogatott kártyatípusok számában és kialakításában különböznek.

Logikus szervezés

Mielőtt rátérnénk a flash meghajtók fájlrendszerére, emlékeznünk kell a NAND architektúrára. Ebben a gyakran használt memóriában az információ olvasása, írása és törlése csak blokkokban történik.

Merevlemezeken és hajlékonylemezeken a blokk mérete 512 bájt, nem számítva az 59 szolgáltatási bájtot, amely csak a merevlemez-vezérlő számára látható. Minden fájlrendszer ezen értékek figyelembevételével jött létre. A probléma az, hogy a flash memóriában a törlési blokk mérete ritka kivételektől eltekintve nem egyezik meg egy szabványos, 512 bájtos lemezszektor méretével, és általában 4,8 vagy akár 64 KB. Másrészt a kompatibilitás érdekében az olvasási/írási blokknak meg kell egyeznie a lemezszektor méretével.

Ehhez a törlési blokkot több 512 bájt méretű olvasási / írási blokkra osztják. A gyakorlatban a blokk valamivel nagyobb: az adatok 512 bájtja mellett van egy 16 bájt hosszúságú „farok” (Tail), amely magáról a blokkról szól. Fizikailag az olvasási/írási blokkok helyét és számát semmi sem korlátozza. Az egyetlen megkötés az, hogy egy olvasási/írási blokk nem lépheti át a törlési blokk határát, mivel nem tartozhat két különböző törlési blokkhoz.

Az olvasási/írási blokkok három típusra oszthatók: érvényes, érvénytelen és hibás. A rögzített adatokat tartalmazó, fájlhoz tartozó blokkok érvényesek. Az elavult információkat tartalmazó használt blokkok érvénytelenek, és törölni kell őket. A hibás blokkok kategóriája olyan blokkokból áll, amelyek nem írhatók és nem törölhetők.

A flash-memória másik jellemzője, hogy az információ csak olyan helyre írható, amely korábban megtisztult a korábbi információktól. Amikor információkat kell írni, a vezérlő firmware-jének el kell döntenie, hogy melyik érvénytelen blokkokat törölje először. A legtöbb mikroprogramban az érvénytelen blokkok eltávolításának problémáját a legegyszerűbb módon oldják meg: amint a flash lemez kapacitásának egy bizonyos része megtelik információval, automatikusan elindul az érvénytelen blokkok tisztításának mechanizmusa.

A memória élettartamának növelésére kopásszint-szabályozási technológiát alkalmaznak, amely meghosszabbítja életciklus memóriakristály a memóriablokkok írási/törlési ciklusainak egyenletes eloszlása ​​miatt. Egy mellékhatás - egy memóriablokk meghibásodása - nem befolyásolja ugyanazon kristály többi memóriablokkjának működését. A rögzített blokkok olyan fájlokhoz tartoznak, amelyeket sokáig vagy egyáltalán nem módosítottak, nem helyeztek át. A rögzített adatblokkok jelenléte azt a tényt eredményezi, hogy a cellák fennmaradó része fokozott kopásnak van kitéve, és gyorsabban fogyasztja az erőforrást. A firmware figyelembe veszi az ilyen blokkokat, és szükség szerint áthelyezi azok tartalmát más cellákba.

A flash-lemezek és a memóriakártyák fájlrendszerét első pillantásra jól ismerik a felhasználók merevlemezekről és hajlékonylemezekről. Ez a FAT16, ritkábban a FAT32: a Windows operációs rendszer így javasolja a lemez formázását. A szabvány azt jelenti A Windows XP és a Windows 7 lemez formázható NTFS rendszer! Ehhez először az Eszközkezelőbe kell lépnie, és a csatlakoztatott flash meghajtó tulajdonságai ablakában a Házirend lapon válassza ki az Optimalizálás gyors végrehajtáshoz értéket. Különleges programok olyan gyártóktól, mint például a HP USB Disk Storage Format Tool, lehetővé teszi a flash meghajtók NTFS-re történő formázását ilyen erőfeszítés nélkül.

A fájlrendszerek külső hasonlósága azonban szilárdtestalapú meghajtókés a hagyományos merevlemezek csalnak. A Flash File System (FFS) fájlrendszer csak egy hagyományos lemezmeghajtót emulál, és vezérlőegységekből és inicializálási egységből áll. Valójában csak a flash lemez vagy memóriakártya vezérlője tud a memóriablokkok valódi helyéről és címzéséről.

Ez nagyon jelentős, amikor különböző utak a flash memória chip tartalmának visszaállítása. Amikor egy memóriachipet a "natív" vezérlőn keresztül olvas be, a képfájl blokkok sorozatát tartalmazza számuk vagy eltolásuk sorrendjében. Az elején található a fejléc és a fájlrendszer tábla. Ha a kiolvasást a programozón hajtjuk végre, akkor a dump kezdeti blokkjai szolgáltatási információkat tartalmaznak, és az adatblokkok szinte véletlenszerűen keverednek. Ugyanakkor a szolgáltatási információk valószínűleg nem lesznek hasznosak, mivel ezek teljes mértékben a vezérlő modelljétől és firmware-étől függenek - a blokkok helyes sorrendjét nagy nehézségek árán kell összeállítani.

Egyes kamerák csak fájlokkal működnek RAW rendszer Az ilyen fájlrendszerrel rendelkező médiára történő fényképek rögzítésének módja, valamint magának a kártya formázási jellemzői az eszköz típusától, sőt egy adott modell firmware-étől is függenek. Ez a formátum nem szabványos, és számos változata van. Általában csak a fényképezőgép gyártójának szervizprogramjai tudják visszaállítani az ilyen kártyák adatait, és magát a kamerát célszerű kártyaolvasóként használni.

Rizs. 4.4. Formázza a flash meghajtó ablakát Windows Vista SPl

Az innováció az fájlrendszer exFAT (Extended FAT – kiterjesztett FAT). A kifejezetten flash meghajtókhoz tervezett fájlrendszer támogatása először a Windows Embedded CE 6.0-ban jelent meg. A Windows Vista Service Pack 1 és a Windows 7 az exFAT-tal működik (4.4. ábra).

Az új fájlrendszer célja a FAT és a FAT32 fokozatos cseréje a flash meghajtókon. Tartalmaz néhány olyan szolgáltatást, amelyek korábban az NTFS fájlrendszerre jellemzőek voltak:

A 4 GB-os fájlméret-korlátot túlléptük: az elméleti korlát 2^ bájt (16 exabájt);

Továbbfejlesztett elosztás szabad hely a szabad terület bittérképének bevezetésével, amely csökkenti a lemez töredezettségét;

Az egy könyvtárban található fájlok számának korlátozása megszűnt;

Támogatás hozzáadva a hozzáférési jogok listájához.

Az idő eldönti, hogy ez a fájlrendszer milyen hamar lesz a flash meghajtók normája. A jelek szerint ez korábban nem fog megtörténni operációs rendszer A Windows 7-et a felhasználók túlnyomó többsége veszi át.

Néha egy eszköz fejlesztése során bizonyos adatokat nem felejtő memóriába kell menteni. Ilyen esetekben általában a mikrokontroller belső EEPROM-ját használják. Ha ez nem elég, akkor általában külső EEPROM chipeket használnak a 24lxx sorozatból. A sorozat mikroáramkörei nagyon népszerűek. Leggyakrabban a régiben találhatók mobiltelefonok, néhány alaplapok, patronok nyomtatókból és még sok más helyről. Ezeknek a chipseknek az ára is nagyon vonzó. Például a 24LC16 ára 11 rubel.
Ez a mikroáramkör többféle kiszerelésben kapható, melyek közül a legnépszerűbb a DIP és a SOIC. A mikroáramkör a következő kivezetésekkel rendelkezik:

Amint látja, nagyon kevés következtetés vonható le. Szóval próbáljuk meg kitalálni, hogy mi is az.
A0, A1, A2- nem használják ebben a mikroáramkörben. Csatlakoztathatók a földhöz vagy a plusz táphoz. A 24lxx sorozat néhány más mikroáramkörében ezek a tűk beállíthatják a mikroáramkör címét, hogy egyszerre akár 8 memóriamikro-t is tudjunk csatlakoztatni egy i2c buszhoz.
vss- Föld.
SDA- adatvonal
SCL- óra ​​impulzus vonal
WP- Írásvédelem. Ha ez a tű logikai 0, akkor a memóriába írás engedélyezett. Ha logikai egységet alkalmaz, akkor csak a memóriából való olvasás lehetséges.
Vcc- a mikroáramkör tápellátása. Az adatlap szerint 2,5 V-tól 5,5 V-ig terjedő feszültséggel működik.

Csatlakozás a vezérlőhöz.
A memória csatlakoztatása az MK-hoz nagyon egyszerű. A hevederből csak egy pár ellenállásra van szükség, amelyek ellenállása körülbelül 4,7 kOhm.

Szoftver

A memóriával való munkához egy könyvtárat fejlesztettek ki, amely a következő funkciókat valósítja meg:

i2c_init- beállítja a vonal mentén haladó óraimpulzusok sebességét SCL.

A 24LC16 chip 400 kHz-ig támogatja a frekvenciákat. A frekvenciát a következőképpen számíthatja ki:

CPU órajel frekvencia- a mikrokontroller működési frekvenciája

TWBR- az azonos nevű anyakönyvbe írt szám.

TWPS- előre meghatározott. Az előskálázó értékeket a TWSR regiszter TWPS1 és TWPS0 bitjei állítják be.

Az Atmega 32 vezérlőre a következő táblázat érvényes:

i2c_start- indító üzenetet küld

i2c_stop- küld egy stop üzenetet

i2c_send- bájtot küld

i2c_recive- kap egy bájtot

i2c_recive_last- veszi az utolsó bájtot. A különbség az előző függvénytől, hogy bájt vételekor a mikrokontroller nem küld nyugtázási bitet. Ha az utolsó bájt fogadásakor használja a i2c_recive akkor az SDA vonal a földhöz nyomva marad.

Adatok írása memória chipre

Véletlen sorrendben és oldalanként is írhat adatokat. Mivel az i2c buszon egyszerre több eszköz is lehet, bármely eszköz eléréséhez ismerni kell annak hét bites címét. Chip címe 24LC16 hüvelyk bináris formaígy néz ki:

Az A,B,C bitek a memóriablokk kiválasztására szolgálnak. A chipben 8 memóriablokk található, egyenként 256 bájt. Ennek megfelelően az ABC bitek 000 és 111 közötti értékeket vesznek fel.

Ahhoz, hogy bájtokat írhasson a chipre, a következő műveletsort kell végrehajtania:

  1. Inicializálja az i2c interfészt
  2. Kezdő üzenet küldése
  3. Chipcím+memóriablokk cím küldése
  4. Küldje el annak a memóriahelynek a címét, ahová írni szeretne
  5. Egy bájt adat küldése
  6. Stop csomag küldése

Példa: Egy bájtot kell írni 0xFA a cím szerint 0x101.

hívja az i2c_init-et
rcall i2c_start
ldi hőmérséklet,0b 1010 001 0 // Chip címe ahol:
// 1010 - chip címe
// 001 - a memóriablokk címe (a 0x101 cella az 1-es blokkhoz tartozik)
// 0
rcall i2c_send
ldi hőm.1 //A memóriacella címe. (1. blokk, 1. cella)
rcall i2c_send
lditemp,0xFA //A beírandó bájt betöltése a regiszterbe
rcall i2c_send //Írj egy bájtot
hívja az i2c_stop-ot

Nem csak bájtonként, hanem oldalanként is írhatunk adatokat a memóriába. Az oldal mérete 16 bájt. Az oldalankénti írás a következőket jelenti: A null byte címének elküldése kívánt oldaltés ezt követően 16 alkalommal küldjük el a szükséges adatokat. A címszámláló automatikusan eggyel nő. Ha 17. alkalommal küldünk adatot, akkor a null byte felülírásra kerül, ha a 18. bájtot, akkor felülírja az 1-es bájtot stb.

Példa: A 0. blokk első oldalát kötelező megírni.

hívja az i2c_init-et //Inicializálja az i2c interfészt
rcall i2c_start // Kezdő üzenet küldése
ldi hőmérséklet,0b 1010 000 0 // Chip címe ahol:
// 1010 - chip címe
// 000 - a memóriablokk címe (a nulla blokk érdekel minket)
// 0 - olvasás/írás bit. 0 - írás, 1 - olvasás
rcall i2c_send
ldi hőmérséklet, 16 //Az első oldal címe
rcall i2c_send
ldi hőmérséklet, 0x01 //A 0. számú bájt betöltése a regiszterbe
rcall i2c_send //Írj egy bájtot
ldi hőmérséklet, 0x02 //Az 1-es számú bájt betöltése a regiszterbe
rcall i2c_send //Írj egy bájtot
/// írja ide a többi bájtot.....
ldi hőmérséklet,0x0E //A 14-es bájt betöltése a regiszterbe
rcall i2c_send //Írj egy bájtot
ldi hőmérséklet,0x0F //A 15-ös bájt betöltése a regiszterbe
rcall i2c_send //Írj egy bájtot
hívja az i2c_stop-ot //Stop üzenet küldése

Adatok olvasása chipről
Valahogy kitaláltuk a rekordot, most kezdjük el olvasni. Egy bájt olvasásához tegye a következőket:

  1. Inicializálja az i2c interfészt (ha még nem volt inicializálva)
  2. Kezdőcsomag küldése
  3. Küldd el a mikroáramkör címét és a memóriablokk címét, ahonnan olvasni fogunk
  4. Küldje el a memóriahely címét
  5. Kezdő üzenet küldése újra
  6. Chipcím és memóriablokk cím küldése "olvasás" bittel
  7. Bájt fogadása
  8. Stop csomag küldése

hívja az i2c_init-et //Inicializálja az i2c interfészt
rcall i2c_start // Kezdő üzenet küldése
lditemp, 0b1010 011 0 // Chip címe + a 3. memóriablokk címe.
// Olvasási/írási bit még 0 !
rcall i2c_send
ldi hőmérséklet, 0x41 //Memóriacella címe
rcall i2c_send
rcall i2c_start //A start üzenet újraküldése
lditemp, 0b1010 011 1 // Chip címe + memóriablokk címe + olvasási / írási bit 1 lett
rcall i2c_send // most már olvashatod az adatokat
rcall i2c_recive_last //Bájt beolvasása. Első és utolsó.
hívja az i2c_stop-ot //Stop üzenet küldése

Az olvasás bájtonként szekvenciálisan végezhető, azaz. csak hívji2c_recive Amennyire kell. A cím eggyel növelésére vonatkozó parancsot nem kell elküldeni. A blokkcímek váltása a szekvenciális olvasás során szintén nem szükséges. Azok. gond nélkül el tudja venni és elolvasni a teljes chipet egyszerre.

Az i2c programkönyvtárat az Atmega32 mikrokontrolleren fejlesztették ki és tesztelték. Szerintem sok más vezérlőn is működni fog változtatás nélkül. Természetesen a vezérlőnek rendelkeznie kell hardveres támogatással az i2c-hez, vagy ahogyan ezt TWI-nek is nevezik. Természetesen az i2c programozottan is megvalósítható, de nem bántam és nem is volt rá szükség. A bemutató példa egy olyan program, amely 0-tól 15-ig bájtokat ír az első 16 címre, majd írás után az A portra adja ki. Ennek működését nemcsak élőben, hanem a Proteusban is meg lehet nézni.

És végül csatolok egy oszcillogramot:

Az én szememből így néz ki az i2c busz :-)
Minden kérdést és javaslatot szívesen fogadunk a megjegyzésekben.

A közvetlen memóriaelérés (DMA) elveinek megvalósításának példájaként vegye figyelembe a KR580VT57 mikroáramkört. A PDP programozható vezérlőt a rendszermemória és négy külső eszköz (ED) közötti nagy sebességű adatcserére tervezték.

A vezérlő kétirányú adatcserét hajt végre a memória és a JE között (a JE kérésére), miközben a memóriacella-címek meghatározott tömbjének paraméterei (kezdeti cím és ciklusszám) és vezérlőjelek generálása a JE címcsatornájában történik. a mikroprocesszoros rendszer. A vezérlő mind a négy csatornája biztosítja a külső memória címzését (a generált cím növelésével), legfeljebb 16 000 bájtos tömbökkel, és a 64 000 kezdőcímek bármelyikét beállíthatja.

A PDP vezérlő összetétele

A következő blokkok különböztethetők meg a vezérlőben (3.11.1. ábra): egy kérés feldolgozó blokk, egy címgenerátor, egy olvasási-írási logikai blokk, egy vezérlőblokk, egy adatpuffer és két regiszter - egy módbeállító regiszter és egy csatorna állapotregiszter. Vegye figyelembe a tulajdonságaikat.

A kérésfeldolgozási blokk célja:

● for recepció ZDAP0–ZDAP3 jelek kérése a JE-től való közvetlen memóriaeléréshez;

● for maszkolás a K0–K3 csatornák bemenetei;

● for kiadatás kérjen megerősítő jeleket ¯PPDP0 – ¯PPDP3 közvetlen memória-hozzáférésről, amely tájékoztatja a JE-t arról, hogy a vezérlő készen áll az adatcserére a DMA csatornán keresztül.

A címgenerátor 16 bites regisztereket tartalmaz a kezdő címről (PHA0…PHA3) és a ciklusok számáról (RCHTs0…RCHTs3), egy növekmény-csökkentő sémát és egy triggert. A kezdeti telepítési program végrehajtása során a memóriacella kezdeti címe, amelyet a JE a DMA csatornán keresztül fog elérni, az RHA-ba kerül. Az RFC ciklusszám-regiszterének 14 legkisebb jelentőségű számjegyébe az N - 1 szám kerül beírásra, ahol N a ciklusok száma. Ennek a regiszternek a két legjelentősebb bitje a DMA csatornán keresztüli adatcsere vezérlésére szolgál.

Minden ciklusban a cím két bájtja kerül kiolvasásra a PHA-ból. A trigger biztosítja az olvasási sorrendet: a magas bájt az adatpufferen keresztül a léptetőmotorhoz, a cím alsó bájtja pedig az A0 ... A3, A4 ... A7 buszokon keresztül kerül kiadásra. A ciklus végén a növekmény-csökkentés séma növeli az RHA tartalmát, és eggyel csökkenti az RFC tartalmát. Megjegyzendő, hogy a vezérlő A4…A7 kimeneteit mindig a címkód A4…A7 bitjeinek kimeneteként használják, és az A0…A3 kimeneteket használják:

  • hogyan kilép a címkód legkisebb jelentőségű számjegyeinek továbbítására a DMA csatorna működése során;
  • hogyan bemenetek kiválasztani azt a nyilvántartást, amellyel az információcserére kerül sor. Ez az igény a setup program DMA vezérlőre írásakor, valamint a címregiszter tartalmának, a ciklusszám-regiszter vagy az állapotregiszter tartalmának beolvasásakor merül fel.

Olvasás-írás logikai blokk

olyan jeleket fogad, generál és ad ki, amelyek biztosítják az információcserét a processzor és a PDP vezérlő, a memória és a JE között. Az írás-olvasás logikai blokk a következő kimenetekkel rendelkezik:

● ¯Зп – használt kétirányú vezérlés háromstabil bemenet/kimenet:

Hogyan bejárat részére jelet kap a processzortól rekord adatok a PDP vezérlő belső regisztereibe a kezdeti telepítés során;

Hogyan kijárat, amelyen külső eszközt lehetővé tevő jel keletkezik rekord adatok a memóriából;

● ¯Th egy kétirányú háromállapotú vezérlő bemenet/kimenet, amelyet:

Hogyan bemenet hogy olyan jelet kapjon a processzortól, amely lehetővé teszi olvasás(kimenet) az adatkezelő belső regisztereinek tartalma;

Hogyan kilépés számára engedélyt kérő jelzés kiadása olvasmányok adatok a JE-ből a memóriába;

● ¯ChtP, ¯ZpP - kimenetek a memóriából való olvasás és a memóriába írás vezérlésére;

● ¯VK - bemenet (kristálykiválasztás), amelyre az írási vagy olvasási jelek beállítása után nulla chip kiválasztó jel kerül. A ¯VK jel elindítja az adatcserét a processzor és a DMA vezérlő belső regiszterei között a programozás során; automatikusan blokkolva közvetlen hozzáférési módban. A ¯VK bemenet közvetlenül vagy dekóderen keresztül csatlakozik a mikroprocesszoros rendszer SHA-jához.

Következtetések A ¯Zp, ¯Cht bemenetként a processzorhoz, kimenetként pedig a JE-hez csatlakozik, a ¯ZpP, ¯ChtP kimenetek pedig a mikroprocesszoros rendszer memóriájába.

A színpadon kezdeti telepítés a címgenerátorban a címkód alacsony rendű А3…А0 bitjei dekódolásra kerülnek, majd a ¯Зп, ¯Тт jelek processzortól való vétele után rendszerezzük a DMA eszköz szoftverrel elérhető regisztereinek írását vagy kiolvasását. . Nál nél ciklusban dolgozni Az író-olvasó egység PDP logikai áramkörei ¯Cht, ¯ZpP és ¯Zp, ¯ChtP jelpárokat alkotnak az eszköz kimenetein, amelyek biztosítják a JE és a memória közötti adatcsere folyamatának órajelét.

Vezérlőblokk

vezérlőjelek segítségével szabályozza a műveletek sorrendjét az összes RAP ciklus alatt, valamint a rögzítést megerősítő jel (PCx) szerint a vezérlőt készenléti állapotból szerviz állapotba viszi át. A vezérlőegység a következő kimenetekkel rendelkezik:

  • ЗЗх (Н RQ) - kimenet, amelyről a jelet veszi rögzítési kérés mikroprocesszorhoz;
  • ПЗх (HLDA) - bemenet, amelyre a jel érkezik rögzítés megerősítése a mikroprocesszorból;
  • Гт (RDY) - vezérlő bemenet készenlét. A JE-től érkező Гт = 1 jel aktiválja a PDP vezérlő működését; a Гт = 0 jel készenléti állapotba helyezi a vezérlőt;
  • M128 - kijárat ciklus 128 marker: M128 = 1 azt jelzi, hogy az aktuális DAP ciklus a 128. ciklus az adattömb végétől számítva;
  • KS (TS) - kilépés számolás vége: A CS = 1 azt jelzi a WU-nak, hogy az aktuális csereciklus a DMA csatornán az utolsó az adattömb átvitelében. Ha a "KS-stop" bit az üzemmód beállítási regiszterben 1-re van állítva, akkor a csatorna letiltásra kerül. A CS kimenet akkor aktiválódik (CS = 1), ha a csatorna ciklusainak számát mutató 14 bites regiszter tartalma 0-ra van állítva;
  • RA (AE) - kilépés cím engedélyek: A PA = 1 azt jelzi a rendszernek, hogy közvetlen hozzáférési ciklusok zajlanak. Ebben az esetben minden busz le van választva a mikroprocesszorról. A jel segítségével blokkolható a címbusz a közvetlen hozzáférésben nem részt vevő eszközökben, valamint a címkód felső nyolc bitje beírható a címpufferregiszterbe és letiltható az eszközlekérő áramkör. PDP módban az eszköz mintavételezése a ¯PPDP0 – ¯PPDP3 jelek használatával történik;
  • STA (STBA) - kilépés cím villogó, melynek jele a memóriacím magas bájtját villogtatja, a léptetőmotoron keresztül egy további adatpufferbe továbbítva. Ezen a pufferen keresztül a cím magas bájtja belép a mikroprocesszoros rendszer címbuszába;
  • TI - óraimpulzusok bemenete;
  • Reset - az eszköz kezdeti telepítésének bemenete. Egyetlen jel adása erre a bemenetre visszaállítja az összes szoftverrel elérhető regiszter tartalmát, ami a K0 - K3 csatornák leválasztásához vezet.

Az adatpuffer egy 8 bites kétirányú háromállapotú busz, amely a DMA-vezérlőt a léptetőmotor rendszeradat-buszához köti.

Az adatpufferen keresztül:

  • nál nél programozásírási módban a mikroprocesszor nyolc D 7 ... D 0 adatbitje átkerül a PDP vezérlőbe, hogy a kezdőcímregiszterbe, a ciklusszám-regiszterbe vagy az üzemmódbeállító regiszterbe írjon; amikor a processzor olvas a DMA-eszközről, megjelenik a kezdőcímregiszter tartalma, a ciklusszám-regiszter és a csatornaállapot-regiszter;
  • nál nél csatorna működése A DMA minden ciklus elején a cím felső nyolc bitje átkerül a megfelelő csatorna címregiszteréből a memóriába. Ezután az SD felszabadul a memória és a JE közötti közvetlen adatcserére a ciklus hátralevő részében. Ezek az adatok nem jutnak át a PDP-eszközön.

Telepítési nyilvántartás

A módok információkat tárolnak a programozott automatikus betöltési módokról, a kiterjesztett és rendszeres rögzítésről, a fix prioritásról és a prioritások ciklikus eltolásáról, a KS-stopról stb. A DMA vezérlő programozásakor egy 8 bites vezérlőszót írunk rá. Az üzemmód beállítási regiszter általában azután töltődik be címjegyzék(RgA) és ciklusnyilvántartás(RgC). A módbeállító regiszter bitjeinek rendeltetését a táblázat tartalmazza. 3.11.1.

Csatornaállapot-regiszter

jelzi, hogy a négy csatorna közül melyikben fejeződött be a tömbátviteli folyamat. Ehhez a KS kimenetén megjelenő és a megfelelő csatornán a tömb végét jelző számlálás végének KS = 1 jelének értékét a PC0– alacsony rendű bitjeibe írjuk. PC3 (szolgáltatás befejezését jelző jelzők). A rangok kinevezése mód beállítási regiszter táblázatban van megadva. 3.11.2.

A készülék alapállapotai és működési módjai.

A fő állapotok a kezdeti állapot, programozás, várakozás és karbantartás.

A kezdeti állapot.

Belépéskor Visszaállítás egyetlen jelre kapcsol át a készülék a kezdetiállapot. Ebben az állapotban az összes DMA csatorna kérése maszkolt (P0 = P1 = P2 = P3 = 0), az A0 ... A3 busz puffer áramkörei átkerülnek az információ vételi állapotába.

Programozás.

Képes programozás eszköz, az adatbuszon lévő mikroprocesszor (SM - D 0 ... D 7) beírja a kezdő címet, a ciklusok számát és egyéb adatokat a megfelelő regiszterekbe, amelyek címét az A 3 A 2 A kód adja. 1 A 0 az A0–A3 autóbuszokon (3.11. 3. táblázat). Az A3 kód idősebb bitje lehetővé teszi annak megkülönböztetését, hogy az A3 \u003d 0 - csatornaregiszterek K0…K3; A3-nál = 1 - mód beállítási regiszter(csak írásnál működik) és csatorna állapotregiszter(csak olvasásra működik). Az A0 legkisebb jelentőségű bitje a kezdőcím (A0 = 0) és a ciklusszám (A0 = 1) regisztereit választja ki. A két középső számjegy A 2 A 1 jelzi a regiszterek (vagy csatornák) számát bináris kód. Például a 0101-es kód az RFC2 - 2. csatorna ciklusszámláló regiszterének felel meg.A DMA vezérlő regiszterei betöltődnek, vagy azokból információ kerül kiolvasásra, ha a mikroprocesszor írási vagy olvasási parancsot hajt végre az eszközhöz és regisztereihez való hozzáféréssel. Ehhez a mikroprocesszornak ki kell adnia a megfelelő ¯Zp írásjeleket vagy ki kell olvasnia a ¯Cht-t, és be kell állítania a regisztercímet A 3 A 2 A 1 A 0 kód formájában az SHA rendszercímbuszokhoz. Ekkor a léptetőmotor adatbuszára a szükséges D 7 ... D 0 információ kerül a regiszterekbe való íráshoz, vagy a léptetőmotor adatbuszon keresztül a PDP vezérlőből információ kerül kiolvasásra. A programozási állapot beállításához a ¯VK = 0 eszközlehívási jelet is alkalmazni kell. Mivel a csatornaregiszterek 16 bitesek, két programutasítási ciklus szükséges a betöltéshez vagy olvasáshoz. NÁL NÉL címgenerátor A vezérlő egy triggerrel rendelkezik, amely automatikusan kapcsolja az áramkört olvasási vagy írási művelet közben. Ez a trigger határozza meg a regiszter magas vagy alacsony bájtjához való hozzáférést. A trigger visszaállítása egyetlen jellel történik a bemeneten Visszaállítás,és akkor is, amikor az üzemmódbeállítási regiszter betöltődik.

A megfelelő szinkronizálás érdekében a csatornaregiszterekhez való hozzáféréskor minden parancsnak párban kell érkeznie a mikroprocesszortól, nem lehet közöttük hézag.

Elvárás.

Képes elvárások a vezérlő a JE-től egy kérési jelet kap egy PDP ciklus vételéhez (ZPDP0–ZPDP3), és egy rögzítési kérés jelet (ЗЗх) generál a mikroprocesszor számára. Ebben az állapotban a rendszerbuszokat a mikroprocesszor vezérli.

Szolgáltatás.

Miután megkapta a rögzítést megerősítő jelet (PZx) a mikroprocesszortól a JE-től érkező kérésjel (ZPDP0 - ZPDP3) jelenlétében, a vezérlő egy kérést megerősítő jelet (¯PPDP0 - ¯PPDP3) generál az egyik JE számára, és átkapcsol. nak nek szolgáltatás állapota. NÁL NÉL Ebben az állapotban a rendszerbuszokat a vezérlő vezérli, és a programozott DMA módok egyike megvalósul:

  • a memóriacím alsó 8 bitje az A0–A3, A4–A7 buszokra, a felső 8 bit a léptetőmotor adatbuszára kerül;
  • a megfelelő ¯ChtP és ¯ZpP, ¯Zp és ¯Cht vezérlőjelek jönnek létre, amelyek lehetővé teszik a JE számára, hogy egy adatbájt-cikluson belül fogadjon a memóriacellából, vagy továbbítson a memóriacellába.

Az első működési ciklusban a PMA eszköz továbbítja a memóriacella kezdőcímét. A következő ciklusokban a cím növekszik, a ciklusok száma pedig eggyel csökken mindaddig, amíg a ciklusszám-regiszter tartalma (vagy inkább annak 14 bitje) nullával nem egyenlő. Ezt követően jel keletkezik számolás vége A CS és a következő üzemmódok lehetségesek:

  • a cím további növelése a következő ciklus utáni hozzáadásával;
  • a PDP csatorna blokkolása („KS-stop” mód);
  • egy korábban kiválasztott címtömb ismétlése (autoload mode).

A RAP ciklusok végrehajtása során három működési mód lehetséges:

  • mód olvasás, adatátvitel biztosítása a memóriából a JE-be;
  • mód rekordok, adatátvitel biztosítása a JE-ből a memóriába;
  • mód ellenőrzi. Ebben az üzemmódban a PMA vezérlő nem generálja a ¯ChtP, ¯ZpP, ¯Ch és ¯Zp jeleket, ami megakadályozza az adatcserét a memória és a JE között. Azonban minden ciklusban a PMA vezérlő vezérli a rendszerbuszt, és nyugtázza a JE kéréseit. Külső eszközök nyugtázó jeleket használhat, hogy belső hozzáférést biztosítson az adattömb minden egyes bájtjához bizonyos ellenőrzési művelet végrehajtása érdekében. Az ellenőrzési ciklusok tömbje követheti az olvasási ciklusok tömbjét, hogy lehetővé tegye az RT számára az újonnan érkezett adatok ellenőrzését.

Az Embedded Flash Controller (EFC) a memóriavezérlő (MC) része, és interfészt biztosít a flash memória blokkokhoz egy belső 32 bites buszon keresztül. Ez lehetővé teszi az utasítások flash memóriából történő lekérésének sebességének jelentős növelését, amikor a processzormag hüvelykujj módban (16 bites utasításrendszer) működik a 32 bites puffer működése miatt. Sőt, a beépített vakuvezérlő támogatja teljes készlet parancsok olvasáshoz, íráshoz, flash memória törléséhez, biztonsági bitek beállításához és törléséhez.

20.2 Működési leírás

20.2.1 A beépített flash memória felépítése

A beépített flash memória interfészek közvetlenül csatlakoznak egy belső 32 bites buszhoz, amely az alábbi interfészek közül többen alapul.

  • Egyszerű memóriarendezés: több azonos méretű oldal.
  • Két 32 bites olvasási puffer, amelyet a flash olvasási sebesség növelésére terveztek (lásd: „Olvasási parancsok”, 101. oldal).
  • Egy írópuffer az adatok tárolására egy flash oldal programozásakor. Ez a puffer egy oldal méretű, és csak írható. Ezenkívül az írási puffer a flash memória teljes 1 MB-os területét címzi (lásd: „Írási parancsok”, 101.
  • Számos biztonsági bit (lock bit) a flash memória törlésének és írásának megakadályozására. A flash memória minden védett területe (minden terület azonos méretű) meghatározott számú, egymás után elhelyezett oldalból áll. Mindegyik ilyen terület csak egy biztonsági bithez kapcsolódik közvetlenül.
  • Néhány bit nem felejtő memória – NVM (Non Volatile Memory) bitek általános célokra. Ezen bitek mindegyike felelős a mikrokontroller bizonyos csomópontjainak vezérléséért. Többért részletes információk az egyes NVM bitekre vonatkozóan lásd a dokumentum vonatkozó fejezeteit.
A beépített flash memória méretét, oldalméretét és a biztonsági bitek felépítését a 9. Memória fejezet írja le.

20-1. táblázat. Biztonsági bitek száma és általános célú NVM bit az AT91SAM7S családtagokhoz

20-1. ábra. Beépített flash memória térkép

20.2.2 Parancsok olvasása

A flash memória olvasási folyamatának felgyorsítása érdekében egy dedikált 32 bites puffer van beépítve az EFC vezérlőbe. Ennek a puffernek a jelenléte miatt, amikor a processzor hüvelykujj módban (16 bites utasításkészlet) működik, a flash memóriához való hozzáférés kétszer ritkábban fordul elő, ami miatt megnő az utasításlekérési sebesség, és ennek következtében a sebesség. a processzor (20-2. ábra, 20-3. ábra és 20-4. ábra).

Ez az optimalizálás csak az utasítások lekérésekor történik, és nem a flash memóriából való adatok beolvasásakor.

Az olvasási parancsok végrehajthatók további várakozási ciklusokkal vagy anélkül. Csak legfeljebb három (beleértve) várakozási ciklus állítható be az MC_FMR vakumód-regiszter FWS (Flash Wait State) mezőjében (lásd: „Flash Mode Register”, 110. oldal). FWS = 0 esetén a beépített flash memória egyetlen ciklusban érhető el.

A flash memória elérése 32 bites (szótár), 16 bites (félszavas) és 8 bites változatban érhető el.

Mivel a beépített flash memória mérete kisebb, mint a mikrokontroller, mint a számára lefoglalt belső memória címterének mérete (1 MB), a memóriavezérlő megvalósítja az ún. a flash memória blokkjának megkettőzése a számára kijelölt címtérben. Például az AT91SAM7S64 esetében a 64 KB-os flash memória pontosan 1024/64 = 16-szor van leképezve ebben a címtérben.


20-2 ábra. Optimalizálás parancskód olvasásakor hüvelykujj módban FWS = 0 esetén


20-3 ábra. Optimalizálás parancskód olvasásakor hüvelykujj módban FWS = 1 esetén


20-4 ábra. Optimalizálás parancskód olvasásakor hüvelykujj módban FWS = 3 esetén

20.2.3 Parancsok írása

A beépített flash memória számára fenntartott belső memóriaterületre is csak egy dedikált pufferen keresztül lehet írni. A flash memóriába írási parancsok végrehajtásakor csak a cím alsó 8 bitjét veszik figyelembe (mert beszélgetünk 32 bites adatok esetén a cím legkevésbé jelentős 10 bitje kerül ténylegesen figyelembe). A flash memória számára fenntartott belső terület (1 MB) címének felső 10 bitje viszont ezt az ún. egy 256 szó (1024 bájt) méretű ablak. Így mindezt belső memória 1024 ilyen ablakból áll.

Az MPU (Memory Protection Unit) minden írási parancsot letilthat a beépített flash memóriába.

A flash memóriába csak szavakkal (32 bit) lehet írni, így minden fél szó (16 bit) vagy bájt (8 bit) írási kísérlete megjósolhatatlan eredményt hoz.

Az írási parancsok végrehajtása az olvasási parancsokhoz megadott számú várakozási ciklusban (az MC_FMR-ben FWS mező) történik, plusz egy további ciklus, kivéve, ha FWS = 3 (lásd: "Flash mód regiszter", 110. oldal).

20.2.4 Flash-vezérlő parancskészlet

Az EFCS tartalmaz parancsokat a flash memória programozására, a védelem beállítására (védelmének feloldására) vonatkozó parancsokat, parancsokat a szekvenciális programozásra és a flash memória védelmének beállítására, valamint egy parancsot az összes flash memória teljes törlésére.

20-2. táblázat. Flash Controller Command System

A parancsok bármelyikének végrehajtása előtt az MC_FCR regiszter FCMD mezőjét az adott parancs kódjára kell állítani. Mivel az MC_FCR csak olvasható, az FRDY jelző automatikusan törlődik. Az utasítás végrehajtása után automatikusan beáll az FRDY jelző, amely kiválthatja a megfelelő megszakítást, ha engedélyezve van a memóriavezérlőn (MC) keresztül.

Minden flash utasítást egyetlen közös kulcsszó véd a véletlen végrehajtástól, amelyet az MC_FCR regiszter felső 8 bitjében kell megadni minden alkalommal, amikor a következő utasítást végrehajtják.

A helytelenül megadott kulcsszót és/vagy az utasításhoz helytelenül megadott kódot tartalmazó utasítás nem hajtódik végre, még akkor sem, ha az MC_FSR regiszterben a PROGE jelző be van állítva. Ez a jelző automatikusan visszaáll az MC_FSR regiszter következő olvasásakor.

Egy védett területen lévő oldal írására vagy törlésére tett kísérlet nincs hatással a flash memória tartalmára (valójában ez a parancs figyelmen kívül marad), még akkor sem, ha az MC_FSR regiszterben a PROGE jelző be van állítva. Ez a jelző automatikusan visszaáll az MC_FSR regiszter következő olvasásakor.


20-5. Parancs folyamatábra

A flash-parancsok megfelelő végrehajtásához a Flash-vezérlő mód regiszterben (MC_FMR) a Ciklusidő mikroszekundumban (FMCN) mezőjét a megfelelő értékre kell állítani (lásd: „Flash memóriavezérlő mód regisztere”, 110. oldal).

20.2.4.1 Flash programozás

Csak néhány parancs használható a flash memória programozásához.

A flash memória technológiája szerint közvetlenül a programozási folyamat előtt törölni kell. Akár egy teljes flash-terület, akár egy egyes oldal törölhető az MC_FMR regiszter NEBP jelzőjének törlésével közvetlenül az MC_FCR regiszterbe írt utasításkóddal.

Az MC_FMR regiszterben a NEBP jelző beállításával egy oldal meghatározott számú lépésben programozható, ha már előzőleg törölve lett (lásd 20-6. ábra).


20-6. Példa egy Flash oldalszakasz programozására

A programozási folyamat befejezése után az oldal védhető a véletlen vagy szándékos törléstől vagy írástól (ha az oldalt tartalmazó teljes terület védett). A WPL paranccsal a védelem automatikusan beállítható közvetlenül az oldalírási ciklus vége után.

Az írandó adatok egy belső pufferben tárolódnak, amelynek mérete megegyezik egy flash oldal méretével. Ez a belső puffer lefedi a belső flash teljes címterét, azaz. tulajdonképpen bármelyik oldalán teljes egészében megjeleníthető.

Jegyzet: bájtok (8 bit) vagy félszavak (16 bit) írása tilos, mert mivel ez a rögzített adatok sérülését okozza.

A belső pufferben korábban lefoglalt flash memóriába történő adatírás folyamatát a flash parancsregiszter (MC_FCR) vezérli. Az alábbiakban a regiszterrel végzett munka sorrendje látható.

  • Egy teljes oldal írása, amely a teljes flash címtéren belül tetszőleges címre elhelyezhető, csak szótárként lehetséges (32 bites adat).
  • Az oldalírási ciklus közvetlenül az oldalszám és az írási parancskód megadása után kezdődik az MC_FCR regiszterben. Ez automatikusan visszaállítja az FRDY jelzőt a Flash programozási állapotregiszterben (MC_FSR).
  • Közvetlenül egy programozási ciklus befejezése után az FRDY jelző beáll a Flash programozási állapotregiszterben (MC_FSR). Ha az FRDY jelzőből származó megszakítások engedélyezettek, akkor a megfelelő megszakítási jel megjelenik a memóriavezérlőben (MC).
  • Programozási hiba: Érvénytelen érték lett írva az MC_FSR regiszterbe. kulcsszóés/vagy érvénytelen parancsot adtak meg.

20.2.4.2 Flash-parancs teljes törlése

Az összes chipen lévő flash memória törölhető, ha az MC_FCR regisztert az "Erase All" paranccsal írjuk – EA (Erase All).

A teljes flash memória törlése csak akkor lehetséges, ha egyik területe sem védett a törléstől és írástól (a flash memória védelmi jelzőinek egyike sincs beállítva). Ellenkező esetben (legalább az egyik védelmi jelző be van állítva) ezt a parancsot figyelmen kívül hagyja. Ha az MC_FMR regiszterben a LOCKE jelző be van állítva, akkor a megfelelő megszakítási jel fog megjelenni.

Az FRDY jelző automatikusan be lesz állítva az MC_FSR regiszterben az utolsó programozási parancs vagy a flash memória törlése után. Ebben az esetben a megfelelő megszakítási jel azonnal megjelenik a memóriavezérlő (MC) kimenetén, ha engedélyezve van.

A programozási ciklus végrehajtása során hibák léphetnek fel, amelyek az MC_FSR regiszterben vannak rögzítve. Ezeket a hibákat az alábbiakban soroljuk fel.

  • Programozási hiba: Érvénytelen kulcsszót írtak az MC_FSR regiszterbe és/vagy érvénytelen parancsot adtak meg.
  • Zárolási hiba: Kísérlet történt egy biztonságos terület programozására. Ennek a területnek a helyes programozásához először le kell védeni az unprotect paranccsal.

20.2.4.3 Flash védelmi bitek

A biztonsági bitek mindegyike a flash memória meghatározott területéhez van kötve, amely meghatározott számú oldalból áll. Ezeknek a biteknek az a célja, hogy megvédjék a flash memóriát a véletlen vagy szándékos törléstől/programozástól.

A mikrokontroller gyártási folyamata során a védelmi bitek egy része beállítható benne. Céljuk a flash memória egy bizonyos részének védelme, amely alapértelmezés szerint a gyártás során a mikrokontrollerre írt programot tartalmaz. A védett terület programozása/törlése előtt a védelmet mentesíteni kell.

A következő sorrendben van beállítva egy terület védelme:

A flash parancsregiszterbe a következő értéket kell beírni: (0x5A, a védelmi parancs végrehajtása után az MC_FSR regiszterben az FRDY jelző lesz beállítva. Ez azonnal a megfelelő megszakítási jelet okozza a memóriavezérlő kimenetére ( MC), ha engedélyezve van. ul>

A védelem beállítása után a védelem mentesíthető, a következő sorrendben az egyik terület védelem feloldásának sorrendje látható:

  • a flash parancs regiszterbe a következő értéket kell írni: (0x5A a védelmi parancs befejezése után az MC_FSR regiszterben az FRDY jelző kerül beállításra. Ilyenkor azonnal megjelenik a megfelelő megszakítási jel a memória kimenetén vezérlő (MC), ha engedélyezve van.

Ha a parancs végrehajtása során hiba történik (az MC_FCR regiszterben érvénytelen kulcsszó és/vagy hibás parancskód van megadva), akkor ez a tény rögzítésre kerül az MC_FSR regiszterben.

A zárolási bit törlésére irányuló parancs végrehajtása fizikailag "1"-et ír a megfelelő bitre, bár az MC_FSR regiszter olvasása a megfelelő LOCKx bitet "0"-ként olvassa. Ezzel szemben a lock bit set parancs végrehajtása fizikailag "0"-t ír a megfelelő bitre, és az MC_FSR regiszter olvasása a megfelelő LOCKx bitet "1"-ként olvassa be.

Jegyzet: függetlenül attól, hogy a flash memória védett-e, olvasással továbbra is elérhető.

20.2.4.4 Általános célú NVM bitek

Az általános célú bitek – NVM bitek – nincsenek a beépített flash memóriához társítva, hanem a mikrokontroller többi csomópontjának védelmét szolgálják. Ezen bitek mindegyike a többitől függetlenül beállítható (törölhető). Az NVM bitekkel kapcsolatos részletekért lásd a dokumentum vonatkozó fejezeteit.

A következő az általános célú NVM bitek aktiválási sorrendje.

  • A Set General Purpose NVM Bit (SGPB) parancs végrehajtása úgy, hogy a Flash memória parancsregiszterbe (MC_FCR) beírja a parancs kódját és e bitek számát ugyanazon regiszter PAGEN mezőjében.
  • az SGPB utasítás befejezése után az MC_FSR regiszterben az FRDY jelző beáll. Ebben az esetben a megfelelő megszakítási jel azonnal megjelenik a memóriavezérlő (MC) kimenetén, ha engedélyezve van.

A programozási ciklus végrehajtása során hibák léphetnek fel, amelyek az MC_FSR regiszterben vannak rögzítve. Ezeket a hibákat az alábbiakban soroljuk fel.

  • Az MC_FCR regiszter PAGEN mezője az általános célú bitek számát jelzi, amely nagyobb, mint a chipben megvalósított NVM bitek maximális megengedett száma. Az alábbiakban az általános célú NVM bitek törlésének sorrendje látható.
  • Az általános célú NVM bit törlése (CGPB) parancs végrehajtása a parancskód és ezen bitek számának a Flash memória parancsregiszterbe (MC_FCR) történő írásával ugyanazon regiszter PAGEN mezőjében.
  • amikor a CGPB utasítás befejeződik, az MC_FSR regiszterben lévő FRDY jelző be lesz állítva. Ebben az esetben a megfelelő megszakítási jel azonnal megjelenik a memóriavezérlő (MC) kimenetén, ha engedélyezve van.

A programozási ciklus végrehajtása során hibák léphetnek fel, amelyek az MC_FSR regiszterben vannak rögzítve. Ezeket a hibákat az alábbiakban soroljuk fel.

  • Programozási hiba: Érvénytelen kulcsszót írtak az MC_FSR regiszterbe és/vagy érvénytelen parancsot adtak meg.
  • Az MC_FCR regiszter PAGEN mezője az általános célú bitek számát jelzi, amely nagyobb, mint a chipben megvalósított NVM bitek maximális megengedett száma.

Az "általános célú NVM bitek törlése" parancs végrehajtása fizikailag "1"-et ír a megfelelő bitre, bár az MC_FSR regiszter olvasása a megfelelő GPNVMx bitet "0"-ként olvassa ki. Ezzel szemben egy "Általános célú NVM bitek beállítása" parancs végrehajtása fizikailag "0"-t ír a megfelelő bitre, és az MC_FSR regiszter olvasása a megfelelő GPNVMx bitet "1"-ként olvassa be.

Jegyzet: az általános célú NVM bitek állapotától függetlenül a flash memória mindig olvasható.

20.2.4.5 Biztonsági bit

A titkos bit célja, hogy megakadályozza a belső rendszerbuszhoz való külső hozzáférési kísérleteket. A biztonsági bit beállítása után a JTAG interfész, a flash memória gyors programozó interfész működése, valamint a flash memóriához való hozzáférés soros interfész. A flash memóriához való hozzáférés a fenti interfészeken keresztül ismét csak akkor engedélyezett, ha teljes tisztítás kristály a külső ERASE tűn – lásd a 4. Pin-kiosztás fejezetet. Amikor az ERASE tűt magasra hajtják (lásd a 7.4. „Vezérlőtüske törlése” szakaszt), az összes chipen lévő vaku, az összes vakuvédő bit és az összes általános célú NVM bit törlődik, és csak miután mindez megtörtént, törli a titkosítási bitet. .

Az adatvédelmi bit beállításának sorrendje alább látható.

  • Hajtsa végre a Set Security Bit (SSB) parancsot a parancskód beírásával a Flash parancsregiszterbe (MC_FCR).
  • az SSB utasítás befejezése után az MC_FSR regiszterben az FRDY jelző beáll. Ebben az esetben a megfelelő megszakítási jel azonnal megjelenik a memóriavezérlő (MC) kimenetén, ha engedélyezve van.

Közvetlenül a biztonsági bit beállítása után a SECURITY jelző be lesz állítva az MC_FSR regiszterben.