Arm code protection?

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

Ramiz

Merhaba,

Arm işlemcilerde kod koruma register ı varmı?(ki muhtemelen vardır), Yazdığımız kodları nasıl koruyoruz? Her model mcu için durum aynımı?(aynı familyadan olanlar için. Örneğin CortexM3)

Teşekkürler.
Electrical & Electronics Engineering -> Step one

X-Fi

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.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Ramiz

Anlaşılan bu durum markadan, modele göre değişim gösteriyor. Yukarıda paylaştığınız kodu yazılımıma gömünce, sadece yazma yapabiliyorum mcu ya? Doğrumu anlamışım? Birden fazla yazma yapabilirim?

Bu kodu initalize kısmındamı çalıştıracağım?
Electrical & Electronics Engineering -> Step one

X-Fi

#3
Alıntı yapılan: Ramiz - 25 Aralık 2013, 22:13:17
Anlaşılan bu durum markadan, modele göre değişim gösteriyor. Yukarıda paylaştığınız kodu yazılımıma gömünce, sadece yazma yapabiliyorum mcu ya? Doğrumu anlamışım? Birden fazla yazma yapabilirim?

Bu kodu initalize kısmındamı çalıştıracağım?

Doğru anlamışsınız. kodu programın herhangi bir yerinde bir kez çağırırsanız. İşlemci resetlenecek ve okuma koruması devreye alınmış olacak.

initalize kısmında çağırmanızda sakınca yok çünkü if şartı sadece koruma aktif değilse sağlanıyor.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

z

O kod calismadan koruma devreye girmiyorsa anlami yokki. O kod calisana kadar gecen sure icinde JTAG pinlerinden islemciyi ele gecirir ve okurum kodunu.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

X-Fi

Alıntı yapılan: z - 25 Aralık 2013, 22:20:31
O kod calismadan koruma devreye girmiyorsa anlami yokki. O kod calisana kadar gecen sure icinde JTAG pinlerinden islemciyi ele gecirir ve okurum kodunu.

bu işlemi yaparken üreticimisiniz kullanıcımısınız?
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

z

#6
Kullaniciyim.

Yalniz simdi farkettim. Her reset islemi ardindan o kod calisacak sandim. Meger değilmis. Sadece 1 kez calismasi yetiyorsa okuyamam tabiki...
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Ramiz

Alıntı yapılan: z - 25 Aralık 2013, 22:20:31
O kod calismadan koruma devreye girmiyorsa anlami yokki. O kod calisana kadar gecen sure icinde JTAG pinlerinden islemciyi ele gecirir ve okurum kodunu.

Bu devirde pcb kopyalamaya gerek yok.. Nereye yaptırıldığını öğreniyorsun. Telefonla arıyorsun. Ben o firmadan ayrıldım, yeni adresim şurası diyorsun. Adamların parasını veriyorsun ve onlarda seve seve yapıp, gönderiyorlar pcbleri.. Bu başıma önceden gelmişti. (Ben bununla uğraşacağıma, oturur, daha gelişmiş bir pcb tasarlardım)

E pcb ellere geçtiğine göre, sadece kod koruması kaldı.. Arm mcu da onuda koruyamıyorsak ne anladık biz yaptığımız işten? Adamın amacı zaten kopyalamak. Kartımı kopyaladı. Üzerine malzemeleri dizdi, dizdirdi. Benim cihazımdan bir adet satın aldı, Yazılımımı okudu, kendi ürettiği pcblere yükledi.. Ben üretmek için aylarca uğraştım, o çalmak için 15 dk uğraşmadı..

Nasıl koruyacağız ARM mcuların yazılımlarını?
Electrical & Electronics Engineering -> Step one

X-Fi

Alıntı yapılan: z - 25 Aralık 2013, 22:25:26
Kullaniciyim.

Yalniz simdi farkettim. Her reset islemi ardindan o kod calisacak sandim. Meger değilmis. Sadece 1 kez calismasi yetiyorsa okuymama tabiki...

o zaman çok geç çünkü üretici tarafından program atıldıktan birkaç ms sonra koruma devreye girmiş olacak.

Aynen söylediğiniz gibi olacak.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Ramiz

Alıntı yapılan: X-Fi - 25 Aralık 2013, 22:27:35
o zaman çok geç çünkü üretici tarafından program atıldıktan birkaç ms sonra koruma devreye girmiş olacak.

Aynen söylediğiniz gibi olacak.

Mcu yu ilk kez programladım. Plug and play yaptım. Kodu ilk kez işledi. Hatta azacıkta çalıştı. Enerjiyi kestim. Bir kez daha çalıştırdım bu sefer, ilk start anındada okumaya kapalı olacak? Doğrumu anlamışım?
Electrical & Electronics Engineering -> Step one

X-Fi

Alıntı yapılan: Ramiz - 25 Aralık 2013, 22:32:30
Mcu yu ilk kez programladım. Plug and play yaptım. Kodu ilk kez işledi. Hatta azacıkta çalıştı. Enerjiyi kestim. Bir kez daha çalıştırdım bu sefer, ilk start anındada okumaya kapalı olacak? Doğrumu anlamışım?

Hocam doğru anlamışsınız size tek tavsiyem daha çok katalog karıştırmanız olacak. Amacım hazır kod vermek değil yolu anlamanız için paylaştım.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Ramiz

Alıntı yapılan: X-Fi - 25 Aralık 2013, 22:37:15
Hocam doğru anlamışsınız size tek tavsiyem daha çok katalog karıştırmanız olacak. Amacım hazır kod vermek değil yolu anlamanız için paylaştım.

Merhaba, ben şuan öğrenciyim ve internetim sınırlı.. O yüzden her yere girip çıkamıyorum :) İlkbahar aylarında bir ürün tasarlamam gerekli ve şuan bilgi toplamaya çalışıyorum. Projede arm mcu kullanmak istiyorum. Stm32 ye ve pic24 serisine sıcak bakıyorum.

İşin arm kısmında stm libraryleri ile işler çok kolaylaşmış.. Ccs, mikroC gibi birşey olmuş diyebiliriz. Fakat ben halen arm cephesine avr yada pic işlemci kadar hakim değilim..

Yanıtlar için teşekkür ederim.

Ramiz
Electrical & Electronics Engineering -> Step one

kimlenbu

ARM Cortex M4 çekirdekli STM32F4 serisinde 2 kademeli kod koruması var. LEVEL 2'yi aktif ettiğinizde JTAG portu kalıcı olarak devre dışı kalıyor.

Datasheetinden alıntı :

Alıntı YapLevel 0: no read protection
When the read protection level is set to Level 0 by writing 0xAA into the read protection
option byte (RDP), all read/write operations (if no write protection is set) from/to the
Flash memory or the backup SRAM are possible in all boot configurations (Flash user
boot, debug or boot from RAM).
• Level 1: read protection enabled
It is the default read protection level after option byte erase. The read protection Level
1 is activated by writing any value (except for 0xAA and 0xCC used to set Level 0 and
Level 2, respectively) into the RDP option byte. When the read protection Level 1 is set:
– No access (read, erase, program) to Flash memory or backup SRAM can be
performed while the debug feature is connected or while booting from RAM or
system memory bootloader. A bus error is generated in case of read request.
– When booting from Flash memory, accesses (read, erase, program) to Flash
memory and backup SRAM from user code are allowed.
When Level 1 is active, programming the protection option byte (RDP) to Level 0
causes the Flash memory and the backup SRAM to be mass-erased. As a result the
user code area is cleared before the read protection is removed. The mass erase only
erases the user code area. The other option bytes including write protections remain
unchanged from before the mass-erase operation. The OTP area is not affected by
mass erase and remains unchanged. Mass erase is performed only when Level 1 is
active and Level 0 requested. When the protection level is increased (0->1, 1->2, 0->2)
there is no mass erase.
• Level 2: debug/chip read protection disabled
The read protection Level 2 is activated by writing 0xCC to the RDP option byte. When
the read protection Level 2 is set:
– All protections provided by Level 1 are active.
– Booting from RAM or system memory bootloader is no more allowed.
– JTAG, SWV (single-wire viewer), ETM, and boundary scan are disabled.
– User option bytes can no longer be changed.
– When booting from Flash memory, accesses (read, erase and program) to Flash
memory and backup SRAM from user code are allowed.
Memory read protection Level 2 is an irreversible operation. When Level 2 is activated,
the level of protection cannot be decreased to Level 0 or Level 1.
Note: The JTAG port is permanently disabled when Level 2 is active (acting as a JTAG fuse). As a
consequence, boundary scan cannot be performed. STMicroelectronics is not able to
perform analysis on defective parts on which the Level 2 protection has been set.

X-Fi

Hocam söylediğiniz özellik sadece M4'e özel değil, M3 ve M0 lardada 3 level protect bulunuyor.

http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Burak B

#14
Yerinizde olsam ne yaptığınızı bilmiyorsanız Level 2 ve üstünü aktif etmezdim. Aksi halde MCU' yu çöpe atmanız gerekebilir.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle