PIC Micronetler ile Dış hafızaya Giriş

Microchip'dan PIC mikrokontroller, uygulama kodu ve küçük veri miktarı depolamak için iç EEPROM ve Flash sunar, ancak karmaşık projeler genellikle daha fazla kapasite gerektirir. Dış EEPROM (Elektrikli Erasable Read-Only Memory) ve Flash hafıza çipleri, hem I2C hem de USB bellekleri için gerekli olmayan depolama sağlar.

Bir veri kaydı inşa etmek, akıllı bir sensör node veya güç kaybından sonra kritik ayarları tutmanız gereken bir gömülü sistem, arayüz dış hafızanın nasıl verimli bir şekilde gelişimini ve güvenilirliğini artırmasını sağlayacaktır. Donanım kablolama, iletişim protokolleri ayrıntıları, pratik kod örnekleri, hata işleme ve blok yönetimi gibi ileri teknikler tartışacağız.

Dış EEPROM ve Flash Memory'ı Anlamak

Hem EEPROM hem de Flash, güç kaldırıldığında depolanan verileri korumak anlamına gelmez. Ancak, mimarlık, dayanıklılık ve tipik kullanım vakalarında farklıdır:

  • [FONT=0)EEPROM) - Operasyonlar üst düzey okuma ve yazma işlemlerine destek. dayanıklılık genellikle 1 milyon silin / yazma döngüsüdir. EEPROM, küçük miktarları sık güncel veriler depolamak için idealdir (örneğin, kalibrasyon sabitleri, kullanıcı tercihleri).
  • [FONT=0]Flash Memory[[Dönetici:0]- Blok seviyesindeki silinme ve program operasyonları için optimize edilmiştir. Flash çok daha yüksek yoğunluk sunar (kampiyonlara daha uygun) ancak daha düşük dayanıklılık (tipik olarak 10.000 ila 100.000 silinme döngüsü için kullanılır).

Dış EEPROM ve Flash, PIC ile seri protokolleri (I2C veya SPI) veya nadiren paralel otobüsler ile iletişim kurar. Seri arayüzler pin sayılarını azaltır ve PCB düzeni basitleştirir, onları gömülü tasarımları için baskın seçimi yapın.

Doğru Memory Device'u seçmek

PIC projesiniz için dış bellek çipini seçerken, bu kriterleri değerlendirin:

  • [FONT=0]Memory Boyut ve Kapasite) - Uygulamanızın veri hacminin veya depolar oluşturduğunu tahmin edin. Basit yapılandırma verileri için, 64 kbit EEPROM (8 KB) yeterli olabilir. audio örnekleri veya bilgisayar yükseltleri için, 16 Mbit veya daha büyük SPI Flash'ı düşünün.
  • [[Dönetici:0) İletişim Protokolü[[Dönetici:0)[Dönetici:0)[MISO, MOSI, SCLK, CS) ve cihazınızı sadece iki tel kullanır. hız ve pin kullanılabilirliğinize dayanarak seçin.
  • [FONT=0) Hız ve Data Transfer Oranı[[Dönetici: 1 ) – I2C genellikle 100 kHz veya 400 kHz'de çalışır; SPI'ye hızlı bir akışa ihtiyacınız varsa (örneğin, ses oyun gerisi), SPI zorunlu.
  • [FONT:0)Power tüketim[[DÜT:1] – Hem EEPROM hem de Flash, miliampere aralığında ve derin uyku modlarında aktif okuma / yazma akımları var.For batarya destekli tasarımları için, düşük standby current (e.g.
  • [FONT=0)Operating Germe[[Dönetici:0)Operating Gere[[Dönetici: 3 ) - Çoğu PICs, 3V veya 5V'de çalışır. hafıza çipinin aynı gerilim aralığına destek olmasını sağlar. Birçok modern EEPROMs, 1.7V'den 5.5V'ye kadar çalışır, esnekliği sağlar.
  • [FONT=0]Cost ve Müsaitlik Durumu – Ortak aileler Microchip'un 24AA serisini (I2C EEPROM), 25AA serisi (SPI EEPROM), SST25 veya Winbond W25Q serisi (SPI Flash) ve AT24 serisi (I2C EEPROM) kontrol distribütörü ve uzun zamanlar içerir.
  • [FONT=0)Endurance and Retention[[Dönetici: 1) EEPROM genellikle Flash. Data keep'dan daha yüksek yaz dayanıklılık sunar. Flash için, sık sık sık yazsanız silinen döngüleri düşünün ve aşınma seviyesini uygulayın.

[FONT:0)Mikroçinin seri EEPROM seçimi rehberi[[Dönetici:0) doğrudan karşılaştırma masaları sağlar.[/FLT:2).Winbond'un seri NOR Flash portföy[DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD][CONT=0) listeler Popüler SPI Flash seçenekleri her zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman belirli veri tabloyu zamanlama ve komut setleri için okuyun.

Dış hafızayı PIC Micronetler'e bağlayın

Donanım kablosu, arayüze bağlıdır. Aşağıda I2C ve SPI bağlantılarını çekme gibi önemli düşüncelerle birlikte ele geçiriciler ve decoupling kapasitors gibi.

I2C (IIC) Interface

I2C iki çift yönlü çizgi kullanır: [FONTT:0)SDA[DÜDÜDÜSTRİYE) ve [[Dönetici:2|SCL[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜSÜSÜDÜDÜSÜSÜSÜDÜSÜSÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ

[FONT:0)Wiring:[Dönem:[Dönem: 1)

  • Connect SDA'yı bir PIC I / O pin açık-drain veya bi-yönerge olarak yapılandırdı.
  • SCL'i başka bir PIC I / O pin'e bağlayın.
  • SDA ve SCL'den Vcc'ye dış çekme dirençleri ve hızına bağlı olarak; 400 kHz için 2.2 kULL gerekebilir.
  • Hafızanın WP'sini (öğrenme) Donanım yazma korumasına veya tüm diziyi korumak için GND'ye bağlayın.
  • hafızanın gücü pin yakınında 0.1 μF seramik kapasitorunu çift gürültüyü bozmak için yerleştirin.

Yüksek hızlı I2C (1 MHz), izlerini kısa tutar ve daha güçlü çekmeleri kullanın. Örnek cips: Microchip 24LC256 (256 kbit I2C EEPROM), AT24C512 (512 kbit).

SPI Interface

SPI dört sinyalleri kullanır: [FONT:0]MOSI[Dönetici: 1) [FONT:2)) . (Uygunluk, köle, yüksek çözünürlükte) MİLMİŞK[DÜŞÜNCÜŞÜNCÜŞÜNÜŞÜNÜŞÜNÜye Olmayanlar, SCLK[DÜye Olmayanlar, SCLK, MOSI, SCLK[DÜye Olmayanlar) ve aynı anda seçilmezse, SCLK'yi paylaşırlar.

[FONT:0)Wiring:[Dönem:[Dönem: 1)

  • Klan (PIC çıktı) hafızanın SI (serial input) için
  • Connect MISO (PIC girdi) hafızanın SO (serial çıktı)
  • SCLK (PIC çıktı) hafızanın SCK'ya bağlanır.
  • CS'yi bir PIC dijital çıktı pin'e bağlayın. Birden fazla hatıra için ayrı pin kullanın.
  • Gerekirse CS hattında zayıf çekme (10 kULL) ekleyin, ancak tipik mantık yeterli olsa.
  • Bir 0.1 μF kapasiteli olan çift gücü.

SPI Flash cipsi genellikle statü kayıtlarını içeriyor ve belirli komut dizilerine ihtiyaç duyuyor (örneğin WREN) Örnek: Winbond W25Q32 (32 Mbit SPI Flash), Microchip 25LC256 (256 kbit SPI EEPROM).

PIC'yi Dış Hafızaya Erişimi Programlama

PIC mikrokontroller uygun periferik modül (I2C veya SPI) başlatmak ve sonra hafıza çipine göre / veri göndermek gerekir. Her iki Microchip'un donanım MSSP modülü (Master Synchronous Seri Port) ve yazılım biraz-banging kullanılabilir.

I2C İletişim Kodu Örnek

Aşağıda MCC (Mikroçi Kod Configurator) kullanılarak basitleştirilmiş bir örnek vardır. bir PIC16F18877 için bir tek kod belirli bir adresde I2C EEPROM'a yazar ve sonra geri okur.

// Assumes I2C1_Initialize() called earlier.
// Device address: 0xA0 (for write) – actual address depends on A0-A2 pins.
#define EEPROM_ADDR 0xA0

void I2C_WriteByte(uint16_t memAddr, uint8_t data) {
 I2C1_Start(); // Generate start condition
 I2C1_Write(EEPROM_ADDR); // Send device address + write bit
 I2C1_Write((uint8_t)(memAddr >> 8)); // High address byte
 I2C1_Write((uint8_t)(memAddr)); // Low address byte
 I2C1_Write(data); // Data byte
 I2C1_Stop(); // Generate stop condition
 __delay_ms(5); // Wait for internal write cycle (tWR)
}

uint8_t I2C_ReadByte(uint16_t memAddr) {
 uint8_t data;
 I2C1_Start();
 I2C1_Write(EEPROM_ADDR); // Device address + write for dummy write
 I2C1_Write((uint8_t)(memAddr >> 8));
 I2C1_Write((uint8_t)(memAddr));
 I2C1_RepeatedStart(); // Repeated start to change direction
 I2C1_Write(EEPROM_ADDR | 0x01); // Device address + read bit
 data = I2C1_Read(0); // NAK after last byte
 I2C1_Stop();
 return data;
}

Not: Sayfa yazar için, bir sayfa sınırı geçmemelisiniz (tipik olarak 8, 16 veya 64 taneleri). sayfa büyüklüğü için veri tablosuna bakınız. Ayrıca, yaz döngüsünden sonra acknowledgment için anket yapmak sabit gecikmelerden daha verimlidir.

SPI İletişim Kodu Örnek

SPI Flash (e.g., W25Q32) için, yazı işlemleri yazma (WREN) için bir Page Program komutunu göndermesi gerekir. İşte SPI master modunda MSSP kullanan en az örnek.

#define FLASH_CS LATAbits.LATA0 // Chip select pin

void SPI_WriteEnable(void) {
 FLASH_CS = 0;
 SPI1_Exchange8bit(0x06); // WREN command
 FLASH_CS = 1;
}

void SPI_FlashPageProgram(uint32_t addr, uint8_t *data, uint8_t len) {
 SPI_WriteEnable();
 FLASH_CS = 0;
 SPI1_Exchange8bit(0x02); // Page Program command
 SPI1_Exchange8bit((uint8_t)(addr >> 16)); // High address byte
 SPI1_Exchange8bit((uint8_t)(addr >> 8));
 SPI1_Exchange8bit((uint8_t)(addr));
 for (uint8_t i = 0; i < len; i++) {
 SPI1_Exchange8bit(data[i]);
 }
 FLASH_CS = 1;
 __delay_ms(5); // tPP max 5 ms typical
}

void SPI_FlashRead(uint32_t addr, uint8_t *buffer, uint32_t count) {
 FLASH_CS = 0;
 SPI1_Exchange8bit(0x03); // Read command
 SPI1_Exchange8bit((uint8_t)(addr >> 16));
 SPI1_Exchange8bit((uint8_t)(addr >> 8));
 SPI1_Exchange8bit((uint8_t)(addr));
 for (uint32_t i = 0; i < count; i++) {
 buffer[i] = SPI1_Exchange8bit(0x00);
 }
 FLASH_CS = 1;
}

Flash hafıza tüm bir sektöre (tipik olarak 4 KB) yeniden programlanmadan önce sektöri silemez. Sektör Erase komutunu (0x20) kullanarak, not defterine kayıt yaptırana kadar durumu ankete uğratın.

Gelişmiş Teknikler: Seviyeye Giyinmek, Page Management ve Firmaware Updates

Büyük miktarda veri depolamak veya sık sık sık yaz yapmak, bu stratejileri hafıza ömrünü uzatıp performans korumak için düşünün.

  • [FOROM][/FOROM][/FONT=0][FONT=0) EEPROM için Seviyeye Düzeyleme[FOROM][/FOROM][/FONT=0) – Dağcılık birden çok yerde yazıyor. Örneğin, adanmış bir EEPROM slotunda dairesel bir tampon indeksi korumak ve bir sonraki ücretsiz sayfaya veri yazmak.
  • [FONT=0]Flash Block Management[[DÜT:1) – Hangi sektörlerin silindiğini takip etmek için basit bir dosya sistemi veya metadata masası kullanın. Tipik tüketici SPI Flash cipsi 4 KB sektöre sahiptir; bir sektör on milisaniye alır.
  • [FONT:0]Firmware Over-the-Air (FOTA) Updates[DÜT:1) Updates[FONT:0) Yeni bir bilgisayar görüntüsü tutabilir. PIC bootloader görüntüyü okur, yazı sırasında güç kaybının iki yönlü bir doğrulama ile ele alınmasını sağlayın.
  • [FONT=0)Error Tespit ve Düzeltme[Dönetici: 1) kritik veriler için, uygulamac veya basit XOR checksums. Oku, doğru dürüstçe birçok dış hafıza inşa edilmedi, bu yüzden yazılım kontrolleri prudent.

En İyi Uygulamalar ve Sorun Gider

Bu yönergeleri sorunları en aza indirmek ve sağlam bir operasyon elde etmek için takip edin.

  • [FONT:0)Always Find the Datasheet[[Dönler: 1 ) – Timing parametreleri, komut setleri ve çekme özellikleri üreticiler arasında değişir.
  • [FONT=0)I2C için Proper Pull-Up Ditörleri Kullanımı[Dönetici: 1 ) - Değer, otobüs kapasitesi ve saat hızına bağlıdır. Sadece bir veya iki cihaz ve 400 kHz ile bir oscilloskop kullanın. yükselen kenarları doğrulamak için.
  • [FONT:0]İmplement Acbilgi Polling[[Dönetici] – yazardan sonra sabit gecikmeler yerine, bir ACK alınana kadar cihazı tekrar gönder.Bu değişken yaz zamanlarına adapte olur.
  • [FONT:0) SPI Traces Kısa [Dönder: 1) SPI, DFS frekanslarında çalışır; uzun teller ringe neden olur.Eksiyonlar ekleyin (22-47 ULL) PIC çıktısının dampen yansımalarına yakın.
  • [FONT:0) Dekoupling Capacitors[[Döneticiler: 1 ) – Her hafıza çipinin Vdd pin'ine mümkün olduğunca yakın.
  • [FONT=0) Bilinen Desenler ile Test[[Dönemli: 1 ) – 0x55, 0xAA, ve doğrulayın. Check adresi sınırları (e.g., writing across a page sınırı should be avoid.
  • [FONT=0]Bus Contention için ([Dönetici: 1 ) – Birden fazla SPI cihazı MISO'yu paylaşıyorsa, sadece bir çip seçmenin bir seferde aktif olmasını sağlayın.For I2C, adres çatışmalarını sağlama.
  • [FONT:0)Handle Write Protection) – Birçok hatıranın bir WP pin'i var. ya da GPIO aracılığıyla yazma veya kontrol edebilmeniz için düşük bir çek.

Örnek Proje: Data Logger with SPI Flash

Kavramları sağlamlaştırmak için, düzenli olarak analog bir sensör okuyan basit bir veri logger düşünün, SPI Flash'ta değer depolar (örneğin, W25Q16) ve en eski verilere dairesel bir tampon kullanır. PIC bir dönüşüm gerçekleştirir, EEPROM'da bir işaretleyiciyi sunar ve uyumak için döndürür.

Anahtar adımlar:

  1. SPI MSSP'yi ilk olarak CS pin'i çıktı olarak yapılandırın.
  2. Başlangıçta, mevcut yazı işaretini küçük bir I2C EEPROM (veya ilk Flash sektöründen okuyun).
  3. Her giriş döngüsü: ADC → Flash sayfasına yaz → arter. Eğer pointer tahsis edilen bölgeye son ulaşırsa, başlamaya sıfırlanır (circular).
  4. SRC, yolsuzluk tespit etmek için son sayfayı bilinçli olarak hesaplayın.
  5. aralığın arasında düşük güç uykusu kullanın.

Bu model birden fazla sensöre, zamantampinge ve etkinlik odaklı oturumlara genişletilebilir.

Sonuç ve Daha Fazla Kaynaklar

PIC mikrokontrollülerle dışsal EEPROM ve Flash hafızasını entegre etmek, iç hafızadan daha fazla depolama gerektiren geniş bir uygulama yelpazesini açar. Uygun arayüz (I2C veya SPI), doğru şekilde kablolayın ve sağlam okuma / rutin yazmaları uygulayın, herhangi bir gömülü sisteme güvenilir olmayan depolama ekleyebilirsiniz.

Daha fazla okuma için aşağıdaki kaynakları keşfedin:

  • [FONT=0)PIC16 (L)F18877 Aile Datasheet[Dönetici: 1) MSSP konfigürasyonunda ayrıntılar.
  • [FONT=0)Mikroçi Kod Configurator (MCC)) – oto-genetik kurulum kodu.
  • [FONT=0)Winbond W25Q32JV Datasheet[[Dönetici: 1) ortak SPI Flash komut seti.
  • [FONT=0)Mikroçi 24LC256 EEPROM Datasheet) – I2C zamanlama örnekleri.

Dikkatli tasarım ve ayrıntılı testlerle, dış hafıza, daha büyük veri setlerini, bilgisayar güncelleştirmelerini ve kalıcı yapılandırma ihtiyaçlarınızı ele almak için PIC projelerinizi sorunsuz bir şekilde ölçeklenebilir. Basit bir yaz / hazır döngü ile başlayın, mantık analizörü veya oscilloskop ile doğrulayın ve sonra karmaşık bir şekilde artacaktır.