Arama butonu
Bu konudaki kullanıcılar: 2 misafir, 1 mobil kullanıcı
37
Cevap
1204
Tıklama
0
Öne Çıkarma
PICkit2 Programmer to go hafıza çiplerini SPI flash yapma
İ
geçen yıl
Yarbay
Konu Sahibi

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.

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 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.

Üye Ol Şimdi Değil



< Bu ileti mini sürüm kullanılarak atıldı >

İ
geçen yıl
Yarbay
Konu Sahibi

Ş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ış.

https://www.electronicwings.com/pic/pic18f4550-spi

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 >

< Bu ileti mini sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @rafet32
İ
geçen yıl
Yarbay
Konu Sahibi

Teşekkürler.

MPLAB IDE üzerinde C18 C Compiler'ını kullanıyorum.

Programdan aldığım hafıza kullanım görüntüsü, sağdaki data memory yazan bölüm ağzına kadar dolu şu anda.

< Resime gitmek için tıklayın >

Şu anda test etmeye hazır bir hex üretmeyi başardım.

AddrExtEE fonksiyonunda arka arkaya üç adet if kullandım. Bunun yerine switch case kullansam daha mı olurdu?

https://drive.google.com/file/d/1y9LSFFje1e4tEY6b-C0LzeERDQc587vY/view?usp=drive_link





< Bu mesaj bu kişi tarafından değiştirildi ipli jeton -- 20 Mart 2024; 11:6:28 >

< Bu ileti mini sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @rafet32
İ
geçen yıl
Yarbay
Konu Sahibi

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.

http://kair.us/projects/pickitminus/index.html

Ben Jaakko'nun yalancısıyım. PICkit™3'üm olmadığı için denemedim.





< Bu mesaj bu kişi tarafından değiştirildi ipli jeton -- 10 Mayıs 2024; 7:0:32 >

< Bu ileti mini sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @rafet32
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.