Страница 1 из 1
Протокол AVR109
Добавлено: Вс янв 10, 2016 18:45:29
Gurvinok
Здрасе!
Кто-нибудь в курсе где можно нарыть нормальную доку для реализации данного протокола. AVR109: Self Programming не предлагать. Там про протокол всего четыре строчки и таблица команд. Мне нужен сам алгоритм что и за чем пихать загрузчику.
Re: Протокол AVR109
Добавлено: Вс янв 10, 2016 19:03:15
BOB51
Это по "самопрограммированию" что-ли вопрос?
Так там надоть даташиты внимательно вычитывать.

Re: Протокол AVR109
Добавлено: Вс янв 10, 2016 19:09:43
Gurvinok
Именно, по самопрограммированию.
Вот тока гидэ эти датащит их богу душу мать искать. Нашел два, но там только одно, мол AVRProg и все проблемы решены. А мне нужно свою написать программулину. Загрузчик я уж допилил и он работает, осталось только объяснить как ему по RS-485 общаться, а вот AVRProg c RS-485 не дружит. Вот мне и нужно знать какие команды в какое время пихать загрузчику.
Re: Протокол AVR109
Добавлено: Вс янв 10, 2016 21:06:29
BOB51
Эти данные вычитываются в даташите на конкретный МК.
В соответствующем разделе Self-Programming the Flash.
Описываются все касающиеся команды SPM на данном МК особенности.
А даташиты лежат у атмела на сайте.

А вот чего касательно самодельного загрузчика... То тут уж "простор для творчества" - ищите протокол к программе, а не к железу.
Или свою прожку под ПК писать надо (на чем умеючи).

Re: Протокол AVR109
Добавлено: Вс янв 10, 2016 21:30:33
Gurvinok
Именно. Загрузчик работает прекрасно с AVRProg. Мне как раз нужен алгоритм от AVRProg, а для ПК написать это уже дело десятое. Было бы чего.
Re: Протокол AVR109
Добавлено: Вс янв 10, 2016 22:28:25
uk8amk
Очень странно.
Как минимум к 109-му документу идёт архив с исходником, в main.c расписаны принимаемые команды и отсылаемые данные.
Далее есть док 911:
http://microsin.net/programming/AVR/avr911-avrosp.html
Там идёт архив с исходниками загрузчика на ++. Видно какие команды отсылаются и что ожидается.
То что нет красивой картинки в виде блок-схемы или чего аналогичного - это конечно недостаток. Но разве это нас остановит?
Re: Протокол AVR109
Добавлено: Вс янв 10, 2016 22:59:25
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
Ладно, буду капать.
Re: Протокол AVR109
Добавлено: Пн янв 11, 2016 08:16:44
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, собрать и протрассировать до выяснения всех интересующих подробностей.
Re: Протокол AVR109
Добавлено: Пн янв 11, 2016 10:27:44
Gurvinok
Да. Как раз при подаче загрузчику команды S он отвечает переводом каретки и готов работать. Жаль что нет просто описания протокола, буду разбирать этот код. Спасибо за помощь.
Re: Протокол AVR109
Добавлено: Пн янв 11, 2016 13:59:26
Gurvinok
Вкурил я в этот протокол. Исходники от AVR911 не подошли. Скомпилировать проект не получилось, постоянно какие-то ошибки. Плюнул и пошел по пути наименьшего сопротивления. Создал новый проект для МК в котором присутствует только функция main() и все. Собрал проект и получившейся HEX отправил в МК. А в момент передачи данных прицепился анализатором к UART. Вычленил все байты и разложил по полочкам. Протокол оказался простым как пробка. Но все таки возник один вопрос который пока объяснить не могу. Вопрос следующий: Команда запуска загрузчика во флеш выглядит следующим образом. B(0x42), 0(0x00), @(0x40), F(0x46) Первый и последний байты понятны, B это старт загрузки, а F то что во влеш. А что означают средние два байта 0@?
___________________________
Все, тему можно закрывать. Разобрался. Всем спасибо за помощь.
___________________________
Re: Протокол AVR109
Добавлено: Пн янв 11, 2016 20:19:49
BOB51
Да протокол хош "с потолка" взять можно.
Принцип следующий
запускаем "волшебным стечением обстоятельств" начальный загрузчик в МК
далее тот загрузчик рутинно выполняет подкачку фрагмента нужного кода в ОЗУ
проверяет его достоверность
выдает квитанцию устройству, посылающему код о заглатывании очередной порции
запускает блок перепрошивки принятым содержимым и
по окончании "усваивания" данного фрагмента кода
выдает посылающему код квитанцию на разрешение дальнейших действий.
А как то все организовать - творческая инициатива пользователя!

Re: Протокол AVR109
Добавлено: Пн янв 11, 2016 20:24:28
Gurvinok
BOB51, Вы случаем не курнули?

Я конкретно писал что у меня загрузчик конкретно заточен под
AVRProg, а там только протокол
AVR109.
Re: Протокол AVR109
Добавлено: Пт мар 17, 2017 13:56:31
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, при верификации не сходятся адреса и соответственно программа не работает. Прогресс прошивки идет и тд...