|
Программирование одного мк другим, Вопрос по программированию |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 25)
|
Oct 13 2006, 07:51
|

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

|
Цитата так ничего не выйдет. нужна программа для прошивки (в первом процессоре) и внешняя память для программы Вот как раз щас занимаюсь портативным копиром микросхем. Думаю что прошить программу в другой MK можно , раз мк может себя стирать... то уж передать собственный код в другой мк наверное несложно..
--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
|
|
|
|
|
Oct 13 2006, 08:06
|

Частый гость
 
Группа: Свой
Сообщений: 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 Мне непонятно, что за адрес страницы, какой это адрес???
|
|
|
|
|
Oct 13 2006, 08:13
|
Частый гость
 
Группа: Свой
Сообщений: 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-дюемовых дискетах
|
|
|
|
|
Oct 13 2006, 08:34
|
Частый гость
 
Группа: Свой
Сообщений: 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-дюемовых дискетах
|
|
|
|
|
Oct 13 2006, 08:54
|
Гуру
     
Группа: Свой
Сообщений: 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 Мне непонятно, что за адрес страницы, какой это адрес??? Можно конечно и таким образом. То есть в программе "мастера" кроме всего прочего реализуется программатор. Но тогда я не совсем представляю как они у вас работать будут. То есть сложно всё получается. Всётаки более правильный, на мой взгляд, подход с бутлоадером. Алгоритм программирования (если вы пойдёте по первому пути) находится в даташите на саму микросхему. Там всё очень просто.
|
|
|
|
|
Oct 13 2006, 09:01
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(ILYCHOFF @ Oct 13 2006, 12:50)  А как адресуются страницы во флеш памяти??? Просто по порядку 0x0000, 0x0001, и т. д. ? У меги 128 получается 500 страниц как раз для адреса страницы отводится 9 бит. Правильно я думаю? Mege128 имеет 512 страниц, размер страницы 64 (16 разрядных слов)
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Oct 13 2006, 10:19
|

Частый гость
 
Группа: Свой
Сообщений: 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 Мне непонятно, что за адрес страницы, какой это адрес??? Можно конечно и таким образом. То есть в программе "мастера" кроме всего прочего реализуется программатор. Но тогда я не совсем представляю как они у вас работать будут. То есть сложно всё получается. Всётаки более правильный, на мой взгляд, подход с бутлоадером. Алгоритм программирования (если вы пойдёте по первому пути) находится в даташите на саму микросхему. Там всё очень просто. Нужно именно два контроллера которые могли бы друг другу зашивать свою прошивку...
|
|
|
|
|
Oct 13 2006, 10:34
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Свой код, который я привел выше писал, как говориться на одном дыхании без проработки и планирования общей структуры программы и устройства, пользуясь только Даташатам и спаеной макеткой, контролировал, что написал программатором. В даташате достаточно хорошо описан алгоритм, но если есть проблемы попробуйте использовать мой код. Если что-то не понятно я Вам по нему обязательно отвечу
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Oct 13 2006, 22:54
|

Гуру
     
Группа: Свой
Сообщений: 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(); }
--------------------
|
|
|
|
|
Dec 15 2006, 17:30
|

Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544

|
Была такая идея, но говорю сразу - это только мысль и реализована она пока не была. Представьте себе некую маленькую коробочку, в которой кроме источника питания, разъёма ISP,пары светодиодов, кварца и, собственно кристалла больше ничего нет. В кристалл, в секцию бутлоадера зашит собственно программатор и закрыт всеми возможными для него, бутлоадера, битами защиты. Его задача - последовательно читать флэш с нулевого адреса и формировать сигналы программирования для внешнего кристалла. Т.е. кристалл в коробочке - это и есть автономный программатор. Так прелесть, помоему, в том, что берем эту коробочку, шьём ее как целевое устройство (секция бутлоадера защищена, значит он и не затрется при шитье) и забывам об этом. Далее, приезжаем на объект, вставляем коробочку в целевой девайс. Коробочка стартует с бутлоадера и начинает шить то, что в нее зашили "как в целевое устройство".
Извиняюсь за некую сумбурность, смерть как устал за неделю. :-)
|
|
|
|
|
Dec 15 2006, 17:55
|

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

|
Цитата(Igor26 @ Dec 15 2006, 21:30)  Была такая идея, но говорю сразу - это только мысль и реализована она пока не была. Представьте себе некую маленькую коробочку, в которой кроме источника питания, разъёма ISP,пары светодиодов, кварца и, собственно кристалла больше ничего нет. В кристалл, в секцию бутлоадера зашит собственно программатор и закрыт всеми возможными для него, бутлоадера, битами защиты. Его задача - последовательно читать флэш с нулевого адреса и формировать сигналы программирования для внешнего кристалла. Т.е. кристалл в коробочке - это и есть автономный программатор. Так прелесть, помоему, в том, что берем эту коробочку, шьём ее как целевое устройство (секция бутлоадера защищена, значит он и не затрется при шитье) и забывам об этом. Далее, приезжаем на объект, вставляем коробочку в целевой девайс. Коробочка стартует с бутлоадера и начинает шить то, что в нее зашили "как в целевое устройство". Извиняюсь за некую сумбурность, смерть как устал за неделю. :-) Идея хорошая, но зачем код для целевого девайса вгонять в МК программатора, для этого есть DataFlash или EEPROM. Дешевле получится и место столько же, если не меньше...
--------------------
|
|
|
|
|
Dec 16 2006, 18:30
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Igor26 @ Dec 15 2006, 16:30)  Так прелесть, помоему, в том, что берем эту коробочку, шьём ее как целевое устройство (секция бутлоадера защищена, значит он и не затрется при шитье) и забывам об этом. Далее, приезжаем на объект, вставляем коробочку в целевой девайс. Коробочка стартует с бутлоадера и начинает шить то, что в нее зашили "как в целевое устройство". Если ты едешь туда лично, то никаких таких фокусов не надо, а если не лично - то рано или поздно притулят впараллель SPI-slave только на приём, который сольёт куда сочтёт нужным всю последовательность и потом можно и вырезать нужное для дизассемблирования, и шо хош. Так что - правильно было сказано - шифрование. Только "дешифратор" - в ЦЕЛЕВОМ устройстве, а в "коробочке" - всего лишь AT45DBсколько_надо с зашифрованной программой. И пусть бутлоадер в целевом читает, декодирует, самопрошивается.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Dec 17 2006, 00:30
|

Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544

|
Цитата Если ты едешь туда лично Если я поеду туда лично, то возьму свой лаптоп и залью. А если едет человек, которому пол дня нужно объяснять, что такое FUSE-биты? Плавали, знаем. Далее. О закрытии кода речи нет. Не нужно этого. Пусть разбираются в 20к кода, если хотят.
|
|
|
|
|
Dec 17 2006, 00:40
|

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

|
Цитата(Igor26 @ Dec 17 2006, 04:30)  Цитата Если ты едешь туда лично Если я поеду туда лично, то возьму свой лаптоп и залью. А если едет человек, которому пол дня нужно объяснять, что такое FUSE-биты? Плавали, знаем. Далее. О закрытии кода речи нет. Не нужно этого. Пусть разбираются в 20к кода, если хотят. А зачем разбираться? Клонировать достаточно инохда...)
--------------------
|
|
|
|
|
Jan 21 2008, 09:47
|
Местный
  
Группа: Свой
Сообщений: 335
Регистрация: 17-06-04
Из: Москва
Пользователь №: 35

|
Я пытаюсь запрограммировать из Mega128 Tiny26. Вход в синхронизацию проходит, но при этом Flash заполняется какими-то значениями - память оказывается заполненной какими-то значениями даже после команды "Стирание памяти". В чем может быть загвоздка? Код char mark = 0; char temp = 0;
INITIALIZATION(); // инициализация портов
while ( mark == 0 ) // будем добиваться входа в синхронизацию { // вход в режим программирования CLEARBIT( DDRE, 6 ); // Reset = High DELAYMS( 1 ); // Reset = Low CLEARBIT( PORTE,6 ); SETBIT( DDRE, 6 ); CLEARBIT( PORTE,6 ); DELAYMS( 20 ); // вход в синхронизацию SEND_SPI( 0xAC ); SEND_SPI( 0x53 ); temp = SEND_SPI( 0xAA ); if( temp == 0x53 ) { SEND_SPI( 0xAA ); mark = 1; } } // стирание памяти SEND_SPI( 0xAC ); SEND_SPI( 0x80 ); SEND_SPI( 0x00 ); SEND_SPI( 0x00 ); ВОПРОС СНЯТ! этого не происходит, ошибка в мозгах была...
--------------------
Всегда не хватает времени, чтобы выполнить работу как надо, но на то, чтобы ее переделать, время находится. (Закон Мескимена.)
|
|
|
|
Guest_=VRA=_*
|
Jan 21 2008, 09:59
|
Guests

|
Цитата(ILYCHOFF @ Oct 13 2006, 10:40)  Хочется посмотреть как делают грамотные люди Вот они - ключевые слова, на которые никто до сих пор не обратил внимания! А грамотные люди делают так, чтобы необходимость в таком извращении просто не возникала - тогда и не придется гланды через ж... вырезать
|
|
|
|
|
Jan 21 2008, 14:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата редставьте себе некую маленькую коробочку, в которой кроме источника питания, разъёма ISP,пары светодиодов, кварца и, собственно кристалла больше ничего нет. В кристалл, в секцию бутлоадера зашит собственно программатор и закрыт всеми возможными для него, бутлоадера, битами защиты. У нас так сделано уже лет 8. Только в коробочке в последних вариантах я ставлю панельку с нулевым усилием - для смены целевого устройства меняется только пишущий кристалл. Ну и еще небольшой совет. Кроме выше названного поставить пищалку для контроля завершения записи - хорошо помогает  .
|
|
|
|
|
Jan 27 2008, 12:15
|

Участник

Группа: Свой
Сообщений: 58
Регистрация: 17-01-07
Из: Одесса
Пользователь №: 24 523

|
Цитата(ILYCHOFF @ Oct 13 2006, 09:40)  ... Есть два мк ATMega128 связаны между собой ... чтобы один мк залил в другой свою прошивку... А если взять третий камень и управление заливкой/считыванием возложить на него?
--------------------
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|