Merhaba. PICkit v.2.61 yazılımının kaynak kodlarını incelerken gizli kalmış bir özelliği keşfettim. Programmer to Go özelliği SPI flash çiplerini de destekliyormuş. PC tarafındaki yazılım 32Mbit(4MB)'e kadar destek veriyormuş. Ama microchip bu noktada benden bu kadar Firmware kısmını da siz halledin deyip öyle bırakmış.
Programmer to Go'nun EEPROm arayüzü şu şekilde çalışıyor. Firmware kodlarını inceleyerek çalışma mantığını ortaya çıkardım.
void PK2GoInit fonksiyonu EEPROM'u hazır hale getiriyor. Gerekli ön hazırlıkları yapıyor. void Wr64ToExtEE fonksiyonu her seferinde 64B'lık veri bloklarını EEPROM'a yazıyor. void Rd64FromExtEE fonksiyonu her seferinde 64B'lık veri bloklarını EEPROM'dan okuyor. void AddrExtEE fonksiyonu okunacak/yazılacak adres bilgisini EEPROM'a gönderiyor.
Bu üç fonksiyon doğrudan EEPROM ile iletişim sağlıyor. Geri kalan fonksiyonların EEPROM ile doğrudan bir haberleşmesi yok.
Okuma yazma işlemleri genel olarak şöyle işliyor. PC yazılımının gönderdiği veriyi void WrByteExtEE(unsigned char byteval) fonksiyonu 64Byte'lık bir tampon alanda biriktiriyor. Tampon dolduğunda Wr64ToExtEE fonksiyonu çağırarak biriken verinin EEPROM'a yazılması sağlıyor.
EEPROM'dan okuma yapılacağı zaman void Rd64FromExtEE fonksiyonu ile okunmuş olan 64B'lık veri bloğu unsigned char RdByteExtEE(void) çağrılarak okunuyor. Tampon alan boş ise void Rd64FromExtEE çağrılarak EEPROM'dan veri okuması yapılıyor.
Cleaned diye char tipinde bir değişken atadım. Cleaned = 0, çip kirli; ;D Cleaned = 1, çip temiz, veri yazılabilir.
Değişkenin başlangıçtaki varsayılan değeri 0 olacak. Wr64ToExtEE fonksiyonu çalıştığında ilk başta bunu kontrol edecek. Çip kirli ise önce bir temizleyecek. Çip temiz ise doğrudan yazmaya geçecek. Bu sayede her seferinde çipi silmesini engelleyeceğim.
Şu pointer olayına bir bakayım. Teşekkürler. İnterneti kurcalarken bu sayfayı buldum. Çok işime yarayacak bilgiler var. Hem de Mplab (x olmayan düz mplab) üzerinden anlatılmış.
Güncel derleyiciler bu tip çevresel okuma yazma işlemleri için dahili fonksiyonlara sahip. SPI_write() diyorsun gönderiyor, SPI_read() oku diyorsun alıyor. Bayrağıyla, tampon taştı taşmadı vs. ile uğraşmıyorsun. Bu sayede gereksiz teferruatlarla uğraşmadan asıl işine odaklanabiliyorsun.
Pickit2 kodlarının yazılmış olduğu Mplab ide derleyicisi bunlardan yoksun. Mecbur her şeyi elle yapıyoruz. Mesela Pickit3'ün yazılmış olduğu mplab X SPI ve İ2C için dahili fonksiyonlara sahip. Bu nedenle kodları daha sade.
< Bu mesaj bu kişi tarafından değiştirildi ipli jeton -- 18 Mart 2024; 22:15:18 >
Jaka PICkit™3'te seri port özelliği eklemiş. PICkit™2'deki gibi yazılımsal değil, harbi harbi donanımsal seri port eklemiş.UART moduna girildiğinde PIC24'ün seri port(UART) çıkışını ICSP port çıkışına yönlendirerek bunu yapmış. Bir deneyebilirsin.
PIC24FJ256GB106'da PPS özelliği var. Bir pindeki işlevi başka bir pine taşıyabiliyorsun. Programmer to Go özelliği standalone programda da çalışıyor diyor. Adam yapıyor.
Programmer to Go'nun EEPROm arayüzü şu şekilde çalışıyor. Firmware kodlarını inceleyerek çalışma mantığını ortaya çıkardım.
void PK2GoInit fonksiyonu EEPROM'u hazır hale getiriyor. Gerekli ön hazırlıkları yapıyor.
void Wr64ToExtEE fonksiyonu her seferinde 64B'lık veri bloklarını EEPROM'a yazıyor.
void Rd64FromExtEE fonksiyonu her seferinde 64B'lık veri bloklarını EEPROM'dan okuyor.
void AddrExtEE fonksiyonu okunacak/yazılacak adres bilgisini EEPROM'a gönderiyor.
Bu üç fonksiyon doğrudan EEPROM ile iletişim sağlıyor. Geri kalan fonksiyonların EEPROM ile doğrudan bir haberleşmesi yok.
Okuma yazma işlemleri genel olarak şöyle işliyor. PC yazılımının gönderdiği veriyi void WrByteExtEE(unsigned char byteval) fonksiyonu 64Byte'lık bir tampon alanda biriktiriyor. Tampon dolduğunda Wr64ToExtEE fonksiyonu çağırarak biriken verinin EEPROM'a yazılması sağlıyor.
EEPROM'dan okuma yapılacağı zaman void Rd64FromExtEE fonksiyonu ile okunmuş olan 64B'lık veri bloğu unsigned char RdByteExtEE(void) çağrılarak okunuyor. Tampon alan boş ise void Rd64FromExtEE çağrılarak EEPROM'dan veri okuması yapılıyor.
Cleaned diye char tipinde bir değişken atadım.
Cleaned = 0, çip kirli; ;D
Cleaned = 1, çip temiz, veri yazılabilir.
Değişkenin başlangıçtaki varsayılan değeri 0 olacak. Wr64ToExtEE fonksiyonu çalıştığında ilk başta bunu kontrol edecek. Çip kirli ise önce bir temizleyecek. Çip temiz ise doğrudan yazmaya geçecek. Bu sayede her seferinde çipi silmesini engelleyeceğim.
Bir de siz kontrol edebilir misiniz? Kusuru eksiği falan var mı?
pk_prog2go.c dosyası
https://disk.yandex.com.tr/showcaptcha?cc=1&mt=179A0246E16A97CAFA2204B012E5C956DB403561153364F4EA3923C371D481DA60D35171D5B79BDFFBF8F4BD3E2132D3EACD3AD8C0168D5E666F7C7BBFC2C921D049FDCB5B79949CD001253FC9A4BBD767509D5926A85D3A2B4505E80DBAC7F2FA39929865C53FA1CF59371F9912C873903EB4D8B42C2BC86AE9C1037F98C67C791C0212F284A27DAC12FA68FA41454B95920C6694CA195F8007E7877B1BA7F72A44BAE882DF05B8CC21F33A893ADB23AC9F74306C87638A77B933546E5AAFB5CA2C114348305571E5DFA7D04011EF7E28E90B6D3C6981C2DBA3944188C1&retpath=aHR0cHM6Ly9kaXNrLnlhbmRleC5jb20udHIvZC9ua085dmsta0xyMGt0dz8%2C_1fe43b5bbb264a0734646dc63c9f294f&t=2/1710591619/978481396ef88e0e261839291a3a14c5&u=486806fc-ac832aa9-12b92f72-52b67bcf&s=165e6866275ec6c72b777ac3e6506c39
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu ileti mini sürüm kullanılarak atıldı >