Flash ve EEPROM


14

Atmega16 veri sayfası,

a) 16 Kbayt Sistem İçi Kendinden Programlanabilir Flash program belleği ve b) 512 Bayt EEPROM.

Bir mikrokontrolcünün EEPROM teknolojisi ve Flash teknolojisi ile programlanabilen iki ayrı ROM'u olabilir mi?

Veya veri sayfasından çıkarım (yukarıda verildiği gibi) yanlış mı?

Programımızın neden herkes EEPROM'a ihtiyaç duyduğundan daha fazla flash bellekte saklandığını biliyorum. Program için flash belleğimiz varsa kullanımı nedir?

Ayrıca herhangi biri "Sistem İçi Kendinden programlanabilir" teriminin ne olduğunu açıklayabilir

Bildiklerim: Flash teknolojisi programı veri blokları halinde yazabilirken, EEPROM veri bayt byte'ı yazabilir.

Yanıtlar:


22

Günümüzde, Flash bellek program kodunu tutmak için ve EEPROM (Elektrikle Silinebilir Salt Okunur Bellek) kalıcı verileri tutmak için kullanılır. Yaklaşık 30 yıl önce, Flash gelmeden önce, EEPROM'lar program kodunu tutmak için kullanıldı.

Aslında ROM (Salt Okunur Bellek) önce geldi, ardından PROM (yalnızca bir kez Programlanabilir ROM), EPROM (UV ışığı ile PROM Silinebilir), EEPROM ve son olarak Flash. ROM'lar hala çok yüksek hacimli, düşük maliyetli uygulamalar (örneğin, tebrik kartları) için kullanılmaktadır.

Mevcut mikrodenetleyicilerdeki önemli fark, genellikle EEPROM dışında bir kod yürütememenizdir ve programların flaş içinde veri depolaması gariptir. (Örneğin, veri bildiriminde "const" anahtar sözcüğünü kullandığınızda veya bir dize tanımladığınızda, ancak derleyici ve bağlayıcı tarafından sahne arkasında işlenen veriler flaşta depolanır.)

EEPROM alanı, mikro denetleyicinin gücü kesilmiş ve daha sonra yedeklenmiş olması da dahil olmak üzere, yeniden başlatmalarda bulunmasını istediğiniz yapılandırmayı veya diğer verileri tutmak için kullanılabilir. İşlevsel olarak, EEPROM'u çok küçük bir sabit sürücü veya SD kart olarak düşünebilirsiniz.

EEPROM içermeyen mikrodenetleyicilerde, kalıcı verileri flash bellekte saklamak mümkündür, ancak mikrodenetleyiciler bunun için gerçekten tasarlanmadığından ve program koduna müdahale etmeyecek özel bir yer bulmanız ve bunu bir kenara bırakmanız gerektiğinden bu zorlaşır. bağlayıcı ile. Ayrıca, aşağıda belirtildiği gibi, EEPROM'u genellikle flaştan çok daha fazla güncelleyebilirsiniz.

Program verilerini flash olarak yaparsanız, bu, C programınızda verilere değişken olarak erişebileceğiniz anlamına gelmez, çünkü derleyiciye bu değişkenlerin kodunuzda nerede olduğunu söylemenin bir yolu yoktur (yani bir sabit bağlayamazsınız) ) Bu nedenle, bunları yazmak, bunları yazmak için kullanılan özel kayıt kümeleri aracılığıyla yapılmalıdır. Bu kısıtlamanın EEPROM'daki veriler için de geçerli olduğunu unutmayın, bu nedenle bu konuda bir avantajı yoktur.

Flaş veya EEPROM'u programlamak için, önce bir bellek bloğunun silinmesi gerekir. Sonra programlanır. Flaş için, yazma genellikle bir seferde bir blok yapılır. EEPROM'lar için, mikro denetleyiciye bağlı olarak bir seferde bloklar veya bir bayt ile yapılabilir.

Hem flaş hem de EEPROM'lar için, belleği takmadan önce maksimum güncelleme sayısı vardır. Bu sayı veri sayfasında minimum garanti edilen değer olarak verilir. EEPROM'lar için genellikle flash bellekten çok daha yüksektir. Flaş için 1000 kadar düşük sayılar gördüm. EEPROM'lar için 1.000.000 kadar yüksek sayılar gördüm.

EEPROM'ların flaşa göre bir avantajı, flaşı silebileceğinizden daha fazla silmenizdir.

"Sistem İçi Kendinden Programlanabilir", mikrodenetleyicinin çalışırken kendi flaşını güncelleyebileceği anlamına gelir. Özellik genellikle alandaki kodu güncellemek için kullanılır. İşin püf noktası, ana program güncellenirken bootloader adı verilen sistemde bazı kodlar bırakmanızdır. Bu şema Arduino sisteminde çipi programlamak için kullanılır.


Yanıtınız için teşekkürler efendim. EEPROM içine veri girmek için, programı flash belleğe dökmek için USBASP programlayıcısında olduğu gibi bir EEPROM programlayıcısına ihtiyacım olacak mı? Haklı mıyım efendim.
Jasser

1
@Jasser Hayır, harici bir programcıya ihtiyacınız yok. EEPROM'a programınızdan erişeceksiniz. ATmega içinde, onlara yazarak EEPROM'u güncellemenizi sağlayacak bir dizi kayıt olacaktır. EEPROM'dan okumak için bu kayıtları kullanmanız gerekecektir, çünkü normal adres haritasında görünmeyecektir. EEPROM'un silinmesi, yazılması ve okunması ile ilgili bilgiler çipin veri sayfasında olacaktır.
tcrosley

Mikrodenetleyicinin içindeki EEPROM'u yazabildiğimizden veya okuyabildiğimizden, mikrodenetleyicinin EEPROM içinde veri depolayacak bir devresi olmalıdır ve bu EEPROM programcısına benzer olmalıdır. Bu da beni başka bir soruya götürüyor, çünkü EEPROM'un bundan sonra yaklaşık 100.000 kez wirtten olabileceğinden, kayıtlar aracılığıyla EEPROM içinde veri depolayamayabiliriz. Bu ifadeler anlamlı mı? @tcrosley
Jasser

1
@Jasser Doğru, EEPROM'u kaç kez güncelleyebileceğiniz konusunda bir sınır var. Bu, genellikle flaşı güncelleyebileceğiniz sayıdan çok daha yüksektir (bazen daha fazla bir büyüklük sırası). Cevabımda bunu söylemeliydim ve güncelleyeceğim. Alıntıladığınız sayı, yonga üreticisi tarafından garanti edilen minimumdur; 100.000 yazım için belirtilen bir yonga ile bir kez bazı testler yaptım ve herhangi bir hata tespit edilmeden önce 500.000'in üzerine çıktı.
tcrosley

1
@Jasser Evet, verileri flaş olarak ayarlamak biraz daha zor. Ayrıca, yanıtı güncellememde tartışıldığı gibi, EEPROM'u flaştan çok daha fazla (tipik olarak 10x) silebilir ve yeniden programlayabilirsiniz.
tcrosley

4

@Tcrosley'nin mükemmel cevabına biraz daha bilgi ekleyeceğim.

ATmega16 bir Harvard mimarisi , yani veri belleğinin program belleğinden ayrıldığı bir sistem topolojisi uygular . İlgili paragrafın Atmega16 veri sayfasından alıntılanması (sayfa 8):

Performansı ve paralelliği en üst düzeye çıkarmak için AVR, program ve veriler için ayrı anılar ve otobüsler içeren bir Harvard mimarisi kullanır. Program belleğindeki talimatlar tek seviyeli bir boru hattı ile yürütülür. Bir komut yürütülürken, bir sonraki komut program belleğinden önceden getirilir. Bu konsept, talimatların her saat döngüsünde yürütülmesini sağlar. Program belleği Sistem İçi Yeniden Programlanabilir Flash bellektir.

Harvard mimarisinin, veri alma ve alıştırmalar geleneksel PC mimarinizdeki gibi aynı veriyolunu paylaşmadığından, talimat getirme döngüleri ile veri erişim döngüleri arasında veri yolu çekişme olmaması avantajına sahiptir.

Bu nedenle, flash bellek program belleği olarak kullanılırken, veri belleği SRAM (işlev çağrısı yığını ve yığın gibi geçici veriler için - örneğin C'de programlıyorsanız) ve EEPROM (kalıcı depolama için) arasında bölünür .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.