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

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

Сообщение ReZeC »

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

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

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

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

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

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

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

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

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

Сообщение uk8amk »

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

Сообщение ARV »

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

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

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

Сообщение ReZeC »

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

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

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

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

Сообщение 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, чтобы чип не висел на шине.
};

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

Сообщение ReZeC »

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

Сообщение Vov123 »

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

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

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

Сообщение BOB51 »

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

Сообщение ReZeC »

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

Сообщение BOB51 »

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

Сообщение ReZeC »

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

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

Сообщение abc »

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

Сообщение 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
Друг Кота
Аватара пользователя
Сообщения: 3688
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

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

Сообщение ReZeC »

abc писал(а): им хорошо :)
ФАКТ !
Ученье свет! Неучам - чуть свет и на работу.. ;)
Друг Кота
Сообщения: 7722
Зарегистрирован: Вс июл 24, 2011 11:38:09

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

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

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

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