keil debug ile jtag debug?

Başlatan fryrmnd, 23 Ağustos 2011, 14:28:45

fryrmnd

Merhaba arkadaşlar. Biraz arm bakayım dedim bir kit aldım.İşte keil yükledim. Barış hocanın kitaptan biraz baktım. Bu debug işlemini anlatmış. Ben yeni bir jtag kart ısmarladım. Şimdi bu ikisinin farkı, jtagda denetleyiciye yüklenen programı test etmesi mi? Bayadır bakınıyorum ama tam işin içine giremediğim için sanırım anlayamadım. Bu jtag olayıda şimdiden takıldı işte kafama sormadan edemedim.

Burak B

JTAG yazdığınız kodu fiziksel olarak adım adım işleterek kullandığınız MCU'nun yaptığı işlemleri incelemenize ve varsa hataları ayıklamanıza yardımcı olur. Ayrıca MCU' nuzun tüm pinlerini kontrol etme şansıda sunar. Bunları fiziksel anlamda yapar. Yani bir GPIO etkin hale getirildiğinde; o pin gerçektede etkin hale gelir. KEIL debug yaptığınızda ise (yani JTAG olmadan. Buna simulasyon diyoruz.) KEIL MCU'nuzu simule ederek olması gereken durumları size aktarmaya çalışır.  Doğal olarak fiziksel dünyada bunun bir yansımasını görmezsiniz. Çünkü bu işlem yazılımsal bir ortamda gerçekleşir. Ayrıca JTAG ile yapılabilecekler sadece bunlarla sınırlı da değildir. JTAG güzel ve kullanışlı bir standart diyebiliriz.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

fryrmnd

Hocam cevabınız için teşekkürler. O zaman denetleyici ile eepromdan veri okuduğumuzu farzedelim. Jtag eeprom görevi üstlenip eepromdan geleceğini farzettiğimiz verinin durumuna göre denetleyicinin pinlerini aynı duruma mı sokacak.Veya o durumda görünmesini mi sağlayacak

Burak B

Hayır, yanlış anlamışsın. Bak diyelim MCU ile EEPROM dan veri okuyorsun. Kodunu yazdın herşey yolunda ama kodu cihaza yükleyince bir türlü çalışmıyor ki JTAG ayrıca bu iş içinde kullanılıyor yani yazdığın kodu MCU ya yüklemek için. Bu ayrı bi konu tabi. Neden çalışmadığını anlayabilmek için JTAG bağlı kartı debug etmeye başlıyorsun. Bu işlem başlayınca KEIL yazdığın kodu ,MCU'nun GPIO, Register setleri ve hafıza durumunu v.s. sana gösteriyor. Attığın herbir adımda o anda üzerinde bulunduğun kod satırının ne işlem yaptığını ve bunun MCU üzerinde ve doğal olarak geliştirme kiti üzerinde ve MCUya bağlı birim varsa bundaki etkisini görüyorsun. Böylece örnekteki EEPROM eğer I2C kullanıyorsa onuda izleyebilrisin. Bu bize ne gibi bir fayda sağlamış oluyor. En basitinden eğer unuttuğumuz bir /CE pini v.s. yada kodun bir yerinde kurduğumuz döngü fazla dönüp taşmaya neden oluyorsa bunu adım adım izlememize olanak sağlıyor.

Şimdi ben sana başımdan geçen bir olayı anlatayım donanımsal anlamda  JTAG ile neler yapabileceğine dair fikrin olsun.

Birgün, bir arkadaşım bana bir receiver getirdi. Firmware güncellemesi yaparken hata yapmışlar. Sonuç, receiver ölmüş. Buna nasıl orjinal firmware atarız dedi arkadaş. Bunu yapabilmek için ya nand flashi sökeceksin bir programlayıcıda yazdıracaksın yada cihazın JTAG portu varsa bulup bağlanacaksın ve öyle yazdıracaksın. İlk seçenekten vazgeçtik. Çünkü o kılıf için programlayıcı bulmak zor ve pahalı bir iş. Bunun  üzerine ben cihazın JTAG portunu tespit ettim. Sonra bu JTAG Portunun hangi işlemci türü için olduğunu tespit etmek adına cihazın işlemcisini araştırdım. Bu araştırma beni IBM Power PC 400 (Yani MIPS) için olduğu sonucuna götürdü. Böylece JTAG portunun Pin bağlantılarının hangileri olduğunu bulup jtag bağlantımı kurabilecek bilgiye sahip oldum. Bağlantıyı kurdum. Bir JTAG programı ile işlemci ile haberleşmeyi denedim ve program benden bir BSDL dosyası istedi. Bu dosyayı zaten işlemci hakkında araştırma yaparken ve ilerde lazım olacağını bildiğimden temin etmiştim. Programa bu dosyayı gösterdim. Program çalışmaya başladı ve İşlemcinin tüm pinleri işlemci kılıfına uygun şekilde karşımda ve canlı olarak duruyordu. Yani receiver çalışırken işlemcinin pinlerindeki sinyalleri izleyip değiştirebiliyordum. Bir Logic Analizör gibi düşün. Baya bir yol kaydettik dedim. Şimdi bu işlemcinin Flash bellek ile olan bağlantısını ortaya çıkarmam gerekli. Hemen aklıma ilk gelen yöntem olan şema veya servis dökümanı arayışına gittim. Bu eksik olsada beni bir sonuca ulaştırdı. Ancak elde ettiğim şemalar ile elimdeki cihaz birebir değildi ve uymayan bağlantılar vardı hatta elimdeki cihazdaki flash bellek ile şemadakinin adres bağlantıları tersti. Demekki elimdeki revizyon görmüş yada klon bir cihazdı. Bunun üzerine ikinci yönteme başvurdum. Zaten işlemcinin tüm pinlerini görebiliyordum ve pinlere müdahale edeibliyordum. Flash belleğin datasheeti üzerinden flash için gerekli pinleri not aldıktan sonra. Elime ölçü aletimi alıp gerekli pinleri program üzerinden 1 ve 0 yaparak işlemci ile flash bellek arasındaki tüm bağlantıyı ortaya çıkardım. Böylece ihtiyacım olan tüm bilgiye ulaşmış oldum. Bu bilgiyi kullanarak diğer bir program ile flas içerisine gerekli firmware i JTAG üzerinden yazdırarak cihazı kurtardım.

Bu donaımsal olarak JTAG ile yapabileceklerine bir örnek. Yazılım açısından buna en iyi örnek yine ilk bahsettiğim adım adım işletme özelliği v.s. dir.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

fryrmnd

Biraz daha oturdu hocam. Teşekkürler. İyice içine dalmak gerekiyor galiba.