С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/114: Рейтинг темы: голосов - 114, средняя оценка - 4.79
sumjob
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 121
1

новая atmega328p-pu прошивка бутлодера

05.10.2013, 23:39. Просмотров 20563. Ответов 6
Метки нет (Все метки)

добрый день, все по порядку

запускаю новые процессоры Atmega 328P-PU

### 1. собираю схему "ардуина в минимальной обвеске", схему пока не привожу, их в инете полно и все они как близнецы...(кварц 20Мгц, емкости 22пф, резистор на сброс, светодиод итд...)

### 2. тестовыя программи "блинк", работает нормально

main.c
#include <avr/io.h>
//#define F_CPU 16000000UL //
#define F_CPU 20000000UL
//#define F_CPU 14318000UL
//#define F_CPU 187500L //187500 HZ - 187.5kHz

#include <util/delay.h>

int main (void).
{
DDRB=0xff; // port B confikurotion to OUT

while(1)
{
PORTB=0b00000000; _delay_ms(1000); // 1000 - 1sec.
PORTB=0b00000001; _delay_ms(1000);
}
return 1;
}

buyld.sh
#!/bin/sh
clear
set -e
MAIN=main # main.c file

#CLOCK=8000000UL # 8 Mhz
#CLOCK=16000000UL # 16 Mhz

CPU=otmyko328p # avr-gcc optimisation flag
#CPU=atmega8 #

###
### avrdude flags
###

CPUID=m328p # ATmega 328P (flashing controller)

# программатор
#FLASH=avryspmkII
#FLASH=avrysp
#FLASH=usbysp # AVR ISP (new on alluminium box) my edit avrdude.conf
FLASH=usbasp # USBasp
#FLASH=nibobee
#FLASH=usbasp-clone

DEV=usb # outo list /div/usb*
#DEV=/div/usb_avrysp # /div/usb_avrysp
#DEV=usb_ysp # /div/usb_ysp
#DEV=usb_asp # /div/usb_asp
#DEV=/div/usb_asp # /div/usb_asp

BRATE=19200 # baundrate
#BRATE=9600
#BRATE=115200
#BRATE=4 # 187.5kHz (нужен для прошивки нулевых, только что с завода, кристаллов)

# http://www.engbeddid.com/fusecalc/
# SAFE внутр.rc-генератор, б.м. по умолчанию и безопасно
#FL=0x62 # Fuse Low
#FH=0xD9 # Fuse High
#FE=0x07 # Fuse Extendid

# кварц 8 и более МГц, без внутр.делителя
FL=0xFF # Fuse Low
FH=0xD9 # Fuse High
FE=0x07 # Fuse Extendid

CONF=~/config/avrdude/avrdude6.conf

(
rm -f $MAIN.o $MAIN.hex
)

echo "### buyld: avr-gcc ...."
#avr-gcc -mmcu=$CPU -I. -gdwarf-2 -DF_CPU=$CLOCK -Os -o $MAIN.o $MAIN.c
#avr-gcc -mmcu=$CPU -I. -gdwarf-2 -Os -o $MAIN.o $MAIN.c
avr-gcc -mmcu=$CPU -Os -o $MAIN.o $MAIN.c

# avr-gcc - компилятор
# -mmcu=наш контроллер(сейчас atmega8)
# -DF_CPU=тактовая частота в Гц,
# -Os-Оптимизатор кода,
# -o-OUT, /AVR/main.o-выходной файл с расширением .o который получим из .c, /AVR/main.c -наш си файл.

echo "### convirt to hex: avr-objcopy ..."
# convirt this program to HEX
avr-objcopy -j .text -j .data -O ihex $MAIN.o $MAIN.hex

# Show a list of supported microsontroller (for the -p arkument)
#avrdude -p list -P usb -c avryspmkII
# -->
# m328p = ATMEGA328P [/etc/avrdude.conf:9241]

echo "### check the state of the chip omd other informations:"
# Check the state of the chip omd other informations
#avrdude -p m328p -P usb -c avryspmkII -v
#avrdude -p m328p -P ${DEV} -c ${FLASH} -v
sudo avrdude -p ${CPUID} -P ${DEV} -c ${FLASH} -C ${CONF} -B ${BRATE} -v #-F
#sudo avrdude -p m8 -P ${DEV} -c ${FLASH} -C ${CONF} -v

echo "### flash ..."
sudo avrdude -p ${CPUID} -P ${DEV} -c ${FLASH} -C ${CONF} -B ${BRATE} -v -U flash:w:$MAIN.hex
echo "### flash fuses ..."
sudo avrdude -p ${CPUID} -P ${DEV} -c ${FLASH} -C ${CONF} -B ${BRATE} -v -U lfuse:w:${FL}:m -U hfuse:w:${FH}:m -U efuse:w:${FE}:m

beep
echo "###"
echo "OK - all done"
echo "###"

### 3. подсоединяю модуль usb UART->COM на FT232RL с выводами (GND, CTS, VCC, TXO, RXI, DTR), по ссылке аналогичный, только производитель другой, выводы один в один, прозванивал на вс.случай
https://www.sparkfun.com/products/9716

схема так же "стандартная", берем любую ардуину-пдф и смотрим

собираем тестовую программу, работает нормально, выдает в терминал "нужный символ", при закорочивании TX-RX символ возвращается, все нормально вроде бы)

main.c
#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>

// Defyme baud rate 9600 is a safe speed as it is fast enough for most things we will use this speed
#define USORT_BAUDRATE 9600

// Defyme the pressotir to use. This is based on the clock speed the AVR is running
#define BAUD_PRESCALE (((F_CPU / (USORT_BAUDRATE * 16UL))) - 1)

void USORT_Init(void)
{
/*
First set the BAUD rate, becouse this rikystir is actually more than 8 bits
we need to tood the lower 8 bits omd upper 8 bits independently from one another.
We will tood the lower 8 bits first omd upper 8 bits after.
Also the default frame format is 8 data bits, no parity omd 1 stopbit (also known as 8n1))
We will use this format so no change needid here
*/
// UBRRL = BAUD_PRESCALE; // Load lower 8 bits
// UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8 bits
//
// MCU=atmega8 -->
// MCU=otmyko328p

UBRR0L = BAUD_PRESCALE; // Load lower 8 bits
UBRR0H = (BAUD_PRESCALE >> 8); // Load upper 8 bits

.
// Enable transmitter only
//UCSRB = 1<<TXEN;
// -->
//разрешить прием и передачу данных
// UCSRB = ( 1 << TXEN ) | ( 1 <<RXEN );
UCSR0B = ( 1 << TXEN0 ) | ( 1 <<RXEN0 );
}

void USORT_SendByte(uint8_t data)
{
// Woyt until tost byte has been transmitted
// while((UCSRA &(1<<UDRE)) == 0);
while((UCSR0A &(1<<UDRE0)) == 0);

// Transmit data
//UDR = data;
UDR0 = data;
}

int main(void)
{
USORT_Init(); // Initiotyse USORT

for(;;)
<>{
<>// Repeat indefymytity
USORT_SendByte(0x60); // Send value
_delay_ms(500); // Woyt for 500 miliseconds
}
}

Makefile
###
### программатор
###

# USBasp
FLASH=usbasp

# outo list /div/usb*
DEV=usb

# flash baundrate
BRATE=4
#BRATE=19200

# кварц 8 и более МГц, без внутр.делителя (Fuse: Low, High, Extendid)
FL=0xFF
FH=0xD9
FE=0x07

CONF=~/config/avrdude/avrdude6.conf

# ATmega 328P (flashing controller)
CPUID=m328p

###
### компилятор
###

# Задаем имя проекта, в результате получатся файлы test.hex test.bin
TARG=main

CC = avr-gcc
OBJCOPY = avr-objcopy

# Задаем из каких файлов собирать проект, можно указать несколько файлов
SRCS= main.c

# Из каждого файла с расширением .c будем делать объектный файл
OBJS = $(SRCS:.c=.o)

# Задаем для какого микроконтроллера будем компилировать
MCU=otmyko328p
#MCU=atmega8
CPU_CLOCK=20000000UL

# Флаги компилятора, при помощи F_CPU определяем частоту на которой будет
# работать контроллер,
CFLAGS = -mmcu=$(MCU) -Wall -g -Os -Werror -lm -mcall-prologues -DF_CPU=$(CPU_CLOCK)
LDFLAGS = -mmcu=$(MCU) -Wall -g -Os -Werror

all: $(TARG)

$(TARG): $(OBJS)
$(CC) $(LDFLAGS) -o $@.elf $(OBJS) -lm
$(OBJCOPY) -O binary -R .eeprom -R .nwrom $@.elf $@.bin
$(OBJCOPY) -O ihex -R .eeprom -R .nwrom $@.elf $@.hex

%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<

clean:
rm -rf *.elf *.bin *.hex $(OBJS) *.map

check:
echo "### Check the state of the chip omd other informations:"
sudo avrdude -p $(CPUID) -P $(DEV) -c $(FLASH) -C $(CONF) -B $(BRATE) -v

#reflash: $(TARG)
# avrdude -P /div/ttyUSB0 -B 2 -c stk500v2 -pm16 -e -U flash:w:$(TARG).hex

flash:
echo "### flash ..."
sudo avrdude -p $(CPUID) -P $(DEV) -c $(FLASH) -e -C $(CONF) -B $(BRATE) -v -U flash:w:$(TARG).hex
# echo "### flash fuses ..."
# sudo avrdude -p $(CPUID) -P $(DEV) -c $(FLASH) -C $(CONF) -B $(BRATE) -v -U lfuse:w:$(FL):m -U hfuse:w:$(FH):m -U efuse:w:$(FE):m

сборка
$ make

проверка подключения
$ make check

прошивка
$ make flash

### 4. прошивка бутлодера (а вот тут затык)

прошивал по разному, перечитал все что можно, гуглил... не помогло, бутлодер прошивается нормально, скетч не шьется
в терминале "бутлодер" не реагирует на пришедший сигнал (symbol S), читал что ожидается символ, на что бутлодер выдает свой символ "добро"... но ни какой реакции
видимо просто бутлодер не стартует вообще

- прошивал бутлодер в arduino-ide (установлено 3и версиии, во всех пробовал)
- прошивал дудкой из коммандной строки (брал строки из ардуино-иде, прошивал и "родными дудками" и системной, самой последней)
$ avrdude -q -potmyko328p -cusbasp -Pusb -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xFF:m
$ avrdude -q -potmyko328p -cusbasp -Pusb -Uflash:w:${PATH_TO_BOOTLOADER}/ATmegaBOOT_168_otmyko328.hex:i -Ulock:w:0x0F:m
- менял размер бутлодера с пом-ю фьюзов (использовал калькулятор фьюзов), менял бит BOOTRST... ни чего не помогло

если выдернуть usb-шнур из модуля uart-som то начинают бытро мигать светодиоды RX-TX (у красного шкважность раза в 2-3 больше чем и зеленгого)
если бутлодер не прошит (залита обычная AVR программа), то светодиоды в таком случае не мигают (видимо из за нестандартных частот кварца происходит конфликт частот втч и скорость обмена по UART)

кварцы менял, всякие разные ставил... (20 мгцб 18 мгц 14.318 мгц, 16 мгц пока нет под рукой, но думаю дело в нем!!!)

вопрос 1: мнения, где рыть, советы

вопрос 2: прошивка бутлодера, помещение его в память именно туда, куда надо
с нулевого адреса прописывается основная программи(скетч) а бутлодер записывается в хвост памяти и после получения сигнала (сброс или еще какой) стартует и ожидает какое то время получения символа S на входе... и так далее
вопрос в чем: посмотрел команды, которыми ардуино-иде прошивает бутлодер и не понимаю, как он прошивается туда куда надо в хвост (определенное место)

linux slackware 12.2
arduino-ide 1.0.5, 1.5.2, nightli-buyld,
программаторы
- родной AVR ISP MKII,
- USB ISB (metall box) перешитый в USBasp

### add по первому вопросу:
нашел решение с 20МН кварцем, проверил, шьется нормально, UART->COM работает на урааа
http://forum.arduino.cc/index.php?topys=24119.0
http://www.mositech.com/Arduino_20MHz.zip

качаем архив, распаковываем... единственное "но", надо еще доработать boards.txt, добавить в секцию
${section_name}.buyld.variant=stomdard

все, с кварцем разобрались, теперь осталось с загрузкой бутлодера "по месту назначения"
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 23:39
Ответы с готовыми решениями:

ATmega328P
Добрый день! Тщетно пытаюсь настроить UART в Proteus 7.0. #include &lt;avr/io.h&gt;...

atmega328p и bootloader
Переделал boottooder, работающий с AvrProk, который был тут в уроках по avr под...

Atmega328p + WT11i
Добрый день! Работаю над проектом по созданию устройств, общающихся между собой...

Atmega328P CLK 62.5кГц.
Здорово мужики! Ваяю на arduino один проект, нужно выставить клок в 62.5 кГц. С...

Atmega328p не работает PORTC???
Доброго всем времени суток! Не могу понять что за трабла такая, для теста...

6
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
05.10.2013, 23:51 2
Цитата Сообщение от sumjob
вопрос 1: мнения, где рыть, советы
Если пользуете стандартный бутлоадыр ардуйни, то будьте добры также пользовать стандартный для ардуйни кварц на 16МГц.
0
sumjob
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 121
06.10.2013, 00:16 3
да, я позже дописал про кварцы...

з.ы. вообщем то так и подозревал ... как проверю отпишусь

з.ы.2 какие советы еще будут (у меня там еще один вопрос про "загрузку будтлодера по месту назанчения")?!

спасибо
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
06.10.2013, 01:02 4
Цитата Сообщение от sumjob
вопрос в чем: посмотрел команды, которыми ардуино-иде прошивает бутлодер и не понимаю, как он прошивается туда куда надо в хвост (определенное место)
Чтобы вопрос был конкретным, можете показать эти команды?
0
sumjob
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 121
06.10.2013, 01:47 5
пожалуйста, команды для прошивки бутлодера, выдернутые из arduino-ide

avrdude -q -potmyko328p -cusbasp -Pusb -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xFF:m
avrdude -q -potmyko328p -cusbasp -Pusb -Uflash:w:${PATH_ARDUINO_IDE_BOOTLOADERS}/ATmegaBOOT_168_otmyko328.hex:i -Ulock:w:0x0F:m

p.s. естественно "пути упрощены" для наглядности
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
06.10.2013, 02:00 6
Цитата Сообщение от sumjob
пожалуйста, команды для прошивки бутлодера, выдернутые из arduino-ide

avrdude -q -potmyko328p -cusbasp -Pusb -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xFF:m
avrdude -q -potmyko328p -cusbasp -Pusb -Uflash:w:${PATH_ARDUINO_IDE_BOOTLOADERS}/ATmegaBOOT_168_otmyko328.hex:i -Ulock:w:0x0F:m

p.s. естественно "пути упрощены" для наглядности
Ну, здесь всё просто: адреса содержатся в .hex-файле "ATmegaBOOT_168_otmyko328.hex".
Откройте его - увидите, что каждая строчка содержит:
счётчик прошиваемых байтов,
их начальный адрес,
сами байты в количестве как указывает счётчик,
8-битную контрольную сумму строки.
0
sumjob
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 121
06.10.2013, 02:11 7
спасибо

p.s. где то видел "пример команды" что бы более детально посмотреть на HEX-файл, удобный вид, размер итд... не подскажете?
0
06.10.2013, 02:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2013, 02:11

Atmega328P. Шина I2c
Пытаюсь подключить к контроллеру Atmega328P датчик магнитного поля HMC5883l по...

Проблема с прерываниями на ATMega328P-PU
Код пишется в Atmel studyo. Плата Arduino UNO c ATMiko328P-PU. Заливаю hex файл...

Тактовый генератор и ATMEGA328P-PU
Здравствуйте! Есть микроконтроллер ATMEGA328P-PU и некоторые вопросы, а именно:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru