реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Программирование одного мк другим, Вопрос по программированию
ILYCHOFF
сообщение Oct 13 2006, 07:40
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Посмотрел по форуму вроде ничего не попалось. Задача такая. Есть два мк ATMega128 связаны между собой по SPI нужно, чтобы один мк залил в другой свою прошивку. Со считыванием из флеш все нормально. Интересует как залить в другой мк, смотрел ДШ по программированию по SPI, не все понятно. Хочется посмотреть как делают грамотные люди. Может у кого есть исходники по этой теме.

МК связаны так, выводы SPI одного мк связаны с выводами PDI и PDO другого RESETом управляет отдельный вывод мк.
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Oct 13 2006, 07:45
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



Цитата(ILYCHOFF @ Oct 13 2006, 10:40) *
Посмотрел по форуму вроде ничего не попалось. Задача такая. Есть два мк ATMega128 связаны между собой по SPI нужно, чтобы один мк залил в другой свою прошивку. Со считыванием из флеш все нормально. Интересует как залить в другой мк, смотрел ДШ по программированию по SPI, не все понятно. Хочется посмотреть как делают грамотные люди. Может у кого есть исходники по этой теме.

МК связаны так, выводы SPI одного мк связаны с выводами PDI и PDO другого RESETом управляет отдельный вывод мк.

так ничего не выйдет. нужна программа для прошивки (в первом процессоре) и внешняя память для программы (прошиваемой). а что бы просто клонировались... есть устройства которые умеют это делать, но так просто не выйдет
Go to the top of the page
 
+Quote Post
add
сообщение Oct 13 2006, 07:51
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
так ничего не выйдет. нужна программа для прошивки (в первом процессоре) и внешняя память для программы

Вот как раз щас занимаюсь портативным копиром микросхем.
Думаю что прошить программу в другой MK можно , раз мк может себя стирать... то уж передать собственный код в другой мк наверное несложно..


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Oct 13 2006, 08:06
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Цитата(chief_olimp @ Oct 13 2006, 11:45) *
Цитата(ILYCHOFF @ Oct 13 2006, 10:40) *

Посмотрел по форуму вроде ничего не попалось. Задача такая. Есть два мк ATMega128 связаны между собой по SPI нужно, чтобы один мк залил в другой свою прошивку. Со считыванием из флеш все нормально. Интересует как залить в другой мк, смотрел ДШ по программированию по SPI, не все понятно. Хочется посмотреть как делают грамотные люди. Может у кого есть исходники по этой теме.

МК связаны так, выводы SPI одного мк связаны с выводами PDI и PDO другого RESETом управляет отдельный вывод мк.

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


Почему не выйдет? Считаю с одного мк страницу флеши, а потом запишу по SPI в другой, мне бы алгоритм посмотреть программирования или исходник, в даташите табл. 26-15
Мне непонятно, что за адрес страницы, какой это адрес???
Go to the top of the page
 
+Quote Post
Семён
сообщение Oct 13 2006, 08:13
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



Я делал вот так. Сразу извиняюсь за качество кода, писался он в экстремальном режиме из серии это должно было быть сделано еще вчера (кто-то на фирме отправил большую партию контролеров, довольно далеко, с непрошитами микросхемами) поэтому поял, писал, собирал в корпус в один день. Устройство следующие Mega 8 перешивает AtTiny2313. Код для tiny находиться в программной памяти mege
[code]
countErr=0;
ST:
RESET_OFF

mode.errProg=0;
// включаем режим програмирования

StartSPI(C_ENABALD_PROG_1);
StartSPI(C_ENABALD_PROG_2);
temp=StartSPI(C_ENABALD_PROG_3);
if(temp != 0X53)
{
mode.errProg=1;
}
StartSPI(C_ENABALD_PROG_4);
if(mode.errProg==1)
{
countErr++;
if(countErr==ERROR_COUNT_PROG)
{
goto START;
}
else
{
goto ST;

}
}
// стираем кристал
GRIN_OFF
StartTaimer1();

if(mode.clear==0)
{
StartSPI(C_CLEAR_PROG_1);
StartSPI(C_CLEAR_PROG_2);
StartSPI(C_CLEAR_PROG_3);
StartSPI(C_CLEAR_PROG_4);
mode.clear=1;
RESET_ON
Timer0Start(0,5);
goto ST;
}

adres.adres_int=0;
countData=0;
mode.clear=1;
page=64;
// команда режим програмирования
do
{

count16=32;
tempAdres=0;
do
{
if(mode.byteLorH==0)
{
temp=DATA[countData];
mode.byteLorH=1;
StartSPI(C_SAVE_L_PROG_1);
StartSPI(C_CLEAR_PROG_3);
StartSPI(tempAdres);
StartSPI(temp);
}
else
{
temp=DATA[countData+1];
mode.byteLorH=0;
StartSPI(C_SAVE_H_PROG_1);
StartSPI(C_CLEAR_PROG_3);
StartSPI(tempAdres);
StartSPI(temp);
countData=countData+2;
tempAdres=tempAdres+1;
}
Timer0Start(0,3);
count16--;
}while(count16);

StartSPI(C_PAGE_PROG);
StartSPI(adres.adres_Arx[1]);
StartSPI(adres.adres_Arx[0]);
StartSPI(C_CLEAR_PROG_4);
page--;
adres.adres_int=adres.adres_int+16;
Timer0Start(0,3);
}while(page);

// запись конфигурации
StartSPI(C_CONFIG_L_1);
StartSPI(C_CONFIG_L_2);
StartSPI(C_CONFIG_L_1);
StartSPI(C_CONFIG_L_4);
Timer0Start(0,3);
// запись защиты
StartSPI(C_LOOK_1_1);
StartSPI(C_LOOK_1_2);
StartSPI(C_ENABALD_PROG_3);
StartSPI(C_LOOK_1_4);
Timer0Start(0,3);

unsigned char StartSPI(unsigned char data)
{
mode.spi=1;
SPDR=data;
do
{
}while(mode.spi);
data=0;
data=SPDR;
return data;
}

[code]


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post
Семён
сообщение Oct 13 2006, 08:34
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



[/quote]
Почему не выйдет? Считаю с одного мк страницу флеши, а потом запишу по SPI в другой, мне бы алгоритм посмотреть программирования или исходник, в даташите табл. 26-15
Мне непонятно, что за адрес страницы, какой это адрес???
[/quote]
Маленький коментарий:
if(temp != 0X53) // 0X53 кристал должен ответить если перешел в режим программирование

далее идет код стирания кристала и повторения входа в режим програмирования

далее заполняем буфер страницы для разных конролеров размер может отличаться
count16=32;
tempAdres=0;
do
{
if(mode.byteLorH==0)
{
temp=DATA[countData];
mode.byteLorH=1; // записываем младший байт
.
.
.
else
{
temp=DATA[countData+1];
mode.byteLorH=0;
StartSPI(C_SAVE_H_PROG_1); // записываем старший байт
.
.
.
// переносим из буфера в нужную страницу
StartSPI(C_PAGE_PROG);
StartSPI(adres.adres_Arx[1]);
StartSPI(adres.adres_Arx[0]);
StartSPI(C_CLEAR_PROG_4);
page--;

Далее запись конфигурации и защиты


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Oct 13 2006, 08:50
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



А как адресуются страницы во флеш памяти??? Просто по порядку 0x0000, 0x0001, и т. д. ?
У меги 128 получается 500 страниц как раз для адреса страницы отводится 9 бит.
Правильно я думаю?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 13 2006, 08:54
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(ILYCHOFF @ Oct 13 2006, 11:06) *
Цитата(chief_olimp @ Oct 13 2006, 11:45) *

Цитата(ILYCHOFF @ Oct 13 2006, 10:40) *

Посмотрел по форуму вроде ничего не попалось. Задача такая. Есть два мк ATMega128 связаны между собой по SPI нужно, чтобы один мк залил в другой свою прошивку. Со считыванием из флеш все нормально. Интересует как залить в другой мк, смотрел ДШ по программированию по SPI, не все понятно. Хочется посмотреть как делают грамотные люди. Может у кого есть исходники по этой теме.

МК связаны так, выводы SPI одного мк связаны с выводами PDI и PDO другого RESETом управляет отдельный вывод мк.

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


Почему не выйдет? Считаю с одного мк страницу флеши, а потом запишу по SPI в другой, мне бы алгоритм посмотреть программирования или исходник, в даташите табл. 26-15
Мне непонятно, что за адрес страницы, какой это адрес???


Можно конечно и таким образом. То есть в программе "мастера" кроме всего прочего реализуется программатор. Но тогда я не совсем представляю как они у вас работать будут. То есть сложно всё получается.
Всётаки более правильный, на мой взгляд, подход с бутлоадером.

Алгоритм программирования (если вы пойдёте по первому пути) находится в даташите на саму микросхему. Там всё очень просто.
Go to the top of the page
 
+Quote Post
Семён
сообщение Oct 13 2006, 09:01
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



Цитата(ILYCHOFF @ Oct 13 2006, 12:50) *
А как адресуются страницы во флеш памяти??? Просто по порядку 0x0000, 0x0001, и т. д. ?
У меги 128 получается 500 страниц как раз для адреса страницы отводится 9 бит.
Правильно я думаю?

Mege128 имеет 512 страниц, размер страницы 64 (16 разрядных слов)


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Oct 13 2006, 10:19
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Цитата(SasaVitebsk @ Oct 13 2006, 12:54) *
Цитата(ILYCHOFF @ Oct 13 2006, 11:06) *

Цитата(chief_olimp @ Oct 13 2006, 11:45) *

Цитата(ILYCHOFF @ Oct 13 2006, 10:40) *

Посмотрел по форуму вроде ничего не попалось. Задача такая. Есть два мк ATMega128 связаны между собой по SPI нужно, чтобы один мк залил в другой свою прошивку. Со считыванием из флеш все нормально. Интересует как залить в другой мк, смотрел ДШ по программированию по SPI, не все понятно. Хочется посмотреть как делают грамотные люди. Может у кого есть исходники по этой теме.

МК связаны так, выводы SPI одного мк связаны с выводами PDI и PDO другого RESETом управляет отдельный вывод мк.

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


Почему не выйдет? Считаю с одного мк страницу флеши, а потом запишу по SPI в другой, мне бы алгоритм посмотреть программирования или исходник, в даташите табл. 26-15
Мне непонятно, что за адрес страницы, какой это адрес???


Можно конечно и таким образом. То есть в программе "мастера" кроме всего прочего реализуется программатор. Но тогда я не совсем представляю как они у вас работать будут. То есть сложно всё получается.
Всётаки более правильный, на мой взгляд, подход с бутлоадером.

Алгоритм программирования (если вы пойдёте по первому пути) находится в даташите на саму микросхему. Там всё очень просто.


Нужно именно два контроллера которые могли бы друг другу зашивать свою прошивку...
Go to the top of the page
 
+Quote Post
Семён
сообщение Oct 13 2006, 10:34
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



Свой код, который я привел выше писал, как говориться на одном дыхании без проработки и планирования общей структуры программы и устройства, пользуясь только Даташатам и спаеной макеткой, контролировал, что написал программатором. В даташате достаточно хорошо описан алгоритм, но если есть проблемы попробуйте использовать мой код. Если что-то не понятно я Вам по нему обязательно отвечу


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post
demaven
сообщение Oct 13 2006, 11:43
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 10-05-05
Из: Киргизия Бишкек
Пользователь №: 4 886



возьми за исходное программатор AVR910, в инете были исходники, замени работу с компортом на работу с внешней памятью, сей программатор работает и шьет почти все АВРки, исходники неплохо прокомментированны
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 13 2006, 22:54
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(ILYCHOFF @ Oct 13 2006, 15:40) *
...Задача такая. Есть два мк ATMega128 связаны между собой по SPI нужно, чтобы один мк залил в другой свою прошивку. Со считыванием из флеш все нормально. Интересует как залить в другой мк, смотрел ДШ по программированию по SPI, не все понятно. Хочется посмотреть как делают грамотные люди. Может у кого есть исходники по этой теме.
МК связаны так, выводы SPI одного мк связаны с выводами PDI и PDO другого RESETом управляет отдельный вывод мк.


Вам правильно сказал demaven, возьмите исходник на ASM от AVR910... разобраться в нем досконально - пару дней от силы. Кроме этого даташит на М128, что бы знать количество страниц и их размер и вперед))) Вот Вам код для входа в режим программирования от моего программатора
Код


...

#define AVR_PROG_EN()    Write123(0xAC, 0x53, 0x00)

...



/*****************************************************************************
Записывает последовательно 3 байта в SPI и возвращает результат от записи 3-го
******************************************************************************/
UCHAR Write123(UCHAR byte1, UCHAR byte2, UCHAR byte3)
{
   ExSPI(byte1);
    ExSPI(byte2);
    return ExSPI(byte3);
}



...


/*****************************************************************************
Вход в режим программирования
******************************************************************************/
void SetProgMode(void)
{
   UCHAR err = ACK;
    SET_LED_RD();
    SET_LED_WR();
            
    // проверяем код устройства
    if(S89 == g_DeviceType) //89S
    {
       ReleasePorts(); // отключаем порты
  CatchPorts(); // подключаем порты к ISP
     S89_DELAY_RESET(); // задержка
          
        // посылаем команду входа в режим программирования
        S89_PROG_EN();
    }
    else
    {
       // синхронизируемся с подключенным чипом
        ReleasePorts();  // отключаем порты
  CatchPorts();  // подключаем порты к ISP
     AVR_DELAY_RESET(); // задержка
          
        // 32 цикла попыток засинхронизироваться с программируемым МК
        for(UCHAR c = 0; c < 32; c++)
        {
            // пытаемся вывести чип в режим программирования
   // при посылке 3-го байта в SPI чип должен вернуть код предыдущей посылки
           UCHAR ctrl_byte = AVR_PROG_EN();
            ExSPI(0x00);
          
            // получили верный контрольный байт - синхронизация выполнена
            if(0x53 == ctrl_byte)
             goto m1;
            
            // если нет валидного возврата, то сдвигаем при каждой попытке строб
           SET_SCK();
      __delay_cycles(600); // задержка 50 мкс
   CLR_SCK();
      __delay_cycles(600);
        }
        
        // если мы не засинхронизировались,
        // считаем, что устройство не найдено
        ReleasePorts(); // отключаем порты
        err = NACK; // посылаем код ошибки
    }

m1:
    PutChar(err);
    CLR_LED_WR();
    CLR_LED_RD();
}


--------------------
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Oct 16 2006, 04:50
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Спасибо большое всем за ответы, буду разбираться....
Go to the top of the page
 
+Quote Post
yarunt
сообщение Dec 15 2006, 16:16
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 215
Регистрация: 13-12-06
Из: fghgfh
Пользователь №: 23 476



Цитата(ILYCHOFF @ Oct 16 2006, 05:50) *
Спасибо большое всем за ответы, буду разбираться....

есть исходник на абилдере и только на 128 только лонирование флеш. isq 446-319-072


--------------------
Нельзя впихнуть,невпихуемое?МОЙ БЛОГ
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01499 секунд с 7
ELECTRONIX ©2004-2016