Кто-нибудь в курсе где можно нарыть нормальную доку для реализации данного протокола. AVR109: Self Programming не предлагать. Там про протокол всего четыре строчки и таблица команд. Мне нужен сам алгоритм что и за чем пихать загрузчику.
Протокол AVR109
Здрасе!
Кто-нибудь в курсе где можно нарыть нормальную доку для реализации данного протокола. AVR109: Self Programming не предлагать. Там про протокол всего четыре строчки и таблица команд. Мне нужен сам алгоритм что и за чем пихать загрузчику.
Кто-нибудь в курсе где можно нарыть нормальную доку для реализации данного протокола. AVR109: Self Programming не предлагать. Там про протокол всего четыре строчки и таблица команд. Мне нужен сам алгоритм что и за чем пихать загрузчику.
Я не волшебник, я только лечусь
- Реклама
Это по "самопрограммированию" что-ли вопрос?
Так там надоть даташиты внимательно вычитывать.

Так там надоть даташиты внимательно вычитывать.
Именно, по самопрограммированию.
Вот тока гидэ эти датащит их богу душу мать искать. Нашел два, но там только одно, мол AVRProg и все проблемы решены. А мне нужно свою написать программулину. Загрузчик я уж допилил и он работает, осталось только объяснить как ему по RS-485 общаться, а вот AVRProg c RS-485 не дружит. Вот мне и нужно знать какие команды в какое время пихать загрузчику.
Вот тока гидэ эти датащит их богу душу мать искать. Нашел два, но там только одно, мол AVRProg и все проблемы решены. А мне нужно свою написать программулину. Загрузчик я уж допилил и он работает, осталось только объяснить как ему по RS-485 общаться, а вот AVRProg c RS-485 не дружит. Вот мне и нужно знать какие команды в какое время пихать загрузчику.
Я не волшебник, я только лечусь
Эти данные вычитываются в даташите на конкретный МК.
В соответствующем разделе Self-Programming the Flash.
Описываются все касающиеся команды SPM на данном МК особенности.
А даташиты лежат у атмела на сайте.

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

В соответствующем разделе Self-Programming the Flash.
Описываются все касающиеся команды SPM на данном МК особенности.
А даташиты лежат у атмела на сайте.
А вот чего касательно самодельного загрузчика... То тут уж "простор для творчества" - ищите протокол к программе, а не к железу.
Или свою прожку под ПК писать надо (на чем умеючи).
Именно. Загрузчик работает прекрасно с AVRProg. Мне как раз нужен алгоритм от AVRProg, а для ПК написать это уже дело десятое. Было бы чего.
Я не волшебник, я только лечусь
- Реклама
Очень странно.
Как минимум к 109-му документу идёт архив с исходником, в main.c расписаны принимаемые команды и отсылаемые данные.
Далее есть док 911:
http://microsin.net/programming/AVR/avr911-avrosp.html
Там идёт архив с исходниками загрузчика на ++. Видно какие команды отсылаются и что ожидается.
То что нет красивой картинки в виде блок-схемы или чего аналогичного - это конечно недостаток. Но разве это нас остановит?
Как минимум к 109-му документу идёт архив с исходником, в main.c расписаны принимаемые команды и отсылаемые данные.
Далее есть док 911:
http://microsin.net/programming/AVR/avr911-avrosp.html
Там идёт архив с исходниками загрузчика на ++. Видно какие команды отсылаются и что ожидается.
То что нет красивой картинки в виде блок-схемы или чего аналогичного - это конечно недостаток. Но разве это нас остановит?
В том то и дело что команды известны, но вот незадача, какая последовательность их передачи. Например из мануала это не работает.
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
Ладно, буду капать.
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
Ладно, буду капать.
Я не волшебник, я только лечусь
Например, в этом AVROSP911 коммуникация начинается следующим образом:
Там всего несколько классов, которые просмотреть надо. На крайняк открыть проект в Devcpp, собрать и протрассировать до выяснения всех интересующих подробностей.
Код: Выделить всё
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;
}Да. Как раз при подаче загрузчику команды S он отвечает переводом каретки и готов работать. Жаль что нет просто описания протокола, буду разбирать этот код. Спасибо за помощь.
Я не волшебник, я только лечусь
Вкурил я в этот протокол. Исходники от AVR911 не подошли. Скомпилировать проект не получилось, постоянно какие-то ошибки. Плюнул и пошел по пути наименьшего сопротивления. Создал новый проект для МК в котором присутствует только функция main() и все. Собрал проект и получившейся HEX отправил в МК. А в момент передачи данных прицепился анализатором к UART. Вычленил все байты и разложил по полочкам. Протокол оказался простым как пробка. Но все таки возник один вопрос который пока объяснить не могу. Вопрос следующий: Команда запуска загрузчика во флеш выглядит следующим образом. B(0x42), 0(0x00), @(0x40), F(0x46) Первый и последний байты понятны, B это старт загрузки, а F то что во влеш. А что означают средние два байта 0@?
___________________________
Все, тему можно закрывать. Разобрался. Всем спасибо за помощь.
___________________________
___________________________
Все, тему можно закрывать. Разобрался. Всем спасибо за помощь.
___________________________
Я не волшебник, я только лечусь
Да протокол хош "с потолка" взять можно.
Принцип следующий
запускаем "волшебным стечением обстоятельств" начальный загрузчик в МК
далее тот загрузчик рутинно выполняет подкачку фрагмента нужного кода в ОЗУ
проверяет его достоверность
выдает квитанцию устройству, посылающему код о заглатывании очередной порции
запускает блок перепрошивки принятым содержимым и
по окончании "усваивания" данного фрагмента кода
выдает посылающему код квитанцию на разрешение дальнейших действий.
А как то все организовать - творческая инициатива пользователя!

Принцип следующий
запускаем "волшебным стечением обстоятельств" начальный загрузчик в МК
далее тот загрузчик рутинно выполняет подкачку фрагмента нужного кода в ОЗУ
проверяет его достоверность
выдает квитанцию устройству, посылающему код о заглатывании очередной порции
запускает блок перепрошивки принятым содержимым и
по окончании "усваивания" данного фрагмента кода
выдает посылающему код квитанцию на разрешение дальнейших действий.
А как то все организовать - творческая инициатива пользователя!
BOB51, Вы случаем не курнули?
Я конкретно писал что у меня загрузчик конкретно заточен под AVRProg, а там только протокол AVR109.
Я не волшебник, я только лечусь
Привет, скажите пожалуйста. Я тут загрузчик пробую откомпиллировать под Atmega16. Подскажите, в дефайнах я верно все указал, меня смущает строчка с pagesize и boot size?
Еще такой момент. Пробую записать ХЕКС через AVROSP II, при верификации не сходятся адреса и соответственно программа не работает. Прогресс прошивки идет и тд...
Код: Выделить всё
/* 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
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]


