Протокол обмена по K-Line с блоком Январь
4.1.
В целях отладки программного обеспечения и калибровки данных в програмное обеспечение ЭБУ встроен модуль обмена данными по последовательному порту, который обеспечивает передачу данных из блока во внешнее устройство, имеющее аналогичный интерфейс (как аппаратный, так и программный). Связь внешнего устройства с блоком осуществляется либо с помощью инженерной платы по стандартному интерфейсу RS-232, либо по интерфейсу ALDL. Модуль обмена имеет однонаправленный протокол передачи, который позволяет передавать данные и команды с проверкой на корректность, но без исправления ошибок. Таким образом, в ЭБУ присутствуют средства отладки ПО для всех режимов работы. Протокол передачи. Любая посылка как в блок, так и из блока имеет следующий формат: Контрольная сумма расчитывается как дополнение до нуля суммы всех байт посылки, исключая байт конца посылки. Значение контрольной суммы байтовое. Старшие байты суммы отбрасываются. Для того, чтобы байт данных со значением 0Dh в содержимом посылки не был расценен как конец посылки, его заменяют на два байта 40h CDh. Байт со значение 40h является префиксом, предназначеным для внесения отличия между байтом данных со значением 0Dh и концом посылки, имеющем то же значение. В том случае, если среди байтов данных посылки встречается байт со значением 40h, то есть значением префикса, этот байт заменяется на два байта 40h 00h. Случай, когда после префикса в посылке находится байт отличный от CDh или 00h, считается ошибочным. Программному обеспечению, принимающему данные из блока необходимо отбрасывать посылку, содержащую такую последовательность и пересинхронизировать прием данных. Блок, приняв такую последовательность, останавливает многократные команды, поэтому ее можно использовать в случае необходимости как команду останова многократных команд. Выбор значений последовательностей из двух байт, кодирующих байты данных со значениями конца посылки и префикса не случаен. Сумма этих байт равна значениям( 40h+CDh=0Dh; 40h+00h=40h), которые они кодируют. Это сделано для того, чтобы контроль правильности посылки заключался в суммировании принимаемых байт до тех пор, пока не встретится конец посылки. Если при этом сумма байт посылки равна нулю, то посылка правильная. Настройка режима передачи для обмена. Для обмена с ЭБУ является необходимым правильная настройка скорости передачи и аппаратного протокола RS-232. Блок использует стандартную скорость передачи 9600 бод, и 8-битный протокол передачи со стоп-битом, без parity и с контролем Ctrl-Break. Команды монитора обмена. Команды монитора обмена позволяют делать запрос ЭБУ на выдачу данных, изменение данных в блоке, вносить изменения в последовательность выполнения команд ПО ЭБУ. Команды монитора делятся на команды верхнего и нижнего уровня. Команды нижнего уровня Команды нижнего уровня позволяют работать с блоком вне зависимости от того, какое ПО находится в памяти блока, поскольку работают с конкретными адресами памяти блока. Список команд нижнего уровня. |
|
|
|
CVERS | 1 | чтение номера версии монитора |
CREADI | 11H | чтение байта RAM |
CWRITI | 12H | запись байта RAM |
CREADX | 13H | чтение байта XRAM |
CWRITX | 14H | запись байта XRAM |
CREADC | 15H | чтение байта CODE |
CWRITC | 16H | запись байта CODE |
CREADDI | 21H | чтение нескольких байт RAM |
CWRITDI | 22H | запись нескольких байт RAM |
CREADDX | 23H | чтение нескольких байт XRAM |
CWRITDX | 24H | запись нескольких байт XRAM |
CREADDC | 25H | чтение нескольких байт CODE |
CWRITDC | 26H | запись нескольких байт CODE |
CREADSFR | 31H | чтение SFR |
CWRITSFR | 32H | запись SFR |
CGOTO | 41H | переход по адресу |
Команды верхнего уровня.
Команды верхнего уровня предназначены только для работы с ПО ЭБУ и предназначены для запроса конкретных переменных программы. Список переменных, доступных для запроса содержится в модуле glismon. Команды запроса данных верхнего уровня делятся на две группы: однократные и многократные, которые отличаются тем, что на однократную команду блок посылает запрашиваемые данные однократно, а на многократную (мультикоманду) ЭБУ начинает передачу запрашивемого блока данных циклично, до тех пор, пока эта передача не будет прервана. В свою очередь, мультикоманды отличаются по способу синхронизации передачи с работой ЭБУ. Однократные команды. |
|
|
|
CPASP | 51H,52H,53H; | чтение паспорта программы |
CPASD | 54H,55H,56H,57H,58H; | чтение паспорта данных |
CNUMPAR | 60H | чтение количества параметров |
CREADP | 61H | однократное чтение нескольких параметров |
CWRITP | 62H | запись параметров |
CREADL | 63H | чтение нескольких параметров по списку |
CWRITL | 64H | запись списка параметров |
Многократные команды.
Многократные команды, в зависимости от способа синхронизации с работой ПО ЭБУ делятся на команды первого и второго уровня. Команды первого уровня не синхронизированы с работой блока и посылают данные из блока все свободное для этого время. Если посылка пакета запрошенных данных не заканчивается в текущем такте работы двигателя, то она будет продолжена в следующем такте. По завершении посылки пакета посылка повторяется. Команды первого уровня позволяют получить комплексную картину режима работы блока и двигателя. Эти команды не предназначены для получения быстроменяющихся данных, поскольку особенностью их работы является то, что если посылка запрошенных данные не укладывается в 1 такт работы двигателя, то эта посылка будет продолжена в следующем такте. Однако, их несомненным преимуществом является возможность запрашивать у блока любое количество параметров. Команды второго уровня привязаны к вращению коленвала и позволяют посылать данные из блока либо каждый такт, либо каждый N-ый такт. В случае, если в текущем такте посылка пакета данных не завершена, посылка обрывается и со следующего такта начнется новая посылка. В отличие от команд первого уровня, команды второго уровня не позволяют запрашивать у блока большое количество параметров. Это ограничение связано с тем, что эти команды обрывают посылку, если она не укладывается в один такт работы двигателя. Особенностью команд второго уровня является возможность с их помощью исследовать быстротекущие процессы в блоке и двигателе. Список многократных команд. |
|
|
|
CREADPF | 71H | многократное чтение нескольких параметров, 1 уровень |
CREADPS | 7FH | многократное чтение нескольких параметров, 2 уровень (синхронизация по каждому такту) |
80H | синхронизация по 1 такту | |
81H | синхронизация по 2 такту | |
82H | синхронизация по 3 такту | |
83H | синхронизация по 4 такту |
Переменные для обмена.
Как уже упоминалось выше, список переменных, доступных для передачи из блока, находится в модуле glismon.72. Модуль содержит таблицу ссылок (имена переменных) доступных для обмена монитору верхнего уровня. Массив LISIND содержит имена переменных участвующих в обмене, массив TDL содержит их размер. Для того, чтобы переменные, необходимые для обмена стали доступны, необходимо поместить их в массив LISIND, соответственно скорректировав массив TDL таким образом, чтобы в позиции, соответствующей положению переменной в массиве LISIND, находился размер этой переменной в байтах. Например, в массиве LISIND есть переменная FREQ, показывающая частоту оборотов коленвала в масштабе единиц 40 об/мин. Она находится на 13-ой позиции. В массиве TDL ей соответствует находящийся в 13-ой позиции размер - 1 байт. В том случае, если необходимо заменить эту переменную на какую-либо другую, нужно новую переменную поставить на место FREQ, а в 13 позиции масиива TDL изменить размер на новый, соответствующий новой переменной. Важно отметить, что в командах запроса переменных из блока нумерация переменных начинается с 1, т.е. переменная TRANRAM имеет номер для запроса 1, EXBPORT - 2 и т.д. Список переменных, содержащихся в модуле glismon.72 |
Номер переменной | Имя переменной | Размер в байтах | Описание |
|
TRANRAM | 1 | |
|
EXBPORT | 1 | |
|
EXCPORT | 1 | |
|
EXCL | 1 | |
|
EXCM | 1 | |
|
EXCFOR | 1 | |
|
EXCPROG | 1 | |
|
ICERROR | 1 | Флаги ошибок |
|
SERRORL | 1 | Флаги ошибок |
|
SERRORH | 1 | Флаги ошибок |
|
PROLAM | 1 | Прошлое значение INPLAM (сигнала с L-зонда) |
|
TYPE | 1 | Комплектация (0- L-зонд, 1- адсорбер, 2- кл.рецирк., 3- дат. детонации, 4- датчик tв., 5- датчик фаз) |
|
FREQ | 1 | Частота оборотов коленвала [40 об/мин] |
|
NFREQ | 1 | Квантованная частота коленвала ( 16 ) |
|
NBFREQ | 1 | Квантованная частота коленвала ( 32 ) |
|
FREQX | 1 | Частота оборотов коленвала на холостом ходу |
|
EFREQ | 1 | Ошибка FREQ |
|
JUFRXX | 1 | Табличная уставка FREQ на холостом ходу |
|
JDUFREQ | 1 | Адаптивное смещение уставки х.х. |
|
JUFREQ | 1 | Уставка FREQ |
|
JGBCIN | 2 | GBC входное |
|
JGBCD | 2 | Измеренное GBC |
|
JGBCG | 2 | GBC граничное по дросселю |
|
JGBC | 2 | Расход воздуха цикловой |
|
NGBC | 1 | Квантованный GBC ( 16 ) |
|
NBGBC | 1 | Квантованный GBC ( 32 ) |
|
NFRGBC | 1 | NGBC*16+NFREQ |
|
JTKT256 | 1 | Счетчик тактов - увеличивается каждый такт на 1 |
|
JTSYS | 1 | Время работы системы |
|
JTIM256 | 1 | Счетчик времени блока - увеличивается на 1 каждые 20 мс |
|
JTSTOP | 1 | Время останова двигателя после RESET для б/н [1 сек] |
|
JAIR | 2 | Расход воздуха |
|
JGTC | 2 | Цикловая подача топлива [1/90 мг/такт] |
|
JQT | 2 | Объемный расход топлива |
|
JGTCA | 1 | Асинхронная цикловая подача |
|
TWAT | 1 | tохл. |
|
NTWAT | 1 | Квантованная tохл. (охлаждающей жидкости) |
|
TAIR | 1 | Расход воздуха |
|
NTAIR | 1 | Квантованный расход воздуха |
|
NUACC | 1 | Квантованное Uборт. |
|
RCO | 1 | Значение с потенциометра CO |
|
THR | 1 | Дроссель [%] |
|
JSPEED | 1 | Скорость автомобиля |
|
JALAM | 1 | Квантованный код АЦП датчика кислорода |
|
GB | 1 | Расход воздуха |
|
VALF | 1 | ALF в программном прерывании |
|
INJ | 2 | Впрыск |
|
FAZ | 1 | Фаза впрыска |
|
COEFFF | 1 | Коэффициент производительности форсунок |
|
KP | 1 | Пробный коэффициент топливоподачи при регулировании по L-зонду |
|
UGB | 1 | Расход воздуха через байпас |
|
SSM | 1 | Уставка положения шагового мотора |
|
FSM | 1 | Текущее положение шагового мотора |
|
JDKGTC | 1 | Коэффициент динамической коррекции GTC |
|
JKGBC | 1 | Коэффициент расчета GBC по дросселю |
|
UOZ | 1 | УОЗ ( угол опережения зажигания) |
|
UOZOC | 1 | УОЗ для октанкорректора [0.5 град] |
|
UOZXX | 1 | УОЗ на холостом ходу |
|
DUOZ1 | 1 | Смещение УОЗ по детонации 1 цилиндр |
|
DUOZ2 | 1 | Смещение УОЗ по детонации 2 цилиндр |
|
DUOZ3 | 1 | Смещение УОЗ по детонации 3 цилиндр |
|
DUOZ4 | 1 | Смещение УОЗ по детонации 4 цилиндр |
|
JADS | 1 | Степень продувки адсорбера |
|
JEGR | 1 | Степень рециркуляции |
|
MODE | 1 | Режимные флаги |
|
MODE1 | 1 | Режимные флаги |
|
JATHR | 1 | Код АЦП датчика дроссельной заслонки |
|
JAUACC | 1 | Код АЦП бортового напряжения |
|
JATWAT | 1 | Код АЦП tохл. |
|
JATAIR | 1 | Код АЦП tвозд. |
|
JADET | 1 | Сигнал с датчика детонации |
|
JARCO | 1 | Сигнал с потенциометра CO |
|
JARDIA | 1 | Запрос диагностики |
|
TABKF | 32 | |
|
TABKF1 | 32 | |
|
TABKF2 | 32 | |
|
TABKF3 | 32 | |
|
TABKF4 | 32 | |
|
TABKF5 | 32 | |
|
TABKF6 | 32 | |
|
TABKF7 | 32 | |
|
TKFADS | 32 | |
|
TKFADS1 | 32 | |
|
TKFADS2 | 32 | |
|
TKFADS3 | 32 | |
|
TKFADS4 | 1 | |
|
TKFADS5 | 1 | |
|
TKFADS6 | 1 | |
|
TKFADS7 | 1 | |
|
BFKGBC | 1 | |
|
COUNTERR | 1 |
Форматы команд и ответов на них большого и малого монитора.
Коды команд монитора CREADDI = 21H - чтение нескольких байт RAM Посылка в блок управления : 21h,
Отклик из блока управления : #Addr,
CWRITDI = 22H - запись нескольких байт RAM Посылка в блок управления : 22h,
Отклик из блока управления : 00h - корректное завершение операции, 01h - ошибка при выполнении
Команды большого монитора. CWRITP = 62H - запись параметров Посылка в блок управления : 62h - команда записи параметров,
Отклик из блока управления : 00h - корректное завершение операции, 01h - ошибка при выполнении
CPASP = 51H,52H,53H - чтение паспорта программы Посылка в блок управления : 51h, | 52h | 53h
Отклик из блока управления : #Src1 - ASCII коды текстовой информации длиной 16 байт
CPASD = 54H +0,+1,+2+3,+4 - чтение паспорта данных Посылка в блок управления : 54h, | 55h | 56h | 57h | 58h
Отклик из блока управления : #Src1 - ASCII коды текстовой информации длиной 16 байт
CNUMPAR = 60H - чтение количества параметров Посылка в блок управления : 60h,
Отклик из блока управления : 80h - длина таблицы переменных блока,
CREADP = 61H - однократное чтение нескольких параметров Посылка в блок управления : 61h,
CWRITL = 64H - запись списка параметров По команде в памяти формируется список параметров точнее индексов параметров,которые при последующем выполнении команды чтения по списку определят считываемые данные. Посылка в блок управления : 64h,
Отклик из блока управления : 00h - корректное завершение операции, 01h - ошибка при выполнении
CREADL = 63H - чтение нескольких параметров по списку По команде производится чтение параметров по заранее определенному списку причем длина параметров определена естественно при внесениисписка. Посылка в блок управления : 63h,
Отклик из блока управления : #Src1 - переменная длиной 1 байт.
CREADPF = 71H - многократное чтение нескольких параметров, 1 уровень Посылка в блок управления : 71h,
Отклик из блока управления, повторяется периодически: #Src1 - переменная длиной 1 байт.
CREADPS = 7FH +0,+1,+2,+3,+4 - многократное чтение нескольких параметров, 2 уровень Посылка в блок управления : 7Fh, | 80h | 81h
Отклик из блока управления, повторяется периодически, причем периодисность передачи определяется для команд 80h, 81h номером текущего такта работы пока нет информации по частоте передачи параметров: #Src1 - переменная длиной 1 байт.
В двух последних случаях передачу параметров можно остановить закорачиванием линии ALDL. |