Arm code protection?

Başlatan Ramiz, 25 Aralık 2013, 21:34:38

muhittin_kaplan

Alıntı yapılan: CLR - 29 Aralık 2013, 13:24:08
ST 'nin "flash loader demo" programını kullanabilirsin, %100 emin olmamakla birlikte St-link veya j-link ile ulaşama probemi şöyle olabilir,
eğer jtag pinlerini kullanmak için(IO yapmak için) remap registerine yazmışsan, belki bu debuggerlar ile ulaşamıyabilirsin bu durumda dahili bootlader işi çözmesi gerekir, programda bu pinlerdeki remap'i öncelik olarak jtag yaparsan sorunun kalkabilir.
konunun bununla alaksi yok

CLR

Senin için alakası olmayabilir, işine yarayacak arkadaşlar için söylüyeyim, sana tavsiye ettikten sonra aklıma takıldı şimdi denedim gerçektende remap yapınca j-link stm32'yi tanıyamadı, 10-15 kez denedim, sonrasında bootloader ile remap'i geri aldım çalıştı,
Knowledge and Experience are Power

X-Fi

Alıntı yapılan: CLR - 29 Aralık 2013, 14:29:41
Senin için alakası olmayabilir, işine yarayacak arkadaşlar için söylüyeyim, sana tavsiye ettikten sonra aklıma takıldı şimdi denedim gerçektende remap yapınca j-link stm32'yi tanıyamadı, 10-15 kez denedim, sonrasında bootloader ile remap'i geri aldım çalıştı,

Yanlış bilgi.

St-link -> settings -> connect under reset seçerseniz pin tanımlaması yapsanız dahi erişim sağlar. Çünkü önce resetliyor.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

CLR

St-link'i bilmem, j-link'te denediğim için yazdım
Knowledge and Experience are Power

X-Fi

Alıntı yapılan: CLR - 29 Aralık 2013, 16:00:53
St-link'i bilmem, j-link'te denediğim için yazdım

Hocam bende Powarm tools kullanıyorum sorun yok...

Keil -> Debug -> Connect ->  Under Reset.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

muhittin_kaplan

Tanimlama yapsaniz dahi resette tutar vaziyette connect dedikten sonra restten kurtarirsanda baglaniyor

CLR

Denememiş olsam haklısınız ama reset before connect kısmında, hard reset, normal reset, connect under reset tümünü denemiştim zaten,

Bu durumla karşılaşan insanlarda var, Segger'in cevabı çözmemiş aşağıda linkte, scop ile incelemedim belki j-link'te bir bug vardır hard reset yapamıyordur, sadece keil değil j-flash arm içinde de işlemciyi tanımıyor.

http://forum.segger.com/index.php?page=Thread&threadID=509

Bu durumu bootloader ile çözdüm, 

isterseniz deneyin, eklediğim satır aşağıda, sadece ST lib'e göre değişmeniz gerekiyor,

AfioRegs->mapr.bits.SWJ_CFG=4;
Knowledge and Experience are Power

X-Fi

Söylediğiniz kodu yarın deneyeceğim. Reseter halledilemeyen kalıcı bir sorun olabilir karşılaştığınız.

Benim genelde karşılaştığım durum şu code protect açık iken j-link ram adreslerini okuyamadığı için erişemiyor. Ekranında kod koruması olduğu bilgisii veriyor. J-link ile çalışmak için önce st-link baglayıp korumayı kaldırıyorum tabi içindeki kod siliniyor daha sonra j-link çalışıyor.

İşlemci üzerinde kalıcı değisiklikler yaparsanız st-link gerekebilir. Sizde buna benzer bir sorun yaşadınız anladığım kadarıyla.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

CLR

normalde kalıcı durum değil çünkü hem soft reset hemde hard reset çalışıyor, remap yapmadan tüm fonksiyonları ok, resetle dediğimde j-link resetliyor, fakat remap yapınca sanki işlemciyi resetmeden programlaya geçiyormuş gibi bir durum var.
Knowledge and Experience are Power

Burak B

Alıntı yapılan: X-Fi - 29 Aralık 2013, 17:41:05
Söylediğiniz kodu yarın deneyeceğim. Reseter halledilemeyen kalıcı bir sorun olabilir karşılaştığınız.

Benim genelde karşılaştığım durum şu code protect açık iken j-link ram adreslerini okuyamadığı için erişemiyor. Ekranında kod koruması olduğu bilgisii veriyor. J-link ile çalışmak için önce st-link baglayıp korumayı kaldırıyorum tabi içindeki kod siliniyor daha sonra j-link çalışıyor.

İşlemci üzerinde kalıcı değisiklikler yaparsanız st-link gerekebilir. Sizde buna benzer bir sorun yaşadınız anladığım kadarıyla.


İki tool ile uğraşma Seggerin JLinkSTM32 toolu var onu kullanıp unlock edebilirsin. En son STM32F2xx ler için bir sorun vardı unlock yaparken. Onu giderdiler şu andaki DLL sürümü v4.80. Firmware derleme tarihide 25 Kasım 2013.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

tekosis

#40
Alıntı yapılan: X-Fi - 25 Aralık 2013, 22:02:41
Stm32 M3 serisi için söylüyorum options byte isimli bir register var. Kendi bloğumda bu konuyla ilgili bir başlık açmıştım. OB registera stdlibrary desteği de bulunuyor bitleri değiştirerek kod içerisinden read veya write protect yapabiliyorsunuz. Tek dez avantajı bu registerı değiştirdiğinizde işlemci resetleniyor. Bir kere ayarlayıp ayarlıysa dokunamanız gerekiyor aşağıdaki kod buna bir örnek. M4 serisinde de böyle bir dez avantaj varmı bilmiyorum farklılık gösterebilir. Bunun haricinde ST-link programı ile de bağlantı sağlayıp bu ayarları değiştirebiliyorsunuz.

#if READ_PROTECT  == 1
	 if (OB->RDP != (uint32_t)(((uint32_t)((uint32_t)((uint8_t)~(OB_RDP_Level_1)) << 16)) | ((uint32_t)OB_RDP_Level_1)))
   { 		
			FLASH_OB_Unlock (); 
  	    FLASH_OB_RDPConfig(OB_RDP_Level_1);
			FLASH_OB_Launch();		
			FLASH_OB_Lock (); 
	 }			 
#endif	 


Ek bir bilgi daha vermek lazım stm32 serilerinde RPD_Level_2 yi aktif ederseniz geri dönüşü olmayan bir yola girmiş olursunuz. Dikkatli kullanın.

hocam son söylediğiniz notta geri dönüşü olmaz demişsiniz. bu hiçbir zaman okuyamayacağımız anlamına mı gelir ki benim için mesele olmaz zaten bootloader kullanıyorum. başka problemler de olabilir mi?
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

X-Fi

Evet hiçbir yol ile okuyamaz ve debug yapamazsınız. Sadece program atılabilir. Sistem bootloaderları da silinir.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

tekosis

hocam sistem bootloaderi dediğiniz program yüklemede kullanılan bootloader mi oluyor? eğer bu şekilde ise ben cihaza ikinci defa yükleme yapabilmek için bir programlayıcı mı almam gerekir?
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

tekosis

hocam bu kodu anlayamadım manıtığını biraz anlatmanız mümkün mü?
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

X-Fi

#44
Evet bootloader silinir program atmak için bir debugger almanız gerekir.

İşlemcinin bootloader ve debug işlemlerini gerşekleştirdiği program kodları 0x1FFFFxxx adresinde tutar. RPD_Level_2 aktif edilince bu flash adresleri silinir. Bu yüzden programın okunması, debug yapılması mümkün olmaz sadece SWD veya JTAG portu ile üzerine program yükleyebilirsiniz.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)