ATMEGA328p Arduino bootloader

Başlatan serter, 16 Mayıs 2019, 17:53:45

serter

İyi Günler herkese,

elimde Arduino Uno
Arduino ide 1.8.9
Atmega328P
16 MHZ kristal
22 pf kondasatör
10k direnç ve board var.

Board üzerinde atmega328p nin bağlantılarını yapıyorum.

http://codelama.com/atmega328e-arduino-bootloader-yukleme/

linkinden faydalanıyorum.  Bağlantıları 6 7 kez kontrol ettim. Bağlantılar doğru.

ide üzerindenden burn bootleader dediğim zaman bu adımı gerçekleştiremiyor.

avrdude: stk500_initialize(): (b) protocol error, expect=0x10, resp=0x01
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x10


hatasını alıyorum. Bu hata ile karşılaşan arkadaşlar var mı?

Kabil ATICI

Niye Arduino ide'si üzerinden yapmıyorsun. Hazır kodu da var.
Arduino uno üzerine Dosya menüsünden Örnekler>ArduinoISP>ArduinoISP programını yüklüyorsun. Gerekli bağlantıları yapıyorsun, bağlantılar için internete bakabilirsin, (bu arada bootloader yüklemek istediğin işlemcinin bağlı olduğu ve çalışmaya hazır olduğuna emin oluyorsun.
-Araçlar menüsünden> bilgisayara bağlı olan arduino'yu seçiyorsun(port seçimi dahil);
-Araçlar menüsünden>Programlayıcı: Arduino as ISP seçiyorsun ve seçili olduğundan emin oluyorsun;
-Araçlar menüsünden>Ön Yükleyiciyi yazdır seçiyorsun ve Arduino ide işlemini tamamlandığına bildirene kadar bekliyorsun.

Yok hala hata alıyorum diyorsan işlemciyi değiştir. Veya temas etmeyen bir kablon var.
ambar7

serter

Arduino IDE sini kullanıyorum sonuçta. Ben söylemiş olduğun adımları yapıyorum. Ön yükleyiciyi yazarken vermiş olduğum hatayı veriyor. O aşamayı geçemiyor.

mehmet

#3
Demek ki eksik veya yanlış
bir şeyler var.
@Kabil ATICI Hoca 'nın yazdıklarını
tekrar gözden geçiriniz.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

ipek

bir hafta evvel USBasp ile bootloader yüklemeye kalktım mümkün olmadı izlediğim yöntem doğru idi,sonunda eski versiyon bir arduino ide sanırım 1.65r idi kusursuzca yükledi,yeni versiyon iyi versiyon değil izlenimi kaldı bende...

serter

@ipek Hanım kesinlikle haklısınız. Yeni versiyonunda bir sıkıntı var. Eski sürümlerine aldım ben de düzeldi. Durduk yere saçma bi yerden 1 haftam gitti.

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

mehmet

#7
Atmel mcu programlayıcı programların
tamamı "avrdude" yi kullanıyor.

GUI sevdası yüzünden konsoldan
çalışamıyoruz.
Bir satırlık CLI de yazılacaklar ile
tüm işimiz anında bitecek.

http://www.nongnu.org/avrdude/user-manual/avrdude_6.html#Example-Command-Line-Invocations

Örnek:
avrdude -v -p atmega328p -c stk500v1 -P /dev/ttyACM0 -b19200 -e -u \
                                    -U flash:w:ATmegaBOOT_168_atmega328.hex \
                                    -U lock:w:0x3F:m \
                                    -U efuse:w:0xFD:m \
                                    -U hfuse:w:0xDE:m \
                                    -U lfuse:w:0xFF:m
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

volkanunal

#8
Alıntı yapılan: mehmet - 15 Temmuz 2019, 15:29:57Atmel mcu programlayıcı programların
tamamı "avrdude" yi kullanıyor.

GUI sevdası yüzünden konsoldan
çalışamıyoruz.
Bir satırlık CLI de yazılacaklar ile
tüm işimiz anında bitecek.

http://www.nongnu.org/avrdude/user-manual/avrdude_6.html#Example-Command-Line-Invocations

Örnek:
avrdude -v -p atmega328p -c stk500v1 -P /dev/ttyACM0 -b19200 -e -u \
                                    -U flash:w:ATmegaBOOT_168_atmega328.hex \
                                    -U lock:w:0x3F:m \
                                    -U efuse:w:0xFD:m \
                                    -U hfuse:w:0xDE:m \
                                    -U lfuse:w:0xFF:m


Merhabalar hocam , şu şekilde kendi bootloader programımı yazıyorum , atmel studiodan flash segment bölgesinde bulunan .text=3800 olarak ayarlıyoru memory bölgesini.

#define  F_CPU 16000000
#include <avr/boot.h>
#include <util/delay.h>
#include <avr/interrupt.h>

uint8_t prog[] = {
	
	0x0C,0x94,0x34,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,
	0x82,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,
	0x00,0x68,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,
	0x3E,0x00,0x58,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,
	0x94,0x3E,0x00,0x48,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,
	0x0C,0x94,0x3E,0x00,0x38,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,
	0x00,0x0C,0x94,0x3E,0x00,0x28,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x11,0x24,
	0x1F,0xBE,0xCF,0xEF,0xD8,0xE0,0x4C,0xDE,0xBF,0xCD,0xBF,0x0E,0x94,0x40,0x00,0x0C,
	0x94,0x56,0x00,0x0C,0x94,0x00,0x00,0xDF,0x25,0x9A,0x2D,0x9A,0x2F,0xEF,0x8F,0xE4,
	0x93,0xEC,0x21,0x50,0x80,0x40,0x90,0x40,0xD9,0xE1,0xF7,0x00,0xC0,0x00,0x00,0x2D,
	0x98,0x2F,0xEF,0x8F,0xE4,0x93,0xEC,0x21,0x50,0x82,0x80,0x40,0x90,0x40,0xE1,0xF7,
	0x00,0xC0,0x00,0x00,0xEB,0xCF,0xF8,0x94,0xFF,0xCF,0x14,
};

void boot_program_page (uint32_t page, uint8_t *buf)
{
	uint16_t i;
	uint8_t sreg;

	// Disable interrupts.

	sreg = SREG;
	cli();

	eeprom_busy_wait ();

	boot_page_erase (page);
	boot_spm_busy_wait ();      // Wait until the memory is erased.

	for (i=0; i<SPM_PAGESIZE; i+=2)
	{
		// Set up little-endian word.

		uint16_t w = *buf++;
		w += (*buf++) << 8;

		boot_page_fill (page + i, w);
	}

	boot_page_write (page);     // Store buffer in flash page.
	boot_spm_busy_wait();       // Wait until the memory is written.

	// Reenable RWW-section again. We need this if we want to jump back
	// to the application after bootloading.

	boot_rww_enable ();

	// Re-enable interrupts (if they were ever enabled).

	SREG = sreg;
}

int main(void) {
	
	
	DDRB |= 1<<5; // Configuring PB5 as Output
	PORTB |= 1<<5; // Writing HIGH to PB5
	_delay_ms(3000); // Delay of 1 Second
	PORTB &= ~(1<<5); // Writing LOW to PB5
	_delay_ms(3000); // Delay of 1 Second*/
	
	//start at flash_start = 0x0000
     boot_program_page( 0, prog);
    
	//start the actual program
	asm volatile("jmp 0x0000");
	
	

}


array içerisinde flasha yazmak istediğim programın hex kodu bulunuyor.

avrdude -c usbasp -p m328p -U flash:w:boot.hex:i -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xDF:m -U lfuse:w:0xFF


Komut satırından programlıyorum , fakat program application kısmına zıplamıyor. Hep bootloader kısmında kalıyor. Booloader kısmında arduino üzerinde bulunan 13.pine bağlı ledi yak söndür yapıyorum ve led 1 saniye aralıklarla yanıp sönüyor. Diğer yere zıplamıyor. Fuse settings kısmında bir problem mi var acaba?

Primum nil nocere

tunahanfıtlamak

@serter ben bu linkteki uygulamayı yaptım benimki çalıştı hala çalışmazsa bağlantılarda bi yanlışlık olmalı bu video size yardımcı olacaktır. (mrcl bacağını direk ardunio ya götürmek daha iyi olacaktır.)
https://www.youtube.com/watch?v=xGkDt5C0Cx8

mehmet

@volkanunal

efuse -> 0x05
hfuse -> 0xDA
lfuse -> 0xDF

şeklinde deneyiniz.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr