22 Nisan 2014

ST-LINK "Core is held in reset" Hatası ve Çözümü

Yeni çalışmaya başladığım STM32F103C8T6 denetleyicileri ile bir sorun yaşadım. Chip şeklinde aldığım denetleyiciye kendim bir kart tasarlayıp baskı devresini yaptım. Discovery kartlardan bildiğimiz SWD (Serial Wire Debug) ile bu işlemcileri programlamaya başladım. Discovery üzerindeki jumperı çıkarıp SWD konnektörden kartıma aldığım bağlantılarla programlayıp sorunsuz gerçekleştirmiştim.Fakat sonradan denetleyiciye yazdığım programdaki bir sorun nedeniyle denetleyiciyi programlayamaz oldum. Keil'de Cortex-M3 cihaza ulaşılamıyor şeklinde bir hata verirken, ST-LINK UTILITY programında ise "Core is held in reset" hatası alıyordum. Hiçbir şekilde işlemciye ulaşmak mümkün değildi. Araştırdığım bazı forumlarda NRST pinini çıkardıktan sonra iletişimin gerçekleştiğini yazmışlar fakat bu bende işe yaramadı.
 İşlemciyi kurtarmak için kullandığım yöntem şu şekildeydi;
->Öncelikle işlemciyi herhangi bir program çakılmasından kurtarabilmek için void SystemInit (void) fonksiyonun ilk satırına bir miktar bekleme koymak gerekiyor. İşlemci resetlendikten sonra  SystemInit fonksiyonundan çalışmaya başlıyor. Buraya eklenilen bekleme ile programlayıcıya işlemcimize ulaşması için bir süre tanımış olacağız.
->ST-LINK programı ile bu işi halledebildim. TARGET->SETTING altından Connexion mode seçeneğini "Connect Under Reset" olarak seçtim.
->Daha sonra TARGET-> Automatic Mode yi açtım. Buradan bekleme eklenmiş kodumu seçtim. Full Chip Erase ve Flash Programming seçeneklerini işaretleyip "Start" dedim.
-> Asıl zor kısım burdan sonra başladı. Program işlemciye bağlanmak için bekliyor. Uzun süre bekledikten sonra hata veriyor."Start" dedikten sonra bağlanmaya çalışırken STM32F103'e giden enerjiyi hızlı bir şekilde kesip tekrar bağladım. Bu çok hızlı yapılmalı eğer çok hızlı yapılırsa hiçbir işe yaramıyor, çok yavaş yapılırsa da cihaz bulunamadı hatası veriyordu. Burada sabretmek gerekli işlemciye bağlandığında ST-LINK 'te bağlandığını gösterecektir.Bağlandıktan sonra da bu enerjiyi kesip-verme işlemine devam ettim.Eğer şanslıysanız 5-10 dk içinde sonuç alacaksınız. Benim işlemim saatler sürdü. Fakat bir defa Flash'ı silip yeni programı yükleyebilirseniz işlemciniz kurtuldu demektir. :)
-> Daha sonra bağlantı ayarlarını eski haline getirip normal şekilde bağlanmayı deneyebilirsiniz.


Hiç yorum yok:

Yorum Gönder