İlginç... Bootloader ile ikinci program (ilkini silmeden) yüklenemez mi?

Başlatan XX_CİHAN_XX, 26 Kasım 2012, 12:23:12

XX_CİHAN_XX

STM32 lerde donanımsal (yada yazılımsal) bootloader ile ilk programı yüklüyorum güzel çalışıyor sorun yok.
Bu programın üstüne ilkini silmeden ikinci bir programı yüklediğimde ise ikinci yüklediğim çalışmıyor.

Sebebi çipin içine yazılan hexleri incelediğimde anlaşıldı. Şöyle ki; ilk yüklediğim ile ikinci yüklediğim sanki AND işleminden geçerek çipe yazılmış olduğunu görüyorum.
Çipi her seferinde önce silip sonra bootloader ile program atmam gerekiyor.
Çip boşken için FF dolu olduğu için ilk yüklenen kodlar ile FF AND olduğunda kodlar bozulmadan çipe yazılıyor.
Ancak ikinci yüklemede bu kez çipin içinde FF değil ilk yüklediğim kodlar var ve bu nedenle ikinci hex dataları birinci hex dataları ile AND olarak çipe yazılıyor ve haliyle içeriği bozuluyor.

Bu durum donanımsal bootloader da da yazılımsal bootloader da da oluyor. Her seferinde çipi silmeden direk üstüne yazma yapamaz mıyım?
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Klein

Flash romlar eepromlar gibi değil. Flashta eğer bir bitin değeri 1 ise, onu ancak 0 yapabilirsiniz. Ama 0 ise, 1 yapamazsınız. Bunun için ya o flash bölgesini silip ,yeniden yükleyeceksiniz,(Sadece içeriği değişen sayfayı silmek yeter)
Ya da flash üzerinde başka bir bölgeye yükleyip tüm adres tablosunu , vektörleri vs.. güncelleyeceksiniz.



XX_CİHAN_XX

Anladım hocam bootloader o işi kendi yapar diye düşünüyordum ama yapmıyormuş.
Kendim böyle bir silme kodu eklemek zorunda kaldım bu şekilde sorun çözüldü.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Klein

kullandığımız flasher programlarının , önce sil, sadece etkilenen kısımları yükle vs.. gibi seçnekleri var. Siz ne ile yüklediniz?

XX_CİHAN_XX

Hocam benim olay farklı biraz.
Şimdi Flash programları ile yapabiliyorum ancak ben donanımsal değil yazılımsal bootloader üzerinde çalışıyorum.
Dolayısıyla Sector Erase işlemini yazılımsal yapmak durumundayım.
Bootloader programım Sector0-Sector2 arasında çalışıyor ve uygulama programını Sector3 ten itibaren Flash a yazıyor.
Yani benim Sector3 ten sonrasını silmem gerekiyordu aksi halde ikinci kez yazma yapamıyordum.
Bootloader kodları çalışmaya başlamadan önce aşağıdaki kodları ekledim sorunum düzeldi.
FLASH_If_Init();
			FLASH_If_Erase(0x0800C000);
			FLASH_If_Erase(0x08010000);
			FLASH_If_Erase(0x08020000);
			FLASH_If_Erase(0x08040000);
			FLASH_If_Erase(0x08060000);
			FLASH_If_Erase(0x08080000);
			FLASH_If_Erase(0x080A0000);
			FLASH_If_Erase(0x080C0000);
			FLASH_If_Erase(0x080E0000);
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.