Протокол AVR109

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Протокол AVR109

Сообщение Gurvinok »

Здрасе!
Кто-нибудь в курсе где можно нарыть нормальную доку для реализации данного протокола. AVR109: Self Programming не предлагать. Там про протокол всего четыре строчки и таблица команд. Мне нужен сам алгоритм что и за чем пихать загрузчику.
Я не волшебник, я только лечусь
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Протокол AVR109

Сообщение BOB51 »

Это по "самопрограммированию" что-ли вопрос?
:roll:
Так там надоть даташиты внимательно вычитывать.
8)
Реклама
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Re: Протокол AVR109

Сообщение Gurvinok »

Именно, по самопрограммированию.
Вот тока гидэ эти датащит их богу душу мать искать. Нашел два, но там только одно, мол AVRProg и все проблемы решены. А мне нужно свою написать программулину. Загрузчик я уж допилил и он работает, осталось только объяснить как ему по RS-485 общаться, а вот AVRProg c RS-485 не дружит. Вот мне и нужно знать какие команды в какое время пихать загрузчику.
Я не волшебник, я только лечусь
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Протокол AVR109

Сообщение BOB51 »

Эти данные вычитываются в даташите на конкретный МК.
В соответствующем разделе Self-Programming the Flash.
Описываются все касающиеся команды SPM на данном МК особенности.
А даташиты лежат у атмела на сайте.
8)
А вот чего касательно самодельного загрузчика... То тут уж "простор для творчества" - ищите протокол к программе, а не к железу.
Или свою прожку под ПК писать надо (на чем умеючи).
:wink:
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Re: Протокол AVR109

Сообщение Gurvinok »

Именно. Загрузчик работает прекрасно с AVRProg. Мне как раз нужен алгоритм от AVRProg, а для ПК написать это уже дело десятое. Было бы чего.
Я не волшебник, я только лечусь
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Протокол AVR109

Сообщение uk8amk »

Очень странно.
Как минимум к 109-му документу идёт архив с исходником, в main.c расписаны принимаемые команды и отсылаемые данные.
Далее есть док 911:
http://microsin.net/programming/AVR/avr911-avrosp.html
Там идёт архив с исходниками загрузчика на ++. Видно какие команды отсылаются и что ожидается.
То что нет красивой картинки в виде блок-схемы или чего аналогичного - это конечно недостаток. Но разве это нас остановит?
Реклама
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Re: Протокол AVR109

Сообщение Gurvinok »

В том то и дело что команды известны, но вот незадача, какая последовательность их передачи. Например из мануала это не работает.

The sequence for programming is as follows:
AVRprog :3 'ESC': flushing the UART buffers.
AVRprog :'T' and '60' to tell programmer that
ATmega161 is selected
AVRprog :'P' to enable programming
AVRprog :'e' to erase application area
AVRprog :'P' to enable programming
AVRprog :'A' to set address=0x0000
AVRprog :'A' to set address to start programming
from
AVRprog :'c' to send low data byte
AVRprog :'C' to send high data byte


Ладно, буду капать.
Я не волшебник, я только лечусь
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Протокол AVR109

Сообщение uk8amk »

Например, в этом AVROSP911 коммуникация начинается следующим образом:

Код: Выделить всё

string AVRProgrammer::readProgrammerID( CommChannel * _comm )
{
	string id( "1234567" ); // Reserve 7 characters.

	if( _comm == NULL )
		throw new ErrorMsg( "NULL pointer provided for communication channel!" );

	/* Synchonize with programmer */
	for( int i = 0; i < 10; i++ )
		_comm->sendByte( 27 ); // Send ESC

	/* Send 'S' command to programmer */
	_comm->sendByte( 'S' );
	_comm->flushTX();

	/* Read 7 characters */
	for( long i = 0; i < id.size(); i++ )
	{
		id[i] = _comm->getByte();
	}

	return id;
}
Там всего несколько классов, которые просмотреть надо. На крайняк открыть проект в Devcpp, собрать и протрассировать до выяснения всех интересующих подробностей.
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Re: Протокол AVR109

Сообщение Gurvinok »

Да. Как раз при подаче загрузчику команды S он отвечает переводом каретки и готов работать. Жаль что нет просто описания протокола, буду разбирать этот код. Спасибо за помощь.
Я не волшебник, я только лечусь
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Re: Протокол AVR109

Сообщение Gurvinok »

Вкурил я в этот протокол. Исходники от AVR911 не подошли. Скомпилировать проект не получилось, постоянно какие-то ошибки. Плюнул и пошел по пути наименьшего сопротивления. Создал новый проект для МК в котором присутствует только функция main() и все. Собрал проект и получившейся HEX отправил в МК. А в момент передачи данных прицепился анализатором к UART. Вычленил все байты и разложил по полочкам. Протокол оказался простым как пробка. Но все таки возник один вопрос который пока объяснить не могу. Вопрос следующий: Команда запуска загрузчика во флеш выглядит следующим образом. B(0x42), 0(0x00), @(0x40), F(0x46) Первый и последний байты понятны, B это старт загрузки, а F то что во влеш. А что означают средние два байта 0@?

___________________________
Все, тему можно закрывать. Разобрался. Всем спасибо за помощь.
___________________________
Я не волшебник, я только лечусь
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Протокол AVR109

Сообщение BOB51 »

Да протокол хош "с потолка" взять можно.
Принцип следующий
запускаем "волшебным стечением обстоятельств" начальный загрузчик в МК
далее тот загрузчик рутинно выполняет подкачку фрагмента нужного кода в ОЗУ
проверяет его достоверность
выдает квитанцию устройству, посылающему код о заглатывании очередной порции
запускает блок перепрошивки принятым содержимым и
по окончании "усваивания" данного фрагмента кода
выдает посылающему код квитанцию на разрешение дальнейших действий.
А как то все организовать - творческая инициатива пользователя!
8)
Аватара пользователя
Gurvinok
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва
Контактная информация:

Re: Протокол AVR109

Сообщение Gurvinok »

BOB51, Вы случаем не курнули? :shock: Я конкретно писал что у меня загрузчик конкретно заточен под AVRProg, а там только протокол AVR109.
Я не волшебник, я только лечусь
Аватара пользователя
Jman
Мучитель микросхем
Сообщения: 414
Зарегистрирован: Ср янв 26, 2011 13:43:30
Откуда: С того берега моря
Контактная информация:

Re: Протокол AVR109

Сообщение Jman »

Привет, скажите пожалуйста. Я тут загрузчик пробую откомпиллировать под Atmega16. Подскажите, в дефайнах я верно все указал, меня смущает строчка с pagesize и boot size?

Код: Выделить всё

/* definitions generated by preprocessor, copy into defines.h */
#ifndef	PPINC
#define	_ATMEGA16	// device select: _ATMEGAxxxx
#define	_B2048		// boot size select: _Bxxxx (words), powers of two only
#ifdef	__ICCAVR__
#include	"iom16.h"
#endif
#if	__GNUC__
#include	<avr/io.h>
#endif

/* define pin for enter-self-prog-mode */
#define	PROGPORT	PORTB
#define	PROGPIN	PINB
#define	PROG_NO	PB0

/* baud rate register value calculation */
#define	CPU_FREQ	8000000
#define	BAUD_RATE	9600
#define	BRREG_VALUE	51

/* definitions for UART control */
#define	BAUD_RATE_LOW_REG	UBRRL
#define	UART_CONTROL_REG	UCSRB
#define	ENABLE_TRANSMITTER_BIT	TXEN
#define	ENABLE_RECEIVER_BIT	RXEN
#define	UART_STATUS_REG	UCSRA
#define	TRANSMIT_COMPLETE_BIT	TXC
#define	RECEIVE_COMPLETE_BIT	RXC
#define	UART_DATA_REG	UDR

/* definitions for SPM control */
#define	SPMCR_REG	SPMCSR
#define	PAGESIZE	128
#define	APP_END	28672
//#define	LARGE_MEMORY

/* definitions for device recognition (Atmega16)*/
#define	PARTCODE	
#define	SIGNATURE_BYTE_1	0x1E // 0x1E
#define	SIGNATURE_BYTE_2	0x94 // 0x95
#define	SIGNATURE_BYTE_3	0x03 // 0x04

/* indicate that preprocessor result is included */
#define	PPINC
#endif

Еще такой момент. Пробую записать ХЕКС через AVROSP II, при верификации не сходятся адреса и соответственно программа не работает. Прогресс прошивки идет и тд...
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Ответить

Вернуться в «AVR»