İçindekiler:

MTP Arduino Programlama Örneği: 5 Adım
MTP Arduino Programlama Örneği: 5 Adım

Video: MTP Arduino Programlama Örneği: 5 Adım

Video: MTP Arduino Programlama Örneği: 5 Adım
Video: Ağ Sistemleri ve Anahtarlama Dersi - Multi-Layer Switch - 1 Canlı Yayın Kaydı 2024, Kasım
Anonim
MTP Arduino Programlama Örneği
MTP Arduino Programlama Örneği

Bu Eğitilebilir Tabloda, bir Dialog SLG46824/6 GreenPAK ™ Çok Zamanlı Programlanabilir (MTP) cihazını programlamak için SLG46824/6 Arduino programlama taslağının nasıl kullanılacağını gösteriyoruz.

GreenPAK cihazlarının çoğu Tek Seferlik Programlanabilirdir (OTP), yani Geçici Olmayan Bellek bankası (NVM) yazıldığında, üzerine yazılamaz. SLG46824 ve SLG46826 gibi MTP özelliğine sahip GreenPAK'lar, birden çok kez programlanabilen farklı türde bir NVM bellek bankasına sahiptir.

Kullanıcının birkaç basit seri monitör komutuyla bir MTP GreenPAK programlamasını sağlayan bir Arduino taslağı yazdık. Bu Eğitilebilir Tabloda, MTP'li GreenPAK'ımız olarak bir SLG46826 kullanıyoruz.

C/C++ tabanlı açık kaynaklı bir platform kullanarak Arduino Uno için örnek kod sağlıyoruz. Tasarımcılar, kendi özel platformları için Arduino kodunda kullanılan teknikleri tahmin etmelidir.

I2C sinyal özellikleri, I2C adresleme ve bellek alanları ile ilgili özel bilgiler için lütfen SLG46826 ürün sayfasında sağlanan GreenPAK Sistem İçi Programlama Kılavuzuna başvurun. Bu Eğitilebilir Tablo, bu programlama kılavuzunun basit bir uygulamasını sağlar.

GreenPAK çipinin nasıl programlandığını anlamak için gereken adımları aşağıda açıkladık. Ancak, sadece programlamanın sonucunu almak istiyorsanız, halihazırda tamamlanmış GreenPAK Tasarım Dosyasını görüntülemek için GreenPAK yazılımını indirin. GreenPAK Geliştirme Kitini bilgisayarınıza takın ve özel IC'yi oluşturmak için programa basın.

Adım 1: Arduino-GreenPAK Bağlantıları

Arduino-GreenPAK Bağlantıları
Arduino-GreenPAK Bağlantıları
Arduino-GreenPAK Bağlantıları
Arduino-GreenPAK Bağlantıları

SLG46826 GreenPAK'ımızın NVM'sini Arduino taslağımızla programlamak için önce GreenPAK'ımıza dört Arduino Uno pinini bağlamamız gerekecek. Bu pinleri doğrudan GreenPAK Soket Adaptörüne veya GreenPAK lehimliyken bir devre kartına bağlayabilirsiniz.

Lütfen harici I2C yukarı çekme dirençlerinin Şekil 1'de gösterilmediğini unutmayın. Lütfen hem SCL hem de SDA'dan Arduino'nun 3.3 V çıkışına 4,7 kΩ çekme direnci bağlayın.

Adım 2: GreenPAK NVM Verilerini GreenPAK Tasarım Dosyasından Dışa Aktarma

GreenPAK NVM Verilerini GreenPAK Tasarım Dosyasından Dışa Aktarma
GreenPAK NVM Verilerini GreenPAK Tasarım Dosyasından Dışa Aktarma
GreenPAK NVM Verilerini GreenPAK Tasarım Dosyasından Dışa Aktarma
GreenPAK NVM Verilerini GreenPAK Tasarım Dosyasından Dışa Aktarma
GreenPAK NVM Verilerini GreenPAK Tasarım Dosyasından Dışa Aktarma
GreenPAK NVM Verilerini GreenPAK Tasarım Dosyasından Dışa Aktarma

NVM verilerinin nasıl dışa aktarılacağını göstermek için çok basit bir GreenPAK tasarımını bir araya getireceğiz. Aşağıdaki tasarım, soldaki mavi pinlerin VDD'ye (3.3v), sağdaki sarı pinlerin ise VDD2'ye (1.8v) bağlı olduğu basit bir seviye değiştiricidir.

Bu tasarımdan bilgileri dışa aktarmak için, Şekil 3'te gösterildiği gibi Dosya → Dışa Aktar → NVM'yi Dışa Aktar'ı seçmeniz gerekir.

Daha sonra dosya türü olarak Intel HEX Dosyalarını (*.hex) seçmeniz ve dosyayı kaydetmeniz gerekecektir.

Şimdi,.hex dosyasını bir metin düzenleyiciyle (Notepad++ gibi) açmanız gerekecek. Intel'in HEX dosya formatı ve sözdizimi hakkında daha fazla bilgi edinmek için Wikipedia sayfasına bakın. Bu uygulama için, yalnızca Şekil 5'te gösterildiği gibi dosyanın veri kısmıyla ilgileniyoruz.

HEX dosyasında bulunan 256 baytlık NVM yapılandırma verilerini vurgulayın ve kopyalayın. Kopyaladığımız her satır 32 karakter uzunluğunda ve bu da 16 bayta karşılık geliyor.

Bilgileri, Şekil 6'da gösterildiği gibi Arduino taslağının vurgulanan nvmString bölümüne yapıştırın. Arduino dışı bir Mikrodenetleyici kullanıyorsanız, GreenPAK. GP6 dosyasına kaydedilen nvmData'yı ayrıştırmak için bir işlev yazabilirsiniz. (Bir GreenPAK dosyasını bir metin düzenleyiciyle açarsanız, proje bilgilerini kolayca erişilebilir bir XML biçiminde depoladığımızı görürsünüz.)

GreenPAK tasarımınız için EEPROM verilerini ayarlamak için, bileşenler panelinden EEPROM bloğunu seçin, özellikler panelini açın ve "Veri Ayarla"yı tıklayın.

Artık GUI arayüzümüzle EEPROM'daki her bir baytı ayrı ayrı düzenleyebilirsiniz.

EEPROM verileriniz ayarlandıktan sonra, NVM verilerini dışa aktarmak için daha önce açıklanan yöntemi kullanarak bunları bir HEX dosyasına aktarabilirsiniz. Bu 256 bayt EEPROM verisini Arduino taslağının eepromString bölümüne ekleyin.

Her özel tasarım için proje ayarlarının “Güvenlik” sekmesinden koruma ayarlarının kontrol edilmesi önemlidir. Bu sekme, matris yapılandırma kayıtları, NVM ve EEPROM için koruma bitlerini yapılandırır. Belirli konfigürasyonlar altında, NVM dizisinin yüklenmesi, SLG46824/6'yı mevcut konfigürasyonuna kilitleyebilir ve çipin MTP işlevselliğini kaldırabilir.

Adım 3: Arduino Sketch'i kullanın

Arduino Sketch'i kullanın
Arduino Sketch'i kullanın

Krokiyi Arduino'nuza yükleyin ve 115200 baud hızı ile seri monitörü açın. Artık birkaç komutu gerçekleştirmek için çizimin MENÜ istemlerini kullanabilirsiniz:

● Oku - belirtilen bağımlı adresi kullanarak cihazın NVM verilerini veya EEPROM verilerini okur

● Sil - belirtilen bağımlı adresi kullanarak cihazın NVM verilerini veya EEPROM verilerini siler

● Yaz - Belirtilen bağımlı adresi kullanarak aygıtın NVM verilerini veya EEPROM verilerini siler ve ardından yazar. Bu komut, nvmString veya eepromString dizilerine kaydedilen verileri yazar.

● Ping - I2C veriyoluna bağlı cihaz bağımlı adreslerinin bir listesini döndürür

Bu komutların sonuçları, seri monitör konsoluna yazdırılacaktır.

4. Adım: Programlama İpuçları ve En İyi Uygulamalar

SLG46824/6'yı destekleme süreci boyunca, NVM adres alanına silme ve yazmayla ilgili yaygın tuzaklardan kaçınmaya yardımcı olacak birkaç programlama ipucunu belgeledik. Aşağıdaki alt bölümler bu konuyu daha ayrıntılı olarak özetlemektedir.

1. Kesin 16 Bayt NVM Sayfa Yazma İşlemlerini Yürütme:

SLG46824/6'nın NVM'sine veri yazarken kaçınılması gereken üç teknik vardır:

● Sayfa 16 bayttan az yazıyor

● Sayfa 16 bayttan fazla yazıyor

● Bir sayfadaki ilk kayıttan başlamayan sayfa yazma işlemleri (IE: 0x10, 0x20, vb.)

Yukarıdaki tekniklerden herhangi biri kullanılırsa, NVM'nin yanlış bilgilerle yüklenmesini önlemek için MTP arayüzü I2C yazısını dikkate almaz. Doğru veri aktarımını doğrulamak için yazdıktan sonra NVM adres alanının I2C okumasını gerçekleştirmenizi öneririz.

2. NVM Verilerini Matris Yapılandırma Kayıtlarına Aktarma

NVM yazıldığında, matris konfigürasyon kayıtları yeni yazılan NVM verileriyle otomatik olarak yeniden yüklenmez. Aktarım, PAK VDD döndürülerek veya I2C kullanılarak bir yazılım sıfırlaması oluşturularak manuel olarak başlatılmalıdır. 0xC8 adresinde register ayarlandığında, cihaz Power-On Reset (POR) dizisini yeniden etkinleştirir ve register verilerini NVM'den registerlara yeniden yükler.

3. Bir NVM Silmesinden Sonra I2C Adresini Sıfırlama:

NVM silindiğinde, I2C bağımlı adresini içeren NVM adresi 0000'a ayarlanacaktır. Silme işleminden sonra, çip, cihaz yukarıda açıklandığı gibi sıfırlanana kadar konfigürasyon kayıtları içinde mevcut bağımlı adresini koruyacaktır. Çip sıfırlandıktan sonra, GreenPAK her açıldığında veya sıfırlandığında, yapılandırma kayıtları içinde I2C bağımlı adresi 0xCA adresinde ayarlanmalıdır. Bu, NVM'de yeni I2C bağımlı adres sayfası yazılana kadar yapılmalıdır.

Adım 5: Hata Tartışması

Hata Tartışması
Hata Tartışması

"Sayfa Silme Baytı"na (Adres: 0xE3) yazarken, SLG46824/6, I2C komutunun "Veri" bölümünden sonra I2C uyumlu olmayan bir ACK üretir. Bu davranış, I2C yöneticisinin uygulanmasına bağlı olarak bir NACK olarak yorumlanabilir.

Bu davranışa uyum sağlamak için, Şekil 11'de gösterilen kodu yorumlayarak Arduino programlayıcısını değiştirdik. Bu kod bölümü, deleteChip() işlevindeki her I2C komutunun sonunda bir I2C ACK olup olmadığını kontrol eder. Bu işlev, NVM ve EEPROM sayfalarını silmek için kullanılır. Kodun bu bölümü bir For döngüsünde bulunduğundan, “return -1;” satırı, MCU'nun işlevden zamanından önce çıkmasına neden olur.

Bir NACK'in varlığına rağmen, NVM ve EEPROM silme işlevleri düzgün bir şekilde yürütülecektir. Bu davranışın ayrıntılı açıklaması için lütfen Dialog'un web sitesindeki SLG46824/6 hata belgesinde (Revizyon XC) "Sorun 2: NVM ve EEPROM Sayfa Silme Baytı için I2C Uyumlu Olmayan ACK Davranışı"na başvurun.

Çözüm

Bu Eğitilebilir Tabloda, özel NVM ve EEPROM dizelerini bir GreenPAK IC'ye yüklemek için sağlanan Arduino programlayıcısını kullanma sürecini açıklıyoruz. Arduino Sketch'deki kod tamamen yorumlanmıştır, ancak taslakla ilgili herhangi bir sorunuz varsa, lütfen Saha Uygulama Mühendislerimizden biriyle iletişime geçin veya sorunuzu forumumuza gönderin. MTP programlama kayıtları ve prosedürleri hakkında daha ayrıntılı bilgi için lütfen Dialog'un Sistem İçi Programlama Kılavuzuna başvurun.

Önerilen: