STM32F103C8 Flash ile ilgili korumalar hakkında

Başlatan z, 19 Haziran 2014, 14:55:36

z

ST-LINK Utility ile korumaları kurcalarken şu konular dikkatimi çekti.

1. Durum Çipi sildim ve ardından Read Protection yaptım.

Ardından Keil'de bir hex dosyasını flasha atmayı denedim. Keil beceremedi hata verdi.

2. Durum Çipe bir kod attım, ardından bazı segmentleri write protection yaptım. Read protection aktif değil.

Write protection yapmadığım segmentlere Keil'den hex yazabildim.

3. Durum Çipin bazı segmentlerine kod adıp bu segmentlere write protection uyguladım. Ardından Read protection yaptım.

Bu şartlardaki çipin boş segmentlerine daha sonra hex atamadım. (1. maddenin aynısı)

----------------------------------------------------------

Bu durumda;

1. Durum için

Çip yazma koruması aktif olmadığına göre;

Çip Read protection yapıldıysa JTAG yasaklı hale geliyor diyebilirmiyiz?
Bu durumda JTAG yada SWD portundan çipe kod yazamıyacağım demektir.

Peki bu şartlarda, çipin üzerindeki ST nin orjinal bootloaderı ile yazma koruması yapılmamış herhangi bir segmente kod atılabilirmi?

-------------------------------------

Bir çipin içine program atıp read protectionı aktif ettim.

Ardından read protextionı kaldırdığımda ST-LINK Utility çipi sildi.

Bunun üzerine çipe program yükleyip read protectionı aktif ettim.

Read protectionu kaldırdım çip silinirken çipin elektriğini kestim.

ST-link hata verdi. Çipe elektriği verip tekrar ST-Link Utilityi çalıştırdığımda çipin gene silinmiş olduğunu gördüm.

Bu deneyle çipin çok az bir kısmı silinmişken geri kalan verileri okumak olasımıdır?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Müh. müh.

F103C8 için konuşmayacağım ama,

Genel olarak Stm lerde flash ile ilgili birkaç register olamsı lazım. Protect lerinde birkaç level ı olması lazım.

Mesela, protect in en yüksek koruma modunda, chip i bir kere programladıktan sonra, artık yazmak ve okumak mümkün hale gelmiyor.

reference manuel inde açıklayıcı satırlar olması gerkeli.

Eğer sadece chip içersindeki kodu koruyacaksanız, sadece read protection ı aktif edin(onunda birkaç modu olması gerekli) Chip e yazılımı ilk yüklediğinizde, o koruma yapan FLASH->XXX; kodu mcu bir kere işledikten sonra, artık flashını okumaya kapatacaktır. Yalnız write lara izin verecektir.
Destiny of white is dirtied. Destiny of black is found guilty...

X-Fi

Alıntı yapılan: z - 19 Haziran 2014, 14:55:36
Bu deneyle çipin çok az bir kısmı silinmişken geri kalan verileri okumak olasımıdır?

Hocam böyle bir durum söz konusu değil önce çip siliniyor sonra read protect level_0 yapılıyor. Silme işlemi yarım kalırsa level protect sabit kalır.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

AsHeS

@X-Fi  3.levele alınmış read ve write protection ı olan çipin içine tekrar program atabiliyor muyuz ? Senaryosu nasıl gerçekleşiyor.

X-Fi

#4
Alıntı yapılan: AsHeS - 19 Haziran 2014, 15:48:21
@X-Fi  3.levele alınmış read ve write protection ı olan çipin içine tekrar program atabiliyor muyuz ? Senaryosu nasıl gerçekleşiyor.

Hocam level seviyeleri şöyle

Level_0;   Koruma yok herşey aktif.
Level_1;   Çipdeki kod okunamaz ancak üzerine yeni yazılım yüklenebilir. SWD,JTAG, Boot0 pinleri ve DFU Aktif. Dahili bootloaderlar yardımıyla veya ST-link debugger cihazı yardımıyla korumayı kaldırma imkanı var.
Level_2;   Kod okuma ya da üzerine yazma kapalıdır ve bu durum artık değiştirilemez. SWD,JTAG erişimi birdaha kullanılamaz.Debug yapılamaz. Ayrıca 0x1FFF0000 adresinden başlayan yerleşik bootloader yazılımı silinir. Buda artık DFU ve usart bootloader çalışmayacak anlamına gelir.

Ancak level_2 için benim kullandığım şöyle bir durum var. Flash yazma erişimi işlemi içerdeki kod tarafından sağlanabilir. İşlemciye bootloaderlı bir yazılım yapar yüklerseniz kendi interfacesiniz üzerinden programı alıp yükleyip koşturabiliyorsunuz.

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

AsHeS

Alıntı yapılan: X-Fi - 19 Haziran 2014, 16:06:32
Hocam level seviyeleri şöyle

Level_0;   Koruma yok herşey aktif.
Level_1;   Çipdeki kod okunamaz ancak üzerine yeni yazılım yüklenebilir. SWD,JTAG, Boot0 pinleri ve DFU Aktif. Dahili bootloaderlar yardımıyla veya ST-link debugger cihazı yardımıyla korumayı kaldırma imkanı var.
Level_2;   Kod okuma ya da üzerine yazma kapalıdır ve bu durum artık değiştirilemez. SWD,JTAG erişimi birdaha kullanılamaz.Debug yapılamaz. Ayrıca 0x1FFF0000 adresinden başlayan yerleşik bootloader yazılımı silinir. Buda artık DFU ve usart bootloader çalışmayacak anlamına gelir.

Ancak level_2 için benim kullandığım şöyle bir durum var. Flash yazma erişimi işlemi içerdeki kod tarafından sağlanabilir. İşlemciye bootloaderlı bir yazılım yapar yüklerseniz kendi interfacesiniz üzerinden programı alıp yükleyip koşturabiliyorsunuz.



Yani 0 ve 1. seviyede koruma yok aslında.

z

STM32F103C8 de koruma sınıflandırması farklı diye hatırlıyorum. STM32F407 de kesin faklı onu biliyorum. (L serisi de farklı)

Komple çipe okuma koruması getirilebiliyor. Bu durumda JTAG devre dışı kalıyor. Bir de bölgesel yazma koruması var.

DFU modunda korumalar kaldırılıyor mu eminmisiniz? Daha doğrusu korumalar kaldırılıp çip okunabilir hale dönüşüyormu?

-----------------------------------------------------

Çipin reset rutininde ilk işim JTAG portununun tüm pinlerini input yada output yapmak olsun.

Bu JTAG portundan bağlanmaya engel olurmu?


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

X-Fi

#7
Hocam Level_1 kodu korur ama çipi ve kartı korumaz yani yeni bir kod yüklemeye izin verir. Aynı durumda DFU modu sizden korumayı kaldırmanızı ister kaldırdığınız an önce flashı siler.

Jtag ve swd için pin konumları önemli değil "Connect After reset" seçeneğiyle bu engellemeyi aşabiliyorsunuz.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

z

Anlaşmamız zor olacak gibi. Daha doğrusu ben karıştırıyorum.

- Çipin 1. sektörüne kod yerleştirdim.  Tüm çipin sadece 1. sektörünü  yazma koruması ile korudum.
- Çipin 2. sektörüne kod yerleştirdim.  2. sektörü yazma koruması ile korumadım.
- Çipe okuma koruması koydum.

Bu şartlarda herhangi bir yöntemle (JTAG, DFU vs);

Çipimin 1. sektörüne dokunmadan 2. sektörünü silip üstüne kod yazabilirmisiniz?
Çipimin 1. sektörüne dokunmadan boş olan 3. sektörüne kod yazabilirmisiniz?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

AsHeS

Alıntı yapılan: X-Fi - 19 Haziran 2014, 16:22:17
Hocam Level_1 kodu korur ama çipi ve kartı korumaz yani yeni bir kod yüklemeye izin verir. Aynı durumda DFU modu sizden korumayı kaldırmanızı ister kaldırdığınız an önce flashı siler.

Jtag ve swd için pin konumları önemli değil "Connect After reset" seçeneğiyle bu engellemeyi aşabiliyorsunuz.
Level 1 için şöyle bir senaryodan mı bahsediyorsun;
Reset vektöründe tüm flashı okuyup dışarıya atan bir kod koyduk çipi tamamen silmeden kodun yaklaşık %90'ını dışarı alındı.

Çipi ve kartı diye bahsettiğin yanlış kod atılıp çipi bozmak mı ?

X-Fi

Alıntı yapılan: z - 19 Haziran 2014, 16:43:39
Anlaşmamız zor olacak gibi. Daha doğrusu ben karıştırıyorum.

- Çipin 1. sektörüne kod yerleştirdim.  Tüm çipin sadece 1. sektörünü  yazma koruması ile korudum.
- Çipin 2. sektörüne kod yerleştirdim.  2. sektörü yazma koruması ile korumadım.
- Çipe okuma koruması koydum.

Bu şartlarda herhangi bir yöntemle (JTAG, DFU vs);

Çipimin 1. sektörüne dokunmadan 2. sektörünü silip üstüne kod yazabilirmisiniz?
Çipimin 1. sektörüne dokunmadan boş olan 3. sektörüne kod yazabilirmisiniz?



Hocam eğerki çipi Level_1 seviyesine kurarsanız çipin korumasını kaldırmak istediğinizde veyahut herhangi biryerine kod yüklemek istediğinizde tüm çip silinir sonra istediğiniz bölgeye eğer yazma koruması yok ise kod yazabilirsiniz.

Alıntı yapılan: AsHeS - 19 Haziran 2014, 16:45:20
Level 1 için şöyle bir senaryodan mı bahsediyorsun;
Reset vektöründe tüm flashı okuyup dışarıya atan bir kod koyduk çipi tamamen silmeden kodun yaklaşık %90'ını dışarı alındı.

Çipi ve kartı diye bahsettiğin yanlış kod atılıp çipi bozmak mı ?

Hocam çipi korumaktan kastım şudur yazılımı yaptınız yüklediniz varsayıyorum ki bu aletleri kurcalamayı seven biri sizin yazılımınızı silebilir veya sizin rakibiniz olan bir firma tarafından yazılımınız değiştirilebilir.

Kartı korumak deyişimin sebebinide aynı aslında bol donanımlı gelişmiş bir kart yaptınız başkalarıda alıp aynı kartın yazılımını değiştirip çizği izleyen robot yapmasına bir nebze engel olabilmektir. Amaç birazda prestiji korumak.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Müh. müh.

Adamın içinde varsa, kart üzerindeki F103 ü söker, yenisini lehimler. İstediği gibide çizgi izleyen robot yapar.

Bence write protection yapılmamalı. İçersindeki koşan yazılımın versiyonunu yükseltmek isteseniz, mcu değiştirip, üzerindeki sağlam mcu yu çöpe atacaksınız..
Destiny of white is dirtied. Destiny of black is found guilty...

X-Fi

Burda şu düşünülmesi lazım sizin için çip mi değerli yoksa korumasız kartınızın kobay olarak kullanılması mı.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Müh. müh.

x-fi

Konuyu kaydırıyoruz ama,

Düşün ki, çalıştığın firma tarafından xx cihazı ürettildi, ve bu cihazdan ilk ay içersinde 500.000 adet satıldı. İlk ay sonunda, kullanıcılar öyle bir bug buldu ki, cihazların yazılımları güncellenmesi gerekti. Al işte sana +500.000 mcu + kargo parası. Hatta, müşterilerin yarısından çoğu, ürünün yenisi ile değiştirilmesini ister. (Sıfır ürüne konmak ister)

Eğer böyle bir durum oluşursa, yapılan işin bir anlamı kalmaz.


Kartın kobay olarak kullanılması meselesine gelince,

Bence reklamın iyisi kötüsü olmaz. Apple gibi firmaların bile bazı kartlarını kobay olarak kullanıyor insanlar. Ayrıca, basit mcu değişimi ile kart kobaylaşıyorsa, yazılımı yazmaya kapatıp, yukarıda bahsettiğim riski almak bence çok mantıksız.

Ben böyle düşünüyorum.

Destiny of white is dirtied. Destiny of black is found guilty...