Прошивка МК с МК

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
ReZeC
Открыл глаза
Сообщения: 49
Зарегистрирован: Сб янв 02, 2016 09:12:08
Откуда: Novosibirsk

Прошивка МК с МК

Сообщение ReZeC »

Доброго времени вам Коты мудрые и ученые.

Вопрос (честно сказать тем не курил), но не бейте.. :kill:

Есть ряд устройств, раскиданных по территории, на Атмега 32.
Иногда возникает необходимость переписать код (прогресс не стоит и надо).
Таскать устройства к компу - становится все ленивей и ленивей, да и вытаскивать устройства весьма нелегко.
Ноут - не вариант.

И придумалась мне такая штука:

Я делаю еще одно устройство, назовем его ПРОШИВАТЕЛЬ, наверное с картой памяти, т.к. код на устройствах занимает 98 % памяти атмеги, и, когда приходит время беру свой
Прошиватель, радостно несусь к устройству, подключаю к ISP, жму кнопку и обновляю код.

Мож это уже давно все придумано ?

Что скажете ?
Ученье свет! Неучам - чуть свет и на работу.. ;)
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: Прошивка МК с МК

Сообщение dr.doc »

Для PIC контроллеров это PICKit2...
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Прошивка МК с МК

Сообщение uk8amk »

http://mdiy.pl/uprog-maly-szybki-przeno ... -avr-z-sd/
Только если всё равно идти за устройствами, то почему не ноут или дешевый нетбук?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Прошивка МК с МК

Сообщение ARV »

ReZeC писал(а):Что скажете ?
ну делал я такой "прошиватель"... только без карты - просто брал atmega2560 и туда прошивки для attiny2313 помещал. правда, управлялось это все с компа, но никаких проблем нет обойтись и без него...

и чо?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ReZeC
Открыл глаза
Сообщения: 49
Зарегистрирован: Сб янв 02, 2016 09:12:08
Откуда: Novosibirsk

Re: Прошивка МК с МК

Сообщение ReZeC »

uk8amk писал(а):http://mdiy.pl/uprog-maly-szybki-przenosny-programator-avr-z-sd/
Только если всё равно идти за устройствами, то почему не ноут или дешевый нетбук?


К дешевому ноуту, надо дешевый программатор и т.д. Ну и чел, который будет перепрошивать - далек от цивилизации..

В общем Ноут не вариант.

Добавлено after 22 minutes 7 seconds:
uk8amk писал(а):http://mdiy.pl/uprog-maly-szybki-przenosny-programator-avr-z-sd/
Только если всё равно идти за устройствами, то почему не ноут или дешевый нетбук?


ниже в комментах нашел нашего человека: http://best-chart.ru/programmatory-sdel ... uprog.html

Вопрос ! У меня 16 мегагерц рабочая частота устройств.... Смогу ли я этим устройством прошить ?
Ученье свет! Неучам - чуть свет и на работу.. ;)
Аватара пользователя
AlanDrakes
Прорезались зубы
Сообщения: 236
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Re: Прошивка МК с МК

Сообщение AlanDrakes »

Вообще-то, протокол ISP - не слишком сложный. Фактически, это чистый SPI. И даже пин /CS подменяется на /RESET. Вообще ничего сложного - главное не сбиться.
Где-то в своём проекте написал подобный прошиватель, разве что работал он с одним конкретным ведомым кристаллом, читал прошивку (.HEX) с карты памяти (uSD) и писал в него.
Просто полистал референс на программирование по ISP. Основные моменты:
1. Частота на SCK пине должна быть ниже частоты ведомого ЦП минимум в 4 раза. Для 16МГц целевого, нельзя использовать клок выше 4МГц. Скорее всего - уложитесь.
2. Сброс - это /CS, но во время загрузки данных его нельзя отпускать.
3. Запись постраничная - читаете данные, записываете в буфер страницы (зависит от размера страницы), даёте запись с указанием НОМЕРА страницы.
4. Ждёте (n) милимсекунд, эпизодически считывая состояние бита BUSY ведомого контроллера.
5. Можно обойтись без кнопки.

Вот пример кода:
Спойлер

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

uint8_t SlaveProgMode(void) {
   uint8_t t, i;
   SPI_Deselect_ALL();         // На всякий случай.
   SPI_Init();            // Настраиваем SPI на минимальную скорость и снимаем выбор с шины.
   for (i=0; i<10; i++);         // Рекомендуемая пауза - не менее 2 тактов процессора. Ждём порядка 20.
   SPI_SLAVE_RESET_OFF();         // Поднимаем nReset.
   for (i=0; i<10; i++);         // Рекомендуемая пауза - не менее 2 тактов процессора. Ждём порядка 20.
   SPI_SLAVE_RESET_ON();         // Опускаем nReset
   _delay_ms(50);            // Пауза (не менее 10мс) в 50 мс.
   for (t=0; t<10; t++)
   {
      SPI_Ex_Byte(0xAC);      // Стартовый байт (синхронизация)
      SPI_Ex_Byte(0x53);      // Режим программирования
      i = SPI_Ex_Byte(0xFF);      // Dummy
      SPI_Ex_Byte(0xFF);      // Dummy
      if (i == 0x53)         // Если чип ответил 2-м байтом при передаче 3-го - порядок.
      {
         return 0;      // Выходим с успехом.
      };            // Если синхронизация не установилась - повторяем вплоть до 10 раз.
      SPI_SLAVE_RESET_OFF();      // Поднимаем nReset.
      for (i=0; i<10; i++);      // Рекомендуемая пауза - не менее 2 тактов процессора. Ждём порядка 20.
      SPI_SLAVE_RESET_ON();      // Опускаем nReset
   };
   return 1;            // Иначе - возвращаем 1.
};

uint8_t IsBusy(void) {
   uint8_t i;
   SPI_Ex_Byte(0xF0);                     // Poll Rdy/~Busy
   SPI_Ex_Byte(0x00);                     // Need 0x00
   SPI_Ex_Byte(0x00);                     // Dummy - Ignored.
   i = SPI_Ex_Byte(0xFF);                     // Read last bit.
   i = i & 0x01;
   return i;
};
void ChipErase(void) {            // Chip Erase sub. Well... poll nRDY?
   while (IsBusy());         // Delay to chip ready.
   SPI_Ex_Byte(0xAC);
   SPI_Ex_Byte(0x80);         // ChipErase
   SPI_Ex_Byte(0x00);         // dummy
   SPI_Ex_Byte(0x00);         // dummy
   while (IsBusy());         // Wait till Erase() done.
};
uint8_t FuseRead(uint8_t FuseByte) {
   while (IsBusy());      // Delay to chip ready.
   switch (FuseByte)      // Fuse_Low    0x50, 0x00, 0x00, Answer
               // Fuse_High   0x58, 0x08, 0x00, Answer
               // Fuse_Ext   0x50, 0x08, 0x00, Answer
   {
      case FUSE_LOW:
      case FUSE_EXT:
         SPI_Ex_Byte(0x50);
         break;
      case FUSE_HIGH:
         SPI_Ex_Byte(0x58);
         break;
   };
   switch (FuseByte)
   {
      case FUSE_LOW:
         SPI_Ex_Byte(0x00);
         break;
      case FUSE_EXT:
      case FUSE_HIGH:
         SPI_Ex_Byte(0x08);
         break;
   };
   SPI_Ex_Byte(0x00);
   return SPI_Ex_Byte(0xFF);
};
void FuseWrite(uint8_t FuseByte, uint8_t Value) {
   while (IsBusy());         // Delay to chip ready.
   SPI_Ex_Byte(0xAC);         // Write Fuse command
                  // Low, Ext, High: 0xAC, (0xA0|0xA4|0xA8), 0x00. Fuse
   SPI_Ex_Byte(0xA0 + 4*FuseByte);      // A0/A4/A8/(AC(!) if FuseByte == 3)
   SPI_Ex_Byte(0x00);         // 3-rd byte of CMD
   SPI_Ex_Byte(Value);         // Fuse value to write
};

// Номер страницы по 64 байта (в моём случае).
// То есть, реальный адрес байта 0x123456 получим:
// 0b 0001 0010 0011 0100 0101 0110
//         |-Номер стр.----| |-- Данные-|
// В буфере страницы должны быть 64 байта, которые нужно записать в страницу. Передать адрес страницы так же необходимо!

void WriteSlaveFlashPage(uint16_t PageNumber, uint8_t PageBuffer[64]) {
   uint8_t i, b;
   SlaveProgMode();                     // Переводим чип в режим программирования. Мало ли...
   for (i=0;i<64;i++) {
      b = PageBuffer[i];
      SPI_Ex_Byte(0x40 + (i & 0x01)*8);            // Выбираем старший, или младший байт.
      SPI_Ex_Byte(0x00);                  // Команда... нужно 000xxxxx
      SPI_Ex_Byte(i>>1);                  // Дать номер слова, куда грузить.
      SPI_Ex_Byte(b);                     // Загрузить верхний байт.
   };
   // write page.
   SPI_Ex_Byte(0x4C);                     // Команды записи страницы
   SPI_Ex_Byte((PageNumber >> 4) & 0x1F);   // Верхний байт (MSB)
   SPI_Ex_Byte((PageNumber << 4) & 0xF0);   // Нижний байт (LSB)
   //   0b 0000 0000 0000 0000
   //      UPPER     LOWER
   // mask 0000 0111 1110 0000
   //      -- MSB -- -- LSB --
   // MSB first
   SPI_Ex_Byte(0x00);                     // Dummy
   // wait till ~busy
   while (IsBusy());                     // Ждём, пока занято.
   SPI_SLAVE_RESET_OFF();                     // Отпускаем nRST, чтобы чип не висел на шине.
};

Аватара пользователя
ReZeC
Открыл глаза
Сообщения: 49
Зарегистрирован: Сб янв 02, 2016 09:12:08
Откуда: Novosibirsk

Re: Прошивка МК с МК

Сообщение ReZeC »

AlanDrakes писал(а):Вообще-то, протокол ISP - не слишком сложный. Фактически, это чистый SPI. И даже пин /CS подменяется на /RESET. Вообще ничего сложного - главное не сбиться.


Спасибо что откликнулись. Но как разработчик - я слабоват. Повторять схемы получается.. Немного код править умею... а дальше уже сложно.
Ученье свет! Неучам - чуть свет и на работу.. ;)
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Re: Прошивка МК с МК

Сообщение Vov123 »

Смотри, если не "брезгуешь" ардуинами, то процесс намного упрощается, всё оказывается придумали давно и без нас.
К, примеру, написал ты апгрейд, отправляешь его по WhatsApp своему не очень сведущему товарищу на телефон.
Он подключает смартфон через OTG-кабель к ардуинке и с помощью программки "ардуино дроид" загружает твой апгрейд.

Я сейчас попробовал простецкую (блинк) программу, всё работает, кабель использовал тот, что идёт в комплекте с ардуинкой,
только почему-то иногда с первого раза скетч не заливается и необходимо повторять попытку ещё раз.

Подробности здесь: https://www.youtube.com/watch?v=0e7nWWu7kDc :lol:
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Прошивка МК с МК

Сообщение BOB51 »

Запихнуть в те меги самодельный начальный загрузчик(бутлоадер) по любому понравившемуся протоколу и соорудить носимый накопитель...
:roll:
Аватара пользователя
ReZeC
Открыл глаза
Сообщения: 49
Зарегистрирован: Сб янв 02, 2016 09:12:08
Откуда: Novosibirsk

Re: Прошивка МК с МК

Сообщение ReZeC »

BOB51 писал(а):Запихнуть в те меги самодельный начальный загрузчик(бутлоадер) по любому понравившемуся протоколу и соорудить носимый накопитель...
:roll:


Софтинка, которая крутится на устройстве, занимает 98 % памяти Атмеги 32.
Ученье свет! Неучам - чуть свет и на работу.. ;)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Прошивка МК с МК

Сообщение BOB51 »

А как насчет заменить на другой кристалл, "побольше"?
:roll:
Аватара пользователя
ReZeC
Открыл глаза
Сообщения: 49
Зарегистрирован: Сб янв 02, 2016 09:12:08
Откуда: Novosibirsk

Re: Прошивка МК с МК

Сообщение ReZeC »

BOB51 писал(а):А как насчет заменить на другой кристалл, "побольше"?
:roll:


Все под Мегу 32... схема и т.д... в общем не реально....

Ну и все это, можно сказать, в общественно-патриотической детской организации (настоящей) где денег практически нет. Так, помогаю как могу.
Ученье свет! Неучам - чуть свет и на работу.. ;)
Аватара пользователя
abc
Друг Кота
Сообщения: 3677
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Прошивка МК с МК

Сообщение abc »

Вроде ж, есть проекты ...
Кодовые слова для гугла - avr stand alone programmer
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Аватара пользователя
ReZeC
Открыл глаза
Сообщения: 49
Зарегистрирован: Сб янв 02, 2016 09:12:08
Откуда: Novosibirsk

Re: Прошивка МК с МК

Сообщение ReZeC »

abc писал(а):Вроде ж, есть проекты ...
Кодовые слова для гугла - avr stand alone programmer


Вот ! Спасибо вам ! у самого ума не хватило как правильно строку для поиска задать.

На "автономный программатор avr" - много решений выпало. с описанием.

Малоль, мож кому понадобится:

http://bigbenmobileblog.blogspot.ru/201 ... -sd-1.html
http://www.tehnari.ru/f115/t104559/
http://www.rlocman.ru/shem/schematics.html?id=107043


p.s. :beer: почему значЁк с распивающими валерьянку котами называется BEER ?
Ученье свет! Неучам - чуть свет и на работу.. ;)
Аватара пользователя
abc
Друг Кота
Сообщения: 3677
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Прошивка МК с МК

Сообщение abc »

Потому что он переделан со смайликов, распивающих пиво.
Впрочем, неважно, главное, что им хорошо :)
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Аватара пользователя
ReZeC
Открыл глаза
Сообщения: 49
Зарегистрирован: Сб янв 02, 2016 09:12:08
Откуда: Novosibirsk

Re: Прошивка МК с МК

Сообщение ReZeC »

abc писал(а): им хорошо :)


ФАКТ !
Ученье свет! Неучам - чуть свет и на работу.. ;)
74LS00
Друг Кота
Сообщения: 7656
Зарегистрирован: Вс июл 24, 2011 11:38:09
Контактная информация:

Re: Прошивка МК с МК

Сообщение 74LS00 »

У меня устройство метрах в 5. Собрал платки на gd75232 и парой ms34063 чтоб прямо isp в витую пару и обратно.
Шина однонаправленная так что проблем не должно быть. Пока валяются. Надо ещё разъёмы подпаивать, кабель покупать да и самой платы контролера нет даже в теории, но платки с uart пашут.
Но это хорошо когда устройство, вариант шить в програматор, а потом им уж слишком долгий.

Автономного я так и не нашел, да он и не пригодился. У этих контролеров есть подлянка, они не поддерживаются, очень много новых версий которые не шьёт старый софт, хотя отличие только в сигнатуре. Переписывать код не вариант, да и исходников чаще всего нет
Ответить

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