Как научиться программировать программатор коми блок
Перейти к содержимому

Как научиться программировать программатор коми блок

  • автор:

Программирование TR-41/TR-71

Программирование блока радиопередатчика TR71, в дальнейшем Блок, осуществляется с помощью персонального компьютера (ПК) через порт последовательного интерфейса, используя программу PROG_PRD, написанную в операционной системе MS-DOS. Целью программирования является запись во внутреннюю электрически перепрограммируемую память Блока информации о номере Блока и об алгоритме его работы. Программа PROG_PRD предназначена для программирования Блока, содержащего микропроцессор версии 2 (двухбайтовый вариант, тип 2) и версии 4 (четырехбайтовый вариант, тип 7).

Для подключения Блока к ПК используется программатор. Штекер четырехпроводного кабеля RS Блока вставляется в четырехконтактный разъем на плате программатора, в свою очередь штекер кабеля RS232 программатора вставляется в разъем последовательного порта ПК. Схема подключения Блока к ПК для программирования приведена на рис.1.

Рекомендуется создать отдельную папку для программы PROG_PRD (например, PRD), в которой будут находиться файлы prog_prd.exe, program.ini и файлы данных вида *.dat. Инициализационный файл программы PROG_PRD program.ini имеет следующий вид:

Text View: C:\PRD\program.ini [Rs232 settings] Speed : 1200 DTR : Active RTS : Active Word lenght : 8 bits Stop bits : 1 stop bit Parity control : No I/O port : COM2

В данном файле допускается изменение номера последовательного порта (выделено жирным шрифтом) в соответствии с номером последовательного порта, к которому подключается плата сопряжения. Запуск программы PROG_PRD осуществляется трехкратным нажатием клавиши Enter, после выбора файла prog_prd.exe. При этом после двухкратного нажатия клавиши Enter на дисплее ПК появляется краткое описание программы и порядок работы с ней. В результате трехкратного нажатия клавиши Enter на дисплее ПК появляется строка выбора режимов, строка номера объекта и таблица данных, определяющих алгоритм работы Блока. Переход со строки на строку, и по строке осуществляется при помощи клавиш курсора «вверх», «вниз», «влево», «вправо». При этом место нахождения в программе подсвечивается. Выбор режима или параметра Блока, подлежащего программированию, осуществляется нажатием клавиши Enter. Запись новых значений параметров также осуществляется нажатием клавиши Enter. Отмена, вышеуказанных операций, осуществляется нажатием клавиши Esc. При вводе строк и чисел возможно использование клавиш курсора «влево», «вправо», Enter, Esc, Delete, Back Space.

Выход — режим выхода из программы.
Загрузка файла — режим, позволяющий загрузить номер Блока и его данные в таблицу из заранее созданного и сохраненного файла вида *.dat. При выборе этого режима в левом нижнем углу дисплея появляется таблица вида:

C:\PRD\ ..\ *.dat . prog_prd.exe program.ini

Необходимый файл выбирается с помощью клавиш курсора «вверх», «вниз», а также клавиш Page Up, Page Down. Запись данных выбранного файла в строку номера объекта и таблицу данных осуществляется двухкратным нажатием клавиши Enter.
Запись файла — режим, позволяющий сохранить номер Блока и соответствующую ему таблицу данных, находящихся на дисплее, в файле вида *.dat. При выборе этого режима в левом нижнем углу дисплея появляется таблица вида:

C:\PRD\ ..\ *.dat . prog_prd.exe program.ini

Вы можете как создать новый файл, так и переписать уже существующий, для чего с помощью клавиш курсора «вверх», «вниз», а также клавиш Page Up, Page Down выберете уже существующий файл вида *.dat, который вы хотите переписать, нажатием клавиши Enter. При записи нового файла, введите его имя, состоящее не более чем из восьми символов. Если вы наберете название уже существующего файла, новый файл записан не будет. Запись нового файла и перезапись уже существующего осуществляется повторным нажатием клавиши Enter.
Загрузка с порта — режим чтения информации из памяти Блока. При удачном прочтении информации из памяти Блока на месте строки выбора режима появляется «мигающая» строка: КОНФИГУРАЦИЯ СЧИТАНА НОРМАЛЬНО. На дисплее появляется номер Блока и таблица данных. При этом номер Блока и данные подсвечиваются серым цветом. В случае неудачного прочтения информации из памяти Блока под таблицей данных появляется строка ПОСЫЛАЕМ ЗАПРОС, чередующаяся со строкой НЕТ ОТВЕТА, что говорит о том, что надо проверить соответствие номера последовательного порта, к которому подключен Блок через плату сопряжения, номеру, заданному в файле program.ini, а также правильность подключения Блока к ПК (см. п.2), исправность блока питания и произвести заново действия согласно п.4. Выход из данного режима осуществляется нажатием клавиши Esc.
Запись на порт — режим записи информации в память Блока. В память Блока записывается номер Блока и данные из таблицы, находящиеся на дисплее ПК. Номер и таблица данных могут быть занесены на дисплей как в ручную при помощи клавиатуры, так и считыванием заранее записанного файла (см. режим Загрузка файла). В случае успешной записи информации в память Блока на месте строки выбора режима появляется строка НАСТРОЙКИ ПОСЛАНЫ НОРМАЛЬНО, при этом номер блока и данные таблицы подсвечиваются серым цветом. В случае неудачной записи информации в память Блока под таблицей данных появляется строка ПОСЫЛАЕМ ДАННЫЕ, чередующаяся со строкой НЕ ПОДТВЕРЖДЕНО, что говорит о том, что надо проверить соответствие номера последовательного порта к которому подключен Блок через плату сопряжения номеру, заданному в файле program.ini, а также правильность подключения Блока к ПК (см. п.2), исправность блока питания и произвести заново действия согласно п.4. Выход из данного режима осуществляется нажатием клавиши Esc.
Verify — режим сравнивания информации из памяти Блока с текущей информацией, находящейся на дисплее ПК. Номер и данные на дисплее ПК, совпадающие с соответсвующими номером и данными, записанными в память Блока, подсвечиваются серым цветом. При несовпадении информации на дисплее с соответствующей информацией из памяти Блока программа прекращает дальнейшее сравнение, эти данные подсвечиваются красным цветом и под таблицей данных появляется поясняющая надпись ( например: НЕСОВПАДЕНИЕ НОМЕРА ОБЪЕКТА ). Для продолжения процедуры сравнения необходимо нажать клавишу Enter. Выход из данного режима осуществляется нажатием клавиши Esc. Если после запуска режима Verify на дисплее ПК появляется надпись !!ОШИБКА ЧТЕНИЯ С ПОРТА ИЛИ ОШИБКА CRC ПАМЯТИ ОБЪЕКТА, необходимо проверить соответствие номера последовательного порта, к которому подключен Блок через плату сопряжения номеру, заданному в файле program.ini, а также правильность подключения Блока к ПК (см. п.2), исправность блока питания и произвести заново действия согласно п.4

3.3.1.Имя — строки с 1 по 9 наименование входных терминалов Блока ( терминалы 2 соответственно, см. маркировку на плате Блока); строка 10 — Pbat. PBat — выход внутреннего устройства Блока, контролирующего значение напряжения питания постоянного тока, подводимого к Блоку.
3.3.2.Описание — для описания источника сигнала предоставлена строка из 20- ти символов.
3.3.3.Уровень тревоги — тип воздействия на входные терминалы Блока, приводящий к передаче сообщения тревоги: «Низ.» — «замыкание»; «Выс.» — » размыкание «.
Уровень тревоги, соответствующий Pbat (10 строка), должен быть задан «Низ.». Применительно к входному терминалу 10 ( 9-я строка ), если он используется для передачи сообщений о постановке/снятии, передача сообщения тревоги происходит при постановке на охрану.
3.3.4.Антидребезг — время непрерывного воздействия на входные терминалы Блока и на вход Pbat, вызывающего передачу сообщения тревоги или отбоя. В таблицу данных записывается число от 0 до 127, умножение которого на 50 мс дает время антидребезга в миллисекундах (от 0 мс до 7400 мс).
3.3.5.Задержка срабатывания — время задержки передачи сообщения тревоги по истечении времени антидребезга при воздействии на входные терминалы Блока и на вход Pbat. В таблицу данных записывается число от 0 до 127, умножение которого на 1 сек. дает время задержки в секундах (от 0 сек. до 127 сек.).
3.3.6.Задержка восстановления — время задержки передачи сообщения отбоя по истечении времени антидребезга после снятия воздействия на входные терминалы Блока и на вход Pbat, приведшее к передаче сообщения тревоги. В таблицу данных записывается число от 0 до 127, умножение которого на 1 сек. дает время задержки в секундах (от 0 сек. до 127 сек.).
3.3.7.24-часовая зона — функция, определяющая алгоритм срабатывания Блока по воздействию на терминалы 2 — 8 в зависимости от воздействия на терминал 9. Если «Да», то Блок срабатывает вне зависимости от воздействия на терминал 9 при соблюдении условий, оговоренных в п.п. 3.3.5.,3.3.6. Если «Нет», то Блок передает сообщение тревоги при соблюдении условий, оговоренных в п.п. 3.3.5., только в случае, когда он поставлен на охрану. Данная функция для входа PBat должна быть задана «Да».
3.3.8.Сообщение тревоги — передаваемое Блоком при воздействии на вход уровня тревоги. Для Блока «тип 2» это сообщение выбирается в базе событий, описанной в РУКОВОДСТВЕ ОПЕРАТОРА программы GUARDNET, только из событий вида «0000ХХХХ», причем в таблицу данных заносятся два байта «ХХХХ». Для Блока «тип 7» это сообщение выбирается в базе событий, только из событий вида «ХХХХАААА», причем в таблицу данных заносятся два байта «ХХХХ».
Для входа Pbat должны быть заданы сообщения 029A для Блока «тип 2» и 1318 для Блока «тип 7».
3.3.9.Сообщение отбоя — сообщение, передаваемое Блоком при при снятии воздействия на вход уровня тревоги. Для Блока «тип 2» это сообщение выбирается в базе событий, описанной в РУКОВОДСТВЕ ОПЕРАТОРА программы GUARDNET только из событий вида «0000ХХХХ», причем в таблицу данных заносятся два байта «ХХХХ». Для Блока «тип 7» это сообщение выбирается в базе событий только из событий вида «ХХХХАААА», причем в таблицу данных заносятся два байта «ХХХХ». Для входа Pbat должны быть заданы сообщения 02DA для Блока «тип 2» и 3318 для Блока «тип 7».
3.3.10.Сирена — функция, определяющая алгоритм работы программируемого выхода Блока при воздействии на терминалы 2 — 9. Если «Нет», то программируемый выход сохраняет свое состояние, принятое им после подключения питающего напряжения к Блоку, неизменным, вне зависимости от воздействия на терминалы 2-9. Если «Да», то в случае воздействия на вход уровня тревоги, после передачи сообщения тревоги, программируемый выход переключится в противоположное состояние на время, заданное в строке под таблицей.
3.3.11.Длительность сирены — время, на которое переключится программируемый выход при воздействии на вход уровня тревоги (см. также п.3.3.10.). В таблицу данных записывается число от 0 до 127000, которое соответствует времени переключения в миллисекундах (от 0 сек. до 127 сек.), причем от 0 до 6,4 сек. время устанавливается с точностью 50 мс, а с 7 сек. до 127 сек. с точностью 1 сек.
3.3.12.При постановке — время, на которое переключится программируемый выход при воздействии на терминал 10 уровня постановки на охрану, причем программируемый выход переключится только после того, как Блок передаст команду постановки. В таблицу данных записывается число от 0 до 127000, которое соответствует времени переключения в миллисекундах (от 0 сек. до 127 сек.), причем от 0 до 6,4 сек. время устанавливается с точностью 50 мс, а с 7 сек. до 127 сек. с точностью 1 сек.
3.3.13.Уровень сирены — определяет состояние, которое примет программируемый выход после подключения питающего напряжения к Блоку. Если «Низ.», то после подключения питающего напряжения к Блоку на программируемый выход проключится корпус (общий провод) Блока. Если «Да», то после подключения питающего напряжения к Блоку на программируемом выходе будет «третье состояние».

Произвести подключение Блока к ПК в следующей последовательности:
— вставить штекер кабеля RS232 программатора в разъем последовательного порта ПК;
— вставить штекер четырехпроводного кабеля RS Блока в четырехконтактный разъем на плате программатора;
— подключить питающий кабель Блока к терминалам «+» и «-» программатора.
— подключить кабель блока питания программатора к программатору;
— включить питание программатора;
Включить ПК. Проверить соответствие номера последовательного порта ПК, соединенного с программатором, номеру заданному в инициализационном файле program.ini программы PROG_PRD.
Запустить программу PROG_PRD ( см. п.3) и произвести запись информации с ПК в Блок или считать информацию из Блока, или сравнить информацию, записанную в Блоке с информацией на ПК.
Выйти из программы. Выключить ПК.
Произвести рассоединение в последовательности, обратной подключению.

  • О компании
  • Организация радиосети
  • Оборудование
  • Программное обеспечение
  • Техническая поддержка
  • Контакты

Программатор ПРИЗ-SA Си-Норд

Программатор ПРИЗ-SA Си-Норд

Прибор приемо-контрольный Программатор ПРИЗ-SA Си-Норд

Код: 3601
Производитель: Си-Норд

ПРИЗ-SA Программно-аппаратный комплекс для программирования радиопередатчиков TRV(U)-100, объектовых блоков «SERGEANT-2M», передатчиков TP-100 GSM (II).

Программирование приборов и …

Цена по запросу

ПРИЗ-SA Программно-аппаратный комплекс для программирования радиопередатчиков TRV(U)-100, объектовых блоков «SERGEANT-2M», передатчиков TP-100 GSM (II).

Программирование приборов и передатчиков производится через персональный компьютер с помощью программного обеспечения ПРИЗ-SA (дистрибутив с программой входит в комплект поставки)

Программатор имеет два режима программирования устройств:
— режим немедленного программирования (позволяет программировать оборудование прямо на объекте через ПК)
— режим отложенного программирования (позволяет производить перепрограммирование объектового оборудования без его демонтажа с объекта). Необходимые параметры записываются в память ПРИЗ-SA, а затем копируются в память программируемого устройства

Программирование EEPROM 93C76. Пишем программатор. Часть 1

Микросхема 93C76 представляет собой электрически перезаписываемое ПЗУ с последовательным доступом, объемом 8 Кбит. Содержит, непосредственно, блок ПЗУ + логический контроллер для работы с шиной SPI. Напряжение питания 5.0 Вольт. Имеет два вида адресации данных (по 8 бит и по 16 бит) — об этом далее в статье. Классификация микросхем семейства 93C76/86:
93C86 — объем увеличен в 2 раза, до 16 Кбит.
93LC76 — с пониженным напряжением питания 2.5 В.
S93C76 — в корпусе SOIC-8 (SMD-монтаж).

Зачем программировать 93C76?

Микросхема применяется в автомобильных блоках, платах управления жесткими дисками, различных мультимедийных устройствах. Если есть необходимость запрограммировать данное ПЗУ срочно, рекомендую воспользоваться практически любым китайским программатором, это можно сделать даже на недорогих моделях. Но мне интересно не просто понажимать кнопки, а разобраться в процессе, в сути происходящего. На создание этой статьи меня вдохновило видео от известного ютубера Ben Eater. В нём показано, в том числе, вычитывание данных из ПЗУ данного типа. В своём коде я частично буду ориентироваться на его код, но при этом мы реализуем все функции программатора: чтение, стирание, запись.

Какие средства необходимы?

Как и в видео, нам понадобится Arduino Uno (подойдет, в т.ч., и китайская копия), сама микросхема 93C76 (у меня нашлась S93C76 с адаптером под DIP-8) и макетная плата с проводами. Конечно, я мог бы расписать всё то же самое, например, для Atmega8, но в нашем случае не нужно всё усложнять, Arduino будет вполне достаточно для демонстрации принципа работы с данной ПЗУ, так как имеется COM-порт для связи с контроллером, через который мы и будем обмениваться информацией в связке ПК — Arduino — 93C76. Язык программирования — си. Итак, приступим.

Этап 1. Подготовка. Распиновка ПЗУ. Соединение аппаратной части.

Рассмотрим назначение выводов ПЗУ: Левая половина — выводы шины SPI, для связи с микроконтроллером (далее — Arduino). Правая половина — технические выводы.

  1. CS — выбор чипа. Определяет, ведётся ли работа с этим чипом в данный момент.
  2. CLK — тактовый сигнал. Его выдаёт Arduino.
  3. DI — вход для данных. Данные выдаёт Arduino.
  4. DO — выход данных. Его принимает Arduino. На этом выходе будет появляться информация после получения команды на чтение.
  5. VSS — Минус питания, в нашем случае — земля (GND)
  6. ORG — влияет на организацию порядка хранения данных и, соответственно, адресацию. Если установлен низкий уровень, то будет происходить приём данных по 8 бит (режим x8), если высокий — то по 16 бит (x16). Режим x8 показан на видеозаписи от Ben Eater. Некоторые факты о режиме x16, полученные опытным путём:
    1. Если микросхема включена в режим x16, и после команды записи передать только 1 байт, то второй байт будет заполнен нулями, то есть, произойдет потеря данных в ячейке.
    2. Адресация при записи в режиме x16 осуществляется с шагом 2, т.е. не 0,1,2. f, а 0,1,2..7, так как по каждому адресу будет храниться по 2 байта. При чтении можно получить отдельно любой байт (не обязательно пару) по его обычному адресу (0. f), либо несколько байт подряд, так как чтение выполняется последовательно (после подачи команды данные поступают, пока идёт и не прекращается тактовый сигнал).
    3. В моей микросхеме, не смотря на состояние уровня на ORG, всё равно использовалась 16-разрядная организация памяти. Возможно, у некоторых производителей эта функция просто не работает, поэтому иногда на форумах встречаются записи о том, что программатор не может корректно записать микросхему. Либо у моей микросхемы был повреждён данный вывод. В любом случае, к этому моменту нужно относиться внимательно, иначе возникнет потеря данных.
  7. PE — (active low) вывод для защиты микросхемы от записи и стирания. Если в вашем устройстве не нужна запись данных, а лишь их чтение, то вывод подключается на землю. В нашем случае мы его установим на высокий логический уровень, так как будем писать в ПЗУ. В устройстве есть две защиты записи — аппаратная (вывод PE) и программная (EWEN). Если одну из них не снять — записать в чип не получится.
  8. VCC — плюс питания (4.5-7 В для C76, 2.5-7 В для LC76)

Выводы SPI подключаются к любым удобным цифровым ножкам микроконтроллера. В нашем случае, это будут ножки 2-6. Питание можно взять также от МК. Технические выводы я установил так: PE — высокий, ORG — высокий.

Теперь соединим платы:

Этап 2. Изучаем принцип работы ПЗУ. Передача и чтение данных

Когда все соединения выполнены, откроем редактор скетчей Arduino. Для начала, напишем определение ножек для удобной работы:

#define CS 2 #define CLK 3 #define DI 4 #define DO 5

В setup инициализируем COM-порт для связи, назначим направление данных для выводов согласно этапу 1:

Serial.begin(57600); pinMode(CS, OUTPUT); pinMode(CLK, OUTPUT); pinMode(DI, OUTPUT); pinMode(DO, INPUT);

Далее, необходимо разобраться, как работать с шиной SPI. Для этого смотрим в даташит микросхемы:

Отсюда для минимальной работы нам будут нужны команды READ, EWEN, ERAL, WRITE, WRAL (опционально). Передача команды осуществляется переключением сигналов в определенном порядке, который также указан в даташите микросхемы. Например, чтение:

Исходя из этого, мы видим:

  • Первым включается сигнал CS, он же выключается последним.
  • Сначала на DI устанавливается уровень, соответствующий очередному биту подаваемой команды, затем включается и тут выключается тактовый сигнал, как бы «подтверждая» действие и фиксируя данные. Соответственно, нам нет необходимости укладываться во временные рамки — нету жестких требований к таймингам. Скорость переключения портов Arduino высока, но и частота срабатывания логики микросхемы — до 2 МГц. Поэтому, с учетом времени, затрачиваемого на переключение уровней через библиотеки Arduino, мы можем просто подавать сигналы, а задержку проставлять лишь после длительных функций (таких, как ERAL, WRAL).
  • При чтении, после передачи команды + адреса, на выходе DO начнет появляться информация, переключаемая тактовым сигналом. Её мы будем извлекать. Разрешается последовательное чтение всего массива: если не прекратить подачу тактового сигнала, то дальше будут передаваться следующие биты информации, таким образом, команду на чтение отдельно для каждого байта подавать не обязательно.
  • При записи мы передаём последовательность, состоящую из команды, битов адреса A9-A0, и двух байт информации (для организации x16), или адреса A10-A0, но одного байта (для организации x8). При этом для записи каждых двух байт (байта) команду надо передавать заново, последовательная запись в весь массив не осуществляется.

Инструкция состоит из 14 для x8 (либо 13 для x16) бит, порядок следующий: установили первый бит, переключили CLK вверх и тут же вниз, установили второй бит, переключили CLK, и так далее. Исходя из этого, давайте реализуем функцию «sendInstruction», для того, чтобы передать данные в ПЗУ.

void sendInstruction(word comand) < //SEND 14 for (word mask = 0b10000000000000; mask >0; mask >>= 1) < if (comand & mask) < digitalWrite(DI, HIGH); >else < digitalWrite(DI, LOW); >digitalWrite(CLK, HIGH); digitalWrite(CLK, LOW); > >

Функция принимает в качестве аргумента слово (команду), после чего «прогоняет» шину столько раз, сколько чисел содержится в маске. Сдвинули маску в сторону — переключили уровни, переключили CLK, и так далее, пока маска не кончится (не уйдет последняя единица).

Команды (слова) для различных операций следующие (согласно даташиту):

  • READ (читать с адреса) — 0b1100000000000 + адрес
  • WRITE (запись в ячейку) — 0b1010000000000 + адрес
  • EWEN (разрешить запись и стирание) — 0b10011000000000
  • ERAL (стереть всё) — 0b10010000000000
  • WRAL (записать всё 2 байтами) — 0b10001000000000 + 2 байта (по 8 переключений)

То есть, например, вызвав по очереди

sendInstruction(0b10011000000000); sendInstruction(0b10010000000000);

Мы сначала разрешим запись (убедившись, что она разрешена на 7 ножке микросхемы), а затем, сотрём чип. Данные функции реализуются следующим образом:

void ERAL() < // ERASE CHIP digitalWrite(CS, HIGH); sendInstruction(0b10010000000000); digitalWrite(CS, LOW); delay(15); >

Задержка в 15 мс на стирание всего чипа согласно даташиту. При чтении и записи:

sendInstruction(0b1100000000000 + address); 

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

byte readByte() < byte data = 0; for (byte bit = 0; bit < 8; bit +=1) < digitalWrite(CLK, HIGH); digitalWrite(CLK, LOW); if (digitalRead(DO)) < data = data else < data = data > return data; >

После передачи инструкции на чтение, данная функция должна быть вызвана требуемое количество раз (1 для одного байта, 16 для 16 байт и т.д.) при помощи цикла for, а возвращаемый байт data — последовательно записан в массив. Захват уровня на ножке (чтение) осуществляется встроенной в библиотеку Arduino функцией digitalRead.

Для записи реализуем отдельную функцию, отправляющую один байт:

void sendByte(word comand) < //SEND 8 for (word mask = 0b10000000; mask >0; mask >>= 1) < if (comand & mask) < digitalWrite(DI, HIGH); >else < digitalWrite(DI, LOW); >digitalWrite(CLK, HIGH); digitalWrite(CLK, LOW); > >

Далее мы будем её вызывать после отправки инструкции с адресом на запись. Вызывается один раз для x8, два раза подряд для x16, например:

void WRITE(word addr, byte bt1, byte bt2)

То есть, принимаемые аргументы: адрес (например, 0x030f для x8 или 0x0107 для x16) и два байта информации. Исходя из этого высылаем инструкцию на запись, и два байта, которые мы записываем. После этого дополнительная задержка в 5 мс (согласно даташиту — 3 мс, но иногда не успевает в данный тайминг и пишется с ошибками). Как я уже раньше упоминал, если не передавать второй байт — вместо него просто будут записаны нули.

На этом функции обращения к ПЗУ (чтение, стирание, запись) выполнены. Для остальных команд выполняются по аналогии. Далее попытаемся написать UI для работы с этими функциями.

Этап 3. Реализуем функции программатора x16 в ПО для Arduino

Функция «read», скопирована с той, которую выполнил Ben Eater в своём видео. Функция принимает начальный адрес, с которого требуется начать чтение, и количество байт для чтения. Результат отправляет на COM порт в следующем формате: адрес HEX, 16 байт в HEX, 16 байт в виде ASCII-символов, если в таблице находится соответствующий (в противном случае заменяется на точку). Сама функция:

void READ(word startAddress, int endAddress) < //read fashion HEX by Ben Eater byte line[16]; //VARIABLE FOR WORD for (word address = startAddress; address < endAddress; address += 8) < //1024 for C76, 2048 for C86; 8 for 16-BIT ORG, 16 for 8-bit ORG char temp[6]; //VARIABLE FOR ADDR - TMP sprintf(temp, "%04x ", address); Serial.print(temp); //PRINT ADDR digitalWrite(CS, HIGH); //BEGIN READING DATA sendInstruction(0b1100000000000 + address); //please add external zero for x8 org for (int i = 0; i < 16; i += 1) < //READ DATA BYTE FOR EVERY LINE BYTE line[i] = readByte(); >digitalWrite(CS, LOW); for (int i = 0; i < 16; i += 1) < char temp[4]; //VARIABLE FOR DATA IN HEX sprintf(temp, "%02x ", line[i]); Serial.print(temp); //PRINT DATA IN HEX - 16 BYTES >Serial.print(" "); // PRINT DATA IN LETTERS HEX ARR. for (int i = 0; i < 16; i += 1) < //PRINT DATA IN LETTERS - 16 if (line[i] < 32 || line[i] >126) < Serial.print("."); >else < Serial.print((char) line[i]); >> Serial.println(); //PRINT NEW LINE > >

Вызовем её: READ(0x00, 512). Результат:

Так как микросхема была очищена, она заполнена FF байтами. Конечный адрес записи: 01ff (что является 511 «двойным байтом», если учесть, что нумерация идет с нуля). Давайте подсчитаем: мы имеем 64 строки по 16 байт, итого, 1024 байта (килобайт), что и заявлено в даташите. Если бы была микросхема LC86, то было бы доступно 2 килобайта. Если бы была выбрана организация x8 — то последним адресом был бы 1023, а не 511.
Если пробовать читать или писать дальше доступного пространства — последние биты адреса (A10-A11 и т.д.) игнорируются, и чтение сначала начинается по кругу, а далее вообще не происходит (так как микросхема LC76 не поймёт данную ей входящую команду).

Теперь попробуем написать функцию, записывающую в EEPROM последовательность байт, полученную по терминалу:

void writeWord(word beginAddress) < //WRITES 16 BYTES SEQUENCE FROM TERMINAL while (Serial.available() == 0) < >byte lineToSend[16]; int recLen = Serial.readBytes(lineToSend, 16); for (int i = 0; i < recLen; i += 2) < WRITE(beginAddress+(i/2), lineToSend[i], lineToSend[i+1]); >>

Функция ожидает ввод с терминала, до этого будет висеть в бесконечном цикле. Принимает в качестве аргумента адрес, по которому нужно писать. Далее, пишет 16 принятых байт в память EEPROM.

Данная функция адаптирована под 16-битную организацию (x16): так как мы получаем по 1 байту (функция readBytes), то массив имеет размер 16 байт, отправляются на микросхему же байты попарно: i прибавляется кратно двум, обращение идет по адресу от 0 до 7, при этом, байты передаются 0-1, 2-3 и т.д., то есть, от 0 до f.

При 8-битной записи (режим x8) можно непосредственно отправлять WRITE(адрес, байт) 16 раз.

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

void waitAddr() < if (Serial.available() >0) < byte receivedAddr[2]; //RECEIVES ADDRESS IN 2 SEPARATE BYTES (example: 0x30 0x01) int recLen = Serial.readBytes(receivedAddr, 2); word programAddr = 0; programAddr |= receivedAddr[0]; programAddr >

Конечно, эту функцию я написал немного криво, впрочем, для демонстрационных целей её достаточно. Вызовем waitAddr() в loop. Он сразу же будет ожидать два байта адреса и 16 байт для записи. Теперь стандартный терминал Arduino нам не помощник — так как он умеет передавать только ASCII символы. Для тестирования подключимся по CoolTerm, передадим значения в HEX, и прочитаем то, что у нас получилось. Передаём адрес, далее Arduino отвечает, что приняло его, и отправляет нам его же обратно в DEC виде. Значения сходятся:

Теперь передадим информацию, и сразу же выполним чтение всего блока, чтобы посмотреть результат:

Функция работает. После отключения питания эти данные уже останутся в памяти ПЗУ. Перебрав в терминале все адреса от 0000 до 01f8 мы сможем записать полностью килобайт информации, тем самым, цель работы является достигнутой. После записи всей микросхемы рекомендуется проверить CRC, прочитав её, но это делается на ответной части в ПК, а не в микроконтроллере.

Таким образом, мы получили возможность чтения данных из ПЗУ, и записи их из терминала. Для того, чтобы реализовать полноценный программатор, который способен записывать полученные данные в бинарный файл, и, в свою очередь, записывать данные из бинарного файла в ПЗУ необходима разработка «ответной» части ПО для компьютера, её я попытаюсь реализовать на python (хотя в компьютерной разработке я не силён, мне удавалось сделать более-менее работоспособные скрипты).

Специально для habr.com, 2022 год.

Как научиться программировать программатор коми блок

Архив. Обзорный материал

Для начала немного общих сведений. В системах Январь 5.хх, Январь 7.2, Микас 7.хх, Bosch MP7.0 и Bosch M7.9.7, VS5.1, VS5.6 используется два вида памяти, сохраняемой при отключении питания – FLASH и EEPROM.

Более современные контроллеры Январь 7.2+, Bosch M7.9.7+, Микас-11хх, М7.3 используют процессор с внутренней памятью и не имеют внешнего FLASH.

FLASH – перепрограммируемая память, используется для постоянного хранения программы управления системой впрыска и калибровок. Именно эту память переписывают при «чип-тюнинге». Память эта статична и в процессе работы не изменяется. Для перезаписи нужно использовать специальный адаптер и программу – загрузчик. Запись ведется по линии диагностики k‑line, контроллер перед записью должен быть переведен в режим программирования. В ЭБУ VS5.1, Январь 5.хх и Микас 7.хх применена микросхема 28F010, 1 Мбит (128 Кб). Это дает возможность записывать последовательно 2 прошивки (длина прошивки 512 Кбит (64Кб)). Об этом смотрите в разделе «Двухрежимные прошивки».

EEPROM – многократно перезаписываемая память, используемая для хранения временной информации, сохраняемой при отключении питания. В EEPROM хранится коэффициент коррекции СО (в системах, где есть СО-регулирование), пароль и коды иммобилизатора, а так-же паспортные данные автомобиля: VIN, номер кузова, двигателя, имя прошивки и т.д. Доступ к этой памяти возможен как извне, с помощью программ – загрузчиков, так и изнутри управляющей программы. (Например, регулировка с тестера или компьютера уровня СО).

Bosch MP7.0. – Системы распределенного впрыска топлива с электронным блоком управления BOSCH MP7.0 под нормы токсичности EURO-II и EURO-III получила широкое распространение на инжекторных автомобилях «Нива» 21214, 2123, Шевроле-Нива и на партиях «десятого» семейства, ориентированных на внешний рынок. Аппаратная и программная части ЭБУ этого семейства полностью были разработаны фирмой «BOSCH», на «АвтоВАЗ» производилась только окончательная калибровка.

В качестве ПЗУ для этих ЭБУ используется микросхема FLASH, емкостью 256 кб, из которых только 32 кб являются калибровочными данными и доступны для считывания и редактирования с помощью программы Chip Tuning Pro (SMS-SoftWare). MP7.0 является одним из самых «малоизученных» тюнерами блоком ввиду довольно сложного алгоритма расчетов (с использованием математической модели ДВС использующей фактор нагрузки), адаптации и самообучения. Этим объясняется относительно высокая «живучесть» системы при отказе или неверной работы датчиков и довольно малое количество предложений «тюнинговых» прошивок.

В настоящее время только один программатор (кроме, естественно, заводского оборудования) поддерживает перепрограммирование Bosch MP7.0 – универсальный программатор от SMS-SoftWare CombiLoader. С помощью этого программатора возможно чтение/запись калибровок и только запись всего содержимого Flash (так называемый «Full Flash», т.е полностью все 256 кб). Последняя функция полезна при полной утрате содержимого flash или при перепрограммировании блоков с EURO-III на EURO-II.

EEPROM в Bosch MP7.0 аналогичен Bosch M1.5.4. Для стирания / перезаписи необходимо либо выпаивать микросхему eeprom и пользоваться внешним программатором, либо применять еще одну программу SMS-SoftWare – CombiSet. Помимо своих «прямых функций» по коррекции одометров ВАЗ, программа может стирать eeprom или записывать в него заранее подготовленные данные без демонтажа микросхемы, непосредственно на плате. Причем эта функция доступна даже в бесплатной демо – версии.

Много вопросов возникает по программированию блоков VS‑5.1. Очень часто блоки отказываются «выходить на связь», вызывая панику в рядах начинающих тюнеров. В этом случае я рекомендую проверить источник питания (под нагрузкой) – эти блоки очень критичны к питающему напряжению. VS5.1 отказывается программироваться при снижении питания ниже 9,5 вольт, в то время, как Январи продолжают великолепно программироваться.

С сентября 2003 года появилась новая АППАРАТНАЯ модификация VS5.1 несовместимая про прошивкам со «старой». Подробнее можно узнать здесь.

С сентября 2003 года на автомобили начали устанавливаться новые блоки Bosch M7.9.7 под нормы токсичности Евро II, а с октября 2004 г., с началом выпуска модификаций двигателя объемом 1,6 л. (подробнее смотрите здесь) Bosch M7.9.7 (в двух аппаратных реализациях, несовместимых по прошивкам) и Январь 7.2 (в 2007 появилась вторая аппаратная реализация, Январь 7.2+, аппаратно и программно несовместимая со «старым» Январь 7.2) полностью вытеснили все остальные ЭБУ. В 2007 г. основными серийными блоками ВАЗ были Январь 7.2+ (новая аппаратная реализация) и Bosch M7.9.7+, в 2008 г. Январь 7.2+ был полностью заменен на М73 (Евро‑3).

Bosch M7.9.7 и Bosch M7.9.7+ требуют доработок для перевода в режим программирования. Программатор Combiloader позволяет записать программу или калибровки без разборки и доработки блока. Для того, что бы произвести чтение программы из блока без разборки и доработки не обойтись.

Все ЭБУ, упомянутые в этой статье, в полном объеме поддерживаются универсальным программатором CombiLoader (опция) и программой ChipTuning PRO (опция).

Немного подробнее остановимся на новом поколении контроллеров – Январь 7.2+ и М73.

ЭБУ Январь 7.2+ и М73 не имеют внешней флэш – памяти, программа записывается в память процессора и состоит из бутлоадера (программа, управляющая запуском основной программы и ее обновлением), основной программы (программы управления двигателем) и калибровок. Работа с разными типами ЭБУ имеет свои особенности:

Январь‑7.2+ (идентификатор ПО I2xxxxxx), М73 пр-ва Итэлма (идентификатор ПО I3xxxxxx):

При записи ЭБУ обновляется только основная часть программы и калибровки. Бутлоадер по умолчанию не обновляется.
Если после записи в ЭБУ прошивки, бутлоадер которой отличается от исходной, появляется «Ошибка ПЗУ», рекомендуется считать из ЭБУ прошивку (уже с исходным бутлоадером), открыть ее в редакторе калибровок CTPro, сохранить (будет пересчитана контрольная сумма) и снова записать в ЭБУ.

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

Для обновления бутлоадера необходимо нажать клавишу Shift до нажатия на кнопку Запись и удерживать ее до начала процесса «Стирание FLASH». Однако при этом следует иметь ввиду, что при ошибке записи бутлоадера ЭБУ может перестать выходить на связь.

В случае, когда при записи с обновлением бутлоадера произошла ошибка, и ЭБУ не выходит на связь, необходимо произвести запись ЭБУ через бутлоадер процессора. Для этого необходимо произвести доработку ЭБУ.

Для записи контроллеров семейств М73/Январь‑7.2+ через бутлоадер процессора, необходимо выпаять резистор, отмеченный синим цветом и запаять его по диагонали, как показано красными стрелками. По окончании программирования, нужно вернуть резистор на место.

М73 пр-ва АВТЭЛ (идентификатор ПО A3xxxxxx):

Процессор ЭБУ защищен. При записи обновляется только основная часть программы и калибровки.

Если после записи в ЭБУ прошивки, бутлоадер которой отличается от исходной, появляется «Ошибка ПЗУ», рекомендуется считать из ЭБУ прошивку (уже с исходным бутлоадером), открыть ее в редакторе калибровок CTPro, сохранить (будет пересчитана контрольная сумма) и снова записать в ЭБУ.

ВНИМАНИЕ! Работа с этим типом ЭБУ через бутлоадер процессора после доработки недопустима и может привести к необходимости замены процессора!

Памятка: Следует иметь ввиду, что после снятия при установке блока на авто необходимо придерживаться следующего нехитрого правила.

1. Установка ЭБУ.
2. Включаем зажигание. Дожидаемся отработки БН и загорания СЕ. (Около 3 – 5 секунд)
3. Выключаем зажигание.
4. Авто готов к работе.

Никакого «самообучения» и дополнительной «адаптации» не производится, шаманские пляски с бубном, рекомендованные на некоторых сайтах ставят своей целью озадачить клиента всей значимостью процедуры и облегчить его страдания при расставании с денежными знаками :). Данные, потерянные из ОЗУ при снятии питания восстановятся через некоторое время.

ПРОГРАММЫ – ЗАГРУЗЧИКИ ЭБУ от НПП НТС
Январь 5.х, VS5.x, Микас 7.х

Загрузчики от НПП НТС, от программатора блоков ПБ‑2. Распространяется бесплатно как online – поддержка программатора блоков (стоимость около 100$). Программы работают с файлами прошивок с расширением *.abs, получаемого путем простого переименования из *.bin. Интерфейс – на уровне ПК «Вектор» 06Ц (некоторые меня поймут :)). На всякий случай привожу все, на сегодняшний день, версии программы.

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

НПП НТС тоже наконец – то перестало гонять своих покупателей ПБ‑2 в ДОС и обратно и разродилось простенькой программкой под Windows, позволяющей выбирать номер используемого порта и скорость его работы. Никаких параметров, кроме выбора типа блока между Январь и Микас больше не настраивается, при чтении ЭБУ сразу предлагается сохранение файла, при записи – открытие. В нижней части индикатор выполнения. Программка значительно уступает по возможностям даже первым версиям облегченной (Lite) программе ECU Programmer С.Сапелина. Совсем любопытные могут посмотреть, что же, все-таки находится внутри программатора ПБ‑2.

Версия программы 1.1 от 10.10.2001 позволяет производить очистку EEPROM и работает с файлами двойного размера (128Кб).

Версия 1.5 Ровно через год от предыдущей версии НТС выпустило обновление, добавлена поддержка блоков VS1, выведены идентификаторы прошивки, строка статуса и прогресс-бар.
Версия 1.6 внешне не отличается от предыдущей, об изменениях авторы не сообщают.
Версия 1.7 выпущенная в феврале 2003 г. так же внешне не имеет отличий, кроме названия версии. Об улучшениях и изменениях не сообщается. Может быть это лишь видимость движения вперед? ��
Версия 1.8 — июнь 2003 г. Комментариев производителя, как водится – нет.
Версия 1.9 — февраль 2005 г. Добавлена функция программирования Январь 7.2
Версия 1.10 – март 2005 г. Косметические изменения. («Добавлены» Микас 7.6/7.2)
Версия 1.12 – декабрь 2005 г. Добавлена «идентификация»

Ручной перевод ЭБУ в режим программирования

I. Январь 5.1/5.1.1/5.1.2, Микас 7.х/ Bosch 7.0/ VS5.1

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

Контроллер лучше с машины снять. Хоть и есть информация о успешной загрузке прямо на автомобиле, все – таки надежнее работать с минимальной длиной соединительных проводов. Для питания контроллера необходим источник тока 12V/0,5A. Можно пользоваться внешним источником питания или штатным аккумулятором.

Для перевода контроллера в режим программирования необходимо подать +12В на вход разрешения программирования 47 и на 18 контакт (не отключаемое питание контроллера) перед (!) имитацией включения зажигания (27 контакт ЭБУ). Ну и «масса» электроники – 19 контакт.

УАЗовцы (КБ Электроники УАЗ) рекомендуют посадить на общий провод все «земляные» контакты (Хуже от этого точно не будет и контроллеры можно будет «диагностировать» на столе) – 2,14,19,24,30.

Реально это выглядит так: подключаете ЭБУ по приведенной схеме, включаете выключатель S1, ждете 3 – 5 секунд, включаете S2 и запускаете программу.

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

Загрузка идет по последовательному каналу K‑Line и занимает относительно продолжительное время. Если Ваш адаптер отлично работает с диагностикой, но не желает программировать блоки, скорее всего надо задуматься о его замене на более совершенный вариант. Но у нас без сбоев на скорости до 38 Kbit работает простой вариант адаптера К‑Line на двух транзисторах BC945.

A. Соколов (UncleSam) рекомендует подключать контроллер, как показано на рисунке справа. Суть, в принципе, не меняется. Горящий светодиод сигнализирует о том, что контроллер НЕ НАХОДИТСЯ в режиме программирования.

Для программирования Микас 7.1/7.2 подключение аналогично Январь 5.1, но необходимо использовать не 47 ногу, а 42 (PRG).

Программирование ЭБУ VS5.1, производства НПО Итэлма и блоков МИКАС 7.6 полностью аналогично Январь 5, единственное отличие – необходимо подавать «+» питания на 37 контакт контроллера.

Программирование ЭБУ Bosch MP7.0H аналогично Январь 5.1, но необходимо использовать не 47 ногу, а 50 (PRG. Только для записи калибровок. Чтение возможно без перевода в режим программирования).

Таблица обязательных для программирования контактов (55-контактные ЭБУ).

Контакт ЭБУ Январь 5 VS 5.1
Микас 7.6
Микас 7.1/7.2 Bosch 7.0
18 – Не отключаемое питание / +12V + + + +
19 – Масса + + + +
27 – Включение зажигания / +12V + + + +
37 – Питание главного реле /+12V* не обяз. + не обяз. не обяз.
Разрешение программирования /+12V 42 +
47 + +
50 +
55 – К‑Line + + + +

* Как видно из таблицы, использование 37 контакта необязательно на большинстве систем. Но, при постоянном подключении этого контакта, различие систем только в выборе ножки разрешения программирования.

II. Bosch M7.9.7 / Январь 7.2

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

ЭБУ с 81-контактным разъемом. Подключение этих типов ЭБУ для перевода в режим программирования так же просто, как и Январь 5.

Перед программированием рекомендуется заглянуть в раздел «Доработка ЭБУ», т.к в 99,9% ЭБУ Bosch M7.9.7 отсутствует связь от входа разрешения программирования (43 ножка контроллера) до процессора (порт L0.4). Необходимо запаять недостающие чип-резисторы, номинал 4,7 – 5,1 кОм, типоразмер 0805.

На представленной схеме для универсальности применено переключатель выбора типа ЭБУ, т.к они требуют подачи на 43 ножку (PRG) сигналов разного уровня. Перед программированием нужно выбрать тип ЭБУ переключателем S1 Январь 7.2 или Bosch M7.9.7.

В цепь подачи управляющего напряжения в режиме Январь 7.2 можно установить токоограничительный резистор, который может быть любого типа номиналом 1 – 5,1 Ком. (от +12V до верхнего контакта переключателя S1).

Если контроллер не выходит на связь, необходимо выключателем S2 снять питание с 13 ноги (IGN, зажигание) и сделать паузу не менее 7 – 10 секунд, после чего повторить попытку соединения.

Универсальный программатор ЭБУ CombiLoader автоматически все сделает за Вас без всяких переключателей. Следует иметь ввиду что этот программатор считывает/записывает прошивки не в простом бинарном виде, а в формате, доступном для редактирования программой Chip Tuning Pro.

Как известно, многие ЭБУ (по-видимому, в целях снижения себестоимости ЭБУ) не содержат элементов, необходимых для перевода в режим программирования. Такие ЭБУ требуют доработки. Подробнее об этом здесь. Но это, так сказать «официальный путь», до есть, доработка, предусмотренная, но неустановленная производителем. Здесь же мы рассмотрим «альтернативные» пути, которые, как правило, несколько проще.

BOSCH M7.9.7

Для перевода этого блока в режим программирования достаточно замкнуть контакт, отмеченный треугольником на массу через резистор 4 – 6 кОм. Можно (и даже нужно) изготовить щуп с резистором внутри и крокодилом с другой. Он понадобится Вам и для работы с любыми другими ЭБУ, переводимые в бутстрап. Замыкать нужно на время установки связи, как только процесс пошел, перемычку можно убрать.

Программирование Январь 5/7, VS5.1, Микас 7/11, Bosch MP7.0 /M7.9.7, М73

Есть еще один вариант – аккуратно «нарисовать» резисторы очень мягким простым карандашом, графит выполнит функции резистора. После программирования следует тщательно удалить следы графита.

МИКАС 11

Для перевода этого блока достаточно замкнуть контакт, отмеченный кружком, на массу. Ближайшая удобная масса – корпус кварцевого резонатора. Замыкать нужно на время установки связи, как только процесс пошел, перемычку можно убрать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *