Чем прошить файл ав

Обновлено: 05.07.2024


Спешу сообщить своим подписчика и тем кому интересно, что я сам обновил прошивку блока АКПП до последней версии 1844, которая по сводкам TPI (Учётный №: 2023670/2 Дата разрешения публикации: 03.12.2010) устраняет такие проблемы как — "Временами в автоматической коробке передач происходят рывки при автоматическом переключении с 5-й передачи на 4-ю. Явно ощущаемые переключения 5-4-3 при движении накатом при положении селектора D/S, что может возникать только при блоке управления 09D927750JK.".

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

В результате — Все прошло успешно! )





А теперь подробности. Для прошивания блоков автомобилей концерна VAG используется в основном дилерское оборудование VAS5054А или более новые версии. Но как вы догадались данное оборудование есть не только у официалов, их копии есть в свободной продаже, сделанные в основном в Китае. С недавних пор я тоже стал обладателем удачной копии VAS5054A из Китая, про которую я недавно делал запись ТУТ.

После получения было установлено на Win7Max_64bit сначала ODIS Service, которая используется для диагностики автомобиля, но кодировать и прошивать он может только дистанционно из VAG концерна по интернету. Для прошивки и кодирования блоков без интернета последней версией программы является ODIS Engineering, однако он не прошивает блоки относительно старых машин VAG концерна, у которых связь блоков осуществляется по протоколу KWP2000/TPKLINE. В моем случае коробка работает тоже по этому протоколу и прошить через ODIS Engineering тоже не удалось, постоянно выдавал ошибку при подготовке к прошивке.


ODIS Engineering не шьет по протоколу KWP2000/TPKLINE

Прошустрив форумы я нашел подтверждения у многих с таким же блоком АКПП как у меня, о несостоятельности ODIS Engineeiring в прошивке. Вместе с тем, узнал полезную информацию об удачных прошивках АКПП для нашего блока через программу VAS PC.

По совету многих мне все таки пришлось установить и теперь работать с VAS PC. Эх, как же я не хотел возвращаться к морально устаревшей программе VAS PC, на смену которой пришла "современная" программа ODIS, но не судьба.

Процедура установки VAS PC в основном предусматривает установку WinXP32bit и меня это огорчало и отталкивало. Мой ноутбук с процессором Intel увы не поддерживает виртуальный компьютер, в оболочке которого можно создать среду XP и установить VAS PC с сохранением Win7_64bit.
Поэтому, мне оставалось все установленное вместе с Win7_64bit сносить и все пристраивать на вновь установленное "допотопное" WinXP. Такой сложный вариант я не хотел принципиально принимать и включив мозги я начал анализировать, что мне может помешать установить VAS PC непосредственно на Win7_64bit. Путем несложных манипуляций, методом проб и ошибок мне в результате удалось установить и запустить полноценную рабочую VAS PC непосредственно на Win7Max_64bit. Ура! )


Инструкцию правильной установки драйверов на 64битной системе
можете посмотреть у меня ТУТ

Далее оставалось дело за малым, но очень важным.
Требуется предварительно прописать для файла прошивки маршрутный файл с расширением STT и закинуть вместе с файлом прошивки в папку SIDIS\HOME\DATFLASH.
После запускаем VAS PC заходим в раздел "Самодиагностика авто" далее в блоке "02 — Электроника КП" выбираем пункт "019 — Обновление ПО", если все сделано правильно видим предложение обновиться и далее действуем строго указаниям программы.


содержание файла STT для маршрутизации прошивки в VAS PC

Внимание! Необходимо обеспечить бесперебойное питание в автомобиле от зарядного устройства во избежания недоразумения с прерыванием процедуры прошивки из-за его недостатка, поскольку шьется блок только при включенном зажигании почти 30 мин., это без заведенного двигателя и работающего генератора.

Таким образом, после прошивки АКПП работает хорошо, как мы видим все значения в четвертом столбце находятся в пределах нормы, указанной в последнем столбце:


проверка в реальном времени показаний работы новой прошивки АКПП через ODIS Service ч.1


проверка в реальном времени показаний работы новой прошивки АКПП через ODIS Service ч.2

После обновления ПО обязательно делаем процедуру адаптации работы АКПП.

На этом пока все…
об ощущениях работы АКПП в поездке с новой прошивкой отпишусь
после суточной ОБКАТКИ читать ТУТ.



прошивку через синапрогу просто заливаешь (открываешь hex), жмешь на кнопку "Program" в поле "Flash"
затем жми кнопку "Advanced". откроется другое окошко. в этом окошке, там где насано "Low Fuse", пиши "7А", где "High Fuse" — пиши "FF" (оно должно быть по умолчанию)


есть две прошивки один вместе там где flarh и eprom вместе .а есть где флеш и епром отдельно .какую брать ?)


почитал внимательнее. там пишут, что:
"Flash + eeprom — это для тех, кто шьёт PonyProg`ом. Открыл файл, прошил и всё готово. Отдельно флэш и еепром — для остальных программаторов, где нужны отдельно файлы прошивки и данных…"

с учетом того, что лошадью ты шить не сможешь (лошадь не знает об USBAsp), то для avrdude (оболочка sinaprog, avrdudeprog) тебе нужно отдельные файлы для eeprom и для flash/

алгорим такой же, сначала шьешь флеш (.hex), потом открываешь файл для еeprom (.eep), и шьешь его.

фьюзы шить точно так же, как и раньше написал


спасибо )завтра попробую и напишу что вышла .)


почитал внимательнее. там пишут, что:
"Flash + eeprom — это для тех, кто шьёт PonyProg`ом. Открыл файл, прошил и всё готово. Отдельно флэш и еепром — для остальных программаторов, где нужны отдельно файлы прошивки и данных…"

с учетом того, что лошадью ты шить не сможешь (лошадь не знает об USBAsp), то для avrdude (оболочка sinaprog, avrdudeprog) тебе нужно отдельные файлы для eeprom и для flash/

алгорим такой же, сначала шьешь флеш (.hex), потом открываешь файл для еeprom (.eep), и шьешь его.

В предыдущей части статьи я рассказывал про прошивку МК с помощью программы PonyProg, теперь расскажу как прошить с помощью CodeVision AVR (далее CVAVR). Честно говоря, работа в программе не сильно отличается от PonyProg.

Для начала можете микроконтроллер поставить в панельку программатора, и подключить его к LPT порту, затем подавайте питание.

Запускаем программу CVAVR

CodeVision AVR

1) Сначала нам нужно настроить порт, заходим в меню Settings -> Programmer.

CodeVision AVR

Откроется окошко, все настройки выставляем как на рисунке ниже

CodeVision AVR

2) Нажимаем ОК, далее заходим в меню Tools -> Chip Programmer

CodeVision AVR

Откроется следующее окно:

CodeVision AVR

Ничего лишнего в этом окошке не трогаем, галочки не ставим и ничего не переключаем.

3) Выбираем нужный нам микроконтроллер из выпадающего меню, я выбрал ATmega8. Если у вас в названии микроконтроллера после ATmegaX стоит буква, к примеру V или L, то в списке выбирайте такой же МК, с такой же буквой.

4) Теперь нам нужно открыть файл прошивки, в этом окошке нажимаем File -> Load FLASH

CodeVision AVR

5) Откроется окно, где нужно будет выбрать файл прошивки с расширением .hex, кстати, не забудьте внизу из выпадающего меню "Тип файлов" выбрать этот тип файла.

CodeVision AVR

6) Файл EEPROM выбираем точно так-же, для этого нажимаем меню File -> Load EEPROM, расширение этого файла .eep, если к вашему проекту такой файл не прилагается, значит нужно прошивать только FLASH т.е. .hex.

Имейте ввиду, что процессы прошивки программы, фьюзов
и ПЗУ (EEPROM) это самостоятельные отдельные процедуры.
И рекомендуется шить сначала программу, затем ПЗУ, затем фьюзы, в принципе что у нас и происходит, когда мы загружаем все файлы для прошивки, и выставляем фьюзы в окошке.

7) Итак, файлы прошивки мы загрузили, теперь нам нужно выставить фьюзы, для моего проекта фьюзы следующие: BOOTSZ1, BOOTSZ0, SUT1, CKSEL3, CKSEL2, выставляем их.

CodeVision AVR

8) Затем ставим галочку Program Fuse Bit(s), если вы не поставите галочку – фьюзы не будут записываться.

Чтобы проверить, видит ли наша программа программатор, подключенный к LPT порту, нажимаем кнопку Reset Chip, на программаторе должны мигнуть светодиоды чтения/записи. Если светодиоды не мигают, значит нам нужно проделать операции после пункта 6, описанные в предыдущей части статьи.

9) Теперь можно прошить МК, нажимаем кнопку Program All, и начнется процесс прошивки.

CodeVision AVR

CodeVision AVR

Если вы загружали только файл прошивки FLASH, .hex, то по ходу прошивки программа предложит загрузить файл EEPROM, жмем NO, т.е. НЕТ.

CodeVision AVR

После чего пробегут еще 2 полоски и процесс прошивки завершится

CodeVision AVR

Во время прошивки МК нельзя выключать или перезагружать ПК!

Теперь можете проверить МК, поставив его в панельку вашего устройства. Если вы хотите записать другую прошивку на этот же МК, новую прошивку можно записать поверх старой, или же стереть сначала старую, потом записать новую, как вам удобнее, разницы особой нету.

11) Чтобы стереть данные с МК нажимаем Program -> Erase Chip.

CodeVision AVR

CodeVision AVR

В данной программе можно считать данные FLASH или EEPROM с МК, или просмотреть Lock биты, установленные Fuse биты. Все это в меню Read (считать).

Решение некоторых проблем с AVR

C разными программаторами, и с разными программами возникают разные ошибки, но некоторые ошибки между собой очень похожи, и устраняются одинаково. Во первых микроконтроллеры подключайте строго к указанным выводам: RESET, VCC, GND, MOSI, MISO, SCK. Если спутаете вывода, или забудете припаять один из контактов, МК не прошьется. Случайно МК в панельку можно поставить спутав вывода, т.е. задом на перед, от этого МК не сгорит, но и не прошьется конечно тоже. Напомню еще раз, что у некоторых МК, например в ATmega 64 и 128 вывода MOSI и MISO не применяются для ISP программирования, вместо них вывода MOSI подключают к ножке PE0, a MISO к PE1. Напряжение питания не должно быть ниже чем нужно, иначе МК не будет программироваться, программы будут выдавать ошибки о том, что не могут обнаружить МК.

CodeVision AVR

CodeVision AVR

Записывать левые программы, например программу, предназначенную для ATmega8 в ATmega48 нельзя. Бывает, что вы запрограммировали МК и файлы прошивки удалили с компьютера, а найти прошивку чтобы прошить другой МК не можете найти. В таких случаях просто считываете программу с микроконтроллера, например с помощью CVAVR и сохраняете его на ПК, затем этой прошивкой прошиваете другой МК.

Если вы случайно запрограммировали какой то фьюз, после чего МК залочился, вспомните, что это был за фьюз, некоторые МК с неправильно зашитыми фьюзами удается восстановить, есть несколько способов как это сделать. На К155ЛА3 можно собрать генератор чтобы восстановить МК с запрограммированным RSTDSBL, если вы выставили фьюзы на работу от внешнего генератора, подавая сигнал на вывод XTAL1 некоторые умудряются таким способом восстановить МК. Также фьюзами можно выставить тактирование от внешней RC цепочки. В таком случае придется собрать RC цепочку, чтобы опять запустить МК. Ещё есть фьюзы DWEN, SPIEN. установив которые, вы отключите возможность пользоваться ISP программатором, тут поможет только параллельный программатор, другие программаторы (к примеру тритон) или приборы, которые встречаются на просторах интернета: например этот, или ATmega Fusebit Doctor, данный прибор я собирал, но почему то он не заработал должным образом, плата все еще валяется где то в ящике, как нибудь снова надо взяться за него. Честно говоря, у меня до сих пор валяются три залоченных микроконтроллера, две меги48 и одна мега8, однажды мегу 8ю, которая перестала определяться в программаторе PonyProg (работает через COM порт) я восстановил собрав программатор STK200. Притом знаете ли, свой первый купленный микроконтроллер я прошил с первого раза, и он до сих пор работает у меня в лабораторном блоке питания.



Картинка для привлечения внимания — xkcd

Представьте себе, что вы попали на необитаемый остров. И вам жизненно необходимо запрограммировать микроконтроллер. Зачем, спросите вы? Ну, допустим, чтобы починить аварийный радиомаяк, без которого шансы на спасение резко падают.

Радуясь, что еще не забыли курс ассемблера, вы кое-как написали программу палочкой на песке. Среди уцелевших вещей каким-то чудом оказалась распечатка документации на контроллер (хорошо, что вы еще не успели пустить её на растопку!), и программу удалось перевести в машинные коды. Осталась самая ерунда — прошить её в контроллер. Но в радиусе 500 километров нет ни одного программатора, не говоря уже о компьютерах. У вас только источник питания (батарея из картошки кокосов) и пара кусков провода.

Как же прошить МК фактически голыми руками?

В качестве подопытного будет выступать МК ATtiny13 фирмы Atmel. Описанная методика работает практически с любым контроллером семейства AVR, разве что коды команд могут незначительно отличаться.

  • SCK — тактовый сигнал, синхронизирует все операции обмена данными;
  • MOSI (Master Out Slave In) — линия данных от ведущего устройства к ведомому;
  • MISO (Master In Slave Out) — линия данных, наоборот, от ведомого устройства к ведущему;
  • RESET — для разрешения прошивки по SPI нужно подать логический «0» на этот вывод.


Для своего же удобства можно добавить индикацию входных сигналов. Схема усложняется, но не чрезмерно:

Рис. 2. Схема с индикацией сигналов.

Защита от дребезга


К сожалению, просто используя кнопки для формированя сигналов SPI, хорошего результата мы не добьёмся. Причина этого — в неприятном явлении, которое называется дребезг контактов. При замыкании механические контакты соударяются, отскакивают друг от друга, и вместо одного импульса получается несколько. Для подавления дребезга придется собрать простую схему из пары логических элементов:

Рис. 3. RS-триггер для подавления дребезга.

Это RS-триггер, который переключается в состояние «1» в момент замыкания нижнего контакта переключателя и игнорирует остальные импульсы дребезга. Сброс триггера обратно в «0» происходит при замыкании верхнего контакта, то есть при отпускании кнопки.

«Ишь, разбежался!» — скажет читатель, — «Я же на необитаемом острове сижу. Где я тут возьму триггеры?» Хорошо, можно избавиться от дребезга и без электронных схем. Нужно только заменить «сухой» контакт на мокрый жидкостный. Выключателем будут служить два электрода, опускаемые в проводящую жидкость.

Сигналы MOSI и RESET не требуют подавления дребезга, в отличие от SCK: здесь значение имеет только уровень сигнала в момент выборки, а не его фронты.



Рис. 4. Временная диаграмма работы SPI.

SPI является синхронным интерфейсом: все операции синхронизированы фронтами тактового сигнала (SCK), который вырабатывается ведущим устройством. Максимальная скорость передачи ограничена величиной 1/4 тактовой частоты контроллера. На минимальную же скорость нет никаких ограничений: без тактового сигнала обмен данными «замораживается», и интерфейс может оставаться в статическом состоянии сколь угодно долго.

Передача по SPI осуществляется в полнодуплексном режиме, по одному биту за такт в каждую сторону. По возрастающему фронту сигнала SCK ведомое устройство считывает очередной бит с линии MOSI, а по спадающему — выдает следующий бит на линию MISO. Все внимание на рисунок 4.

  1. Перевод контроллера в режим программирования;
  2. (опционально) Чтение идентификатора устройства;
  3. Стирание;
  4. Запись во flash;
  5. (опционально) Проверка записанного;

Включение режима программирования

Режим программирования включается подачей «0» на ногу RESET. Но есть некоторые тонкости. Atmel рекомендует сначала выставить на выводах RESET и SCK низкий уровень, а только потом подавать на контроллер питание. Если такой возможности нет, нужно после включения питания подать «0» на SCK, а затем положительный импульс на RESET:



Рис. 5. Перевод МК в режим программирования.

Но и это еще не все. Далее нужно передать команду на собственно включение режима программирования: 10101100 01010011 xxxxxxxx xxxxxxxx



Рис. 6. Команда «Program Enable».

Биты, обозначенные как x, могут быть любыми. Во время передачи третьего байта контроллер должен переслать обратно второй байт (01010011). Если это произошло, значит, все хорошо, команда принята, контроллер ждет дальнейших инструкций. Если ответ отличается, нужно перезагрузить МК и попробовать все сначала.

Проверка идентификатора



Рис. 7. Команда «Read Signature Byte».

Прежде чем что-либо писать в память МК, нужно убедиться, что перед нами именно та модель, которая нужна. Каждая модель контроллера имеет свой трехбайтный идентификатор (Signature). Прочитать его можно командами вида
00110000 000xxxxx xxxxxxbb xxxxxxxx
Вместо bb (третий байт команды) следует подставить 00 для первого байта идентификатора, 01 — для второго и 10 — для третьего. Соответствующий байт идентификатора будет передан контроллером при отправке 4-го байта команды.

Для ATtiny13 значение идентификатора равно 00011110 10010000 00000111 (0x1E 90 07).

Очистка контроллера



Рис. 8. Команда «Chip Erase».

Следующим шагом будет очистка памяти МК, которая осуществляется посылкой команды «Chip Erase»
10101100 100xxxxx xxxxxxxx xxxxxxxx
Этой командой выполняется стирание содержимого Flash и EEPROM (все ячейки будут содержать FF), а также снятие lock-битов, если они установлены.

Запись во flash-память

Память программ (Flash) в ATtiny13 состоит из 512 двухбайтных слов (1К байт). Адрес слова имеет разрядность 9 бит. Flash-память разделена на страницы, каждая страница имеет размер 16 слов (всего получается 32 страницы). Запись во flash осуществляется в два этапа.

Сначала необходимо загрузить данные в буфер страницы, для этого используется команда «Load Program Memory Page»
01000000 000xxxxx xxxxbbbb iiiiiiii — для загрузки младшего байта слова, и 01001000 000xxxxx xxxxbbbb iiiiiiii — для загрузки старшего.
4 младших бита 3-го байта команды bbbb — адрес слова на странице, iiiiiiii — загружаемый байт. Сначала всегда должен загружаться младший байт слова, а затем — старший байт того же слова.



Рис. 9. Команда «Load Program Memory Page».

После того, как буфер страницы загружен, нужно выполнить команду «Write Program Memory Page» 01001100 0000000a bbbbxxxx xxxxxxxx для записи страницы непосредственно в память контроллера.
Младший бит второго байта и старшие 4 бита третьего a:bbbb — пятибитный номер страницы для записи.



Рис. 10. Команда «Write Program Memory Page».

Все это выглядит довольно запутанно, но ничего сложного нет. Адрес любого байта памяти программ состоит из 10 бит: ppppp:bbbb:w, где
ppppp — номер страницы (используется в команде «Write Program Memory Page»);
bbbb — адрес слова на странице (в команде «Load Program Memory Page»);
w — бит, определяющий старший или младший байт в слове (зашифрован в первом байте команды «Load Program Memory Page»).

Чтение flash



Рис. 11. Команда «Read Program Memory».

После записи прошивки в МК неплохо бы проверить записанное, так как никакой проверки целостности данных не выполнялось. Единственный способ проверки состоит в том, чтобы прочитать весь объем flash-памяти и сравнить с оригиналом.

Читать память программ легче, чем писать в нее. Забудьте про страничную организацию, чтение выполняется побайтно. Команда «Read Program Memory» выглядит так:
00100000 0000000a bbbbbbbb xxxxxxxx — для чтения младшего байта слова, и 00101000 0000000a bbbbbbbb xxxxxxxx — для старшего.
Младший бит второго байта и весь третий байт a:bbbbbbbb — адрес слова в памяти. Прочитанный байт возвращается во время передачи 4-го байта команды.

Завершение программирования

Пожалуй, самая простая операция. Чтобы завершить программирование и перевести МК в рабочий режим, достаточно подать на RESET логический уровень «1». Контроллер запустится и будет работать по новой программе.


Настало время воспользоваться полученными знаниями на практике. Жертва эксперимента — ATtiny13 — воткнут в макетную плату, рядом собран формирователь сигналов, всё готово:

Рис. 12. Экспериментальная схема.

Шить будем программу вида «проще некуда»:

Всё, что она делает — это выдает единицу на ногу PB1 и уходит в бесконечный цикл. В машинных кодах она занимает всего четыре слова:

Для прошивки её в контроллер необходимо набрать следующие команды:

Ключ на старт, поехали!

Всего 425 нажатий, и МК оживает. Теперь вас точно найдут и спасут с этого проклятого острова.

Читайте также: