Tiny AVR 1 Serisi - Sistem Koruma ve Sigorta Ayarları

 TCB biriminde kullanılabilecek modların neredeyse tamamı Event (olay) sistemiyle bağlantılı. Ayrıca TCB birimi için sistem saati ayarlamaları gerekiyor. Bu bölümde öncelikli olarak sigorta ayarları değişikliği ve korumalı içeriklere değineceğim.

CCP

Yapılandırma ayarlarını içeren registerler kazara değişiklik yapılmasına karşın korumalıdır. Bu kayıtların içeriğini değiştirmek için gerekli bir kod vardır. Bu kod CPU_CCP registerine yazılmalıdır. Bu yazma sonrası korumalı içerik değişikliği yapılmalıdır. Bunun için tanımlı makro olsa da ben kullanmadım. Örnek olarak 20/16MHz iç osilatör değerini bölerek sistem saatini ayarlayan MCLKCTRLB registerini ele alalım.


"Property: Configuration Change Protection" korumalı olduğu belirtilmiş. Burada değişiklik yapmak için gereken kod:IOREG 0xD8

CPU_CCP=CCP_IOREG_gc; şeklinde CCP registerine yazıyoruz. Ardından yapmak istediğimiz değişikliği yapıyoruz.
CLKCTRL.MCLKCTRLB=CLKCTRL_PEN_bm|CLKCTRL_PDIV_48X_gc; Bu şekilde MCLKCTRLB registerinde PEN "1" yapılırken PDIV 0x0C yazılarak osilatör çıkış darbesi 48 e bölündü. Böylece 416666Hz sistem saati ayarlandı.

Sigorta Ayarları

Bu seride 20/16MHz bir osilatör bulunuyor. 20 veya 16 MHz seçimini ve başka diğer ayarlamaları sigorta (fuse) ayarlarıyla yapıyoruz. Bunu yapmanın birkaç değişik yolu var. Ben 3217 Curiosity Nano üstünde bulunan debugger ile Microchip Studio da Tools, Device Programming aracılığıyla ayarlayabiliyorum. Attiny1614 için bu şansım yok ama onu da ayarlamak için bir yol var. Elf dosyası ile de yapılabiliyormuş ama benim tercihim AVRDude gibi Pymcuprog kullanmaktan yana oldu. 

Pymcuprog komut istemi ile çalıştırılıp istediğiniz işlemi yapmanıza olanak verir. Komut istemi içinde yazacağınız komutları IDE içinde external tools oluşturup yazabilirsiniz ama buna gerek yok. Buradan tüm komutlara ve örneklere ulaşabilirsiniz. Serinin ilk konusunda bahsettiğim USB çevirici ve UPDI bağlantısı yapıldıktan sonra ilk olarak windows başlata  "cmd" yazarak komut istemini çalıştıralım. "pymcuprog" yazıp enter bastığınızda bir şey olmuyorsa ya pymcuprogun olduğu dizine gidin ya da ortam değişkenlerine python ekleyin. Bunun için Denetim masası, Sistem, Gelişmiş sistem ayarları ile açılan pencereden Ortam değişkenleri Path içine: "C:\Users\haluk\AppData\Local\Programs\Python\Python311" "C:\Users\haluk\AppData\Local\Programs\Python\Python311\Scripts" ekleyin.

Komut isteminde pymcuprog ile bu şekilde bir çıktı görmelisiniz.


>> pymcuprog ping -t uart yazdığımızda bağlanmalıdır. Ardından bağlı port ve MCU ismiyle tekrar komut girip doğru bağlantıdan emin olalım. 
>> pymcuprog ping -t uart -u com11 -d attiny1614 yazdığımızda çıktı bu şekilde olmalı:

Debugger olmadan Attiny 1614 e bağlandık. Mevcut sigorta ayarlarını okutalım.
>> pymcuprog read -t uart -u com11 -d attiny1614 -m fuses

Attiny1614 sigorta değerleri bu şekildedir. Bu değerler fabrika çıkışı değerler değil. BOOTEND registerindeki değerleri değiştirdim. LOCKBIT ve öncek reserved değerini okuma sonucunda getirmiyor. Bu değerlerin yazılı olduğu registerler:

Bu registerlerin sırası önemli aksi halde yanlış yazmak mümkün. Özellikle SYSCFG0 çok tehlikelidir. Burada UPDI/Reset pin seçeneğini değiştirirseniz tekrar programlama şansınız kalmaz. Böyle bir durumda yüksek voltaj programlayıcıya ihtiyacınız olacaktır.

OSCCFG registeri iç osilatörün frekansını belirler. Çalışma gerilimini değiştirerek bunu yapıyormuş. Datashette sanki bu seçenek yokmuş gibi yazılmış. Kalibrasyon için tek seçenek belirtilmiş.

Mega4809 serisinde farklı görünüyor ve 20/16 seçeneği gösterilmiş.
Attiny1614 veya 3217 de bu seçenek görünmese de var ve kullanılıyor. Çıkış pinin aktif ederek kontrol ettim. Şimdi ilgili registeri değiştirerek 20MHz yerine 16MHz de çalıştırmak için ayarlayalım. Bunun için pymcuprog da iki seçenek var. İstersek sadece iligi registeri değiştirmek veya tüm sigorta registerlerini değiştirmek.
>> pymcuprog write -t uart -u com11 -d attiny1614 -m fuses -l 0x00 0x00 0x01 0xFF 0x00 0xF6 0xFF 0x00 0x00
yazarsak hepsi değiştirilir.
>> pymcuprog write -t uart -u com11 -d attiny1614 -m fuses -o 2 -l 0x01 yazarsak sadece OSCCFG değiştirilir. "-o" ofset komutudur. ilk değer "0" ikinci değer "1" şeklinde gider.

Değeri yazıp tekrar okuma yaptırdım ve daha önce 0x02 olan OSCCFG artık 0x01 oldu. 16MHz ile çalışmaya başladı. 
Sonraki konuda tekrar TCB ve Event sistem kullanımına bakacağım. Bu saat değişikliği TCB de kullanmak için gerekli ama şart değil.







Hiç yorum yok:

Yorum Gönder