Протокол обмена по K-Line с блоком Январь 4.1.

  В целях отладки программного обеспечения и калибровки данных в програмное обеспечение ЭБУ встроен модуль обмена данными по последовательному порту, который обеспечивает передачу данных из блока во внешнее устройство, имеющее аналогичный интерфейс (как аппаратный, так и программный).
 Связь внешнего устройства с блоком осуществляется либо с помощью инженерной платы по стандартному интерфейсу RS-232, либо по интерфейсу ALDL.
 Модуль обмена имеет однонаправленный протокол передачи, который позволяет передавать данные и команды с проверкой на корректность, но без исправления ошибок.
 Таким образом, в ЭБУ присутствуют средства отладки ПО для всех режимов работы.

Протокол передачи.

Любая посылка как в блок, так и из блока имеет следующий формат:

где содержимое посылки - последовательность байт, содержащая передаваемые данные, кс - контрольная сумма посылки, кп - байт-признак конца посылки ( 0Dh ). Параметры, передаваемые блоком идут в том порядке, в котором они были запрошены. Если размер параметра - слово(2 байта), то порядок следования байт сначала младшая часть, а затем старшая.

Контрольная сумма расчитывается как дополнение до нуля суммы всех байт посылки, исключая байт конца посылки. Значение контрольной суммы байтовое. Старшие байты суммы отбрасываются.

Для того, чтобы байт данных со значением 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

Номер переменной Имя переменной Размер в байтах Описание
1
TRANRAM 1  
2
EXBPORT 1  
3
EXCPORT 1  
4
EXCL 1  
5
EXCM 1  
6
EXCFOR 1  
7
EXCPROG 1  
8
ICERROR 1 Флаги ошибок
9
SERRORL 1 Флаги ошибок
10
SERRORH 1 Флаги ошибок
11
PROLAM 1 Прошлое значение INPLAM (сигнала с L-зонда)
12
TYPE 1 Комплектация (0- L-зонд, 1- адсорбер, 2- кл.рецирк., 3- дат. детонации, 4- датчик tв., 5- датчик фаз)
13
FREQ 1 Частота оборотов коленвала [40 об/мин]
14
NFREQ 1 Квантованная частота коленвала ( 16 )
15
NBFREQ 1 Квантованная частота коленвала ( 32 )
16
FREQX 1 Частота оборотов коленвала на холостом ходу
17
EFREQ 1 Ошибка FREQ
18
JUFRXX 1 Табличная уставка FREQ на холостом ходу
19
JDUFREQ 1 Адаптивное смещение уставки х.х.
20
JUFREQ 1 Уставка FREQ
21
JGBCIN 2 GBC входное
22
JGBCD 2 Измеренное GBC
23
JGBCG 2 GBC граничное по дросселю
24
JGBC 2 Расход воздуха цикловой
25
NGBC 1 Квантованный GBC ( 16 )
26
NBGBC 1 Квантованный GBC ( 32 )
27
NFRGBC 1 NGBC*16+NFREQ
28
JTKT256 1 Счетчик тактов - увеличивается каждый такт на 1
29
JTSYS 1 Время работы системы
30
JTIM256 1 Счетчик времени блока - увеличивается на 1 каждые 20 мс
31
JTSTOP 1 Время останова двигателя после RESET для б/н [1 сек]
32
JAIR 2 Расход воздуха
33
JGTC 2 Цикловая подача топлива [1/90 мг/такт]
34
JQT 2 Объемный расход топлива
35
JGTCA 1 Асинхронная цикловая подача
36
TWAT 1 tохл.
37
NTWAT 1 Квантованная tохл. (охлаждающей жидкости)
38
TAIR 1 Расход воздуха
39
NTAIR 1 Квантованный расход воздуха
40
NUACC 1 Квантованное Uборт.
41
RCO 1 Значение с потенциометра CO
42
THR 1 Дроссель [%]
43
JSPEED 1 Скорость автомобиля
44
JALAM 1 Квантованный код АЦП датчика кислорода
45
GB 1 Расход воздуха
46
VALF 1 ALF в программном прерывании
47
INJ 2 Впрыск
48
FAZ 1 Фаза впрыска
49
COEFFF 1 Коэффициент производительности форсунок
50
KP 1 Пробный коэффициент топливоподачи при регулировании по L-зонду
51
UGB 1 Расход воздуха через байпас
52
SSM 1 Уставка положения шагового мотора
53
FSM 1 Текущее положение шагового мотора
54
JDKGTC 1 Коэффициент динамической коррекции GTC
55
JKGBC 1 Коэффициент расчета GBC по дросселю
56
UOZ 1 УОЗ ( угол опережения зажигания)
57
UOZOC 1 УОЗ для октанкорректора [0.5 град]
58
UOZXX 1 УОЗ на холостом ходу
59
DUOZ1 1 Смещение УОЗ по детонации 1 цилиндр
60
DUOZ2 1 Смещение УОЗ по детонации 2 цилиндр
61
DUOZ3 1 Смещение УОЗ по детонации 3 цилиндр
62
DUOZ4 1 Смещение УОЗ по детонации 4 цилиндр
63
JADS 1 Степень продувки адсорбера
64
JEGR 1 Степень рециркуляции
65
MODE 1 Режимные флаги
66
MODE1 1 Режимные флаги
67
JATHR 1 Код АЦП датчика дроссельной заслонки
68
JAUACC 1 Код АЦП бортового напряжения
69
JATWAT 1 Код АЦП tохл.
70
JATAIR 1 Код АЦП tвозд.
71
JADET 1 Сигнал с датчика детонации
72
JARCO 1 Сигнал с потенциометра CO
73
JARDIA 1 Запрос диагностики
74
TABKF 32  
75
TABKF1 32  
76
TABKF2 32  
77
TABKF3 32  
78
TABKF4 32  
79
TABKF5 32  
80
TABKF6 32  
81
TABKF7 32  
82
TKFADS 32  
83
TKFADS1 32  
84
TKFADS2 32  
85
TKFADS3 32  
86
TKFADS4 1  
87
TKFADS5 1  
88
TKFADS6 1  
89
TKFADS7 1  
90
BFKGBC 1  
91
COUNTERR 1  
Форматы команд и ответов на них большого и малого монитора.

Коды команд монитора

CREADDI = 21H - чтение нескольких байт RAM

Посылка в блок управления :

21h,
#Addr - начальный адрес области RAM, которая будет считана
#N - количество байт для считывания
CS,
_EOL.

Отклик из блока управления :

#Addr,
#N,
#Src1,
...
#SrcN,
CS,
_EOL.

CWRITDI = 22H - запись нескольких байт RAM

Посылка в блок управления :

22h,
#Addr - начальный адрес области RAM, в которую будут записаны данные
#N - количество байт для записи
#Src1
...
#SrcN,
CS,
_EOL.

Отклик из блока управления :

00h - корректное завершение операции, 01h - ошибка при выполнении
CS,
_EOL.

Команды большого монитора.

CWRITP = 62H - запись параметров

Посылка в блок управления :

62h - команда записи параметров,
|[ind] - индекс переменной в таблице переменных [1..80] длина 1 байт,
|#Src - значение переменной которое пропишется при выполнении команды,
...
|[ind] - индекс переменной в таблице переменных [1..80] длина 2 байта,
|#SrcL - значение переменной, которое пропишется по младшему адресу,
|#SrcH - - -, по младшему адресу,
...
CS,
_EOL.

Отклик из блока управления :

00h - корректное завершение операции, 01h - ошибка при выполнении
CS,
_EOL.

CPASP = 51H,52H,53H - чтение паспорта программы

Посылка в блок управления :

51h, | 52h | 53h
CS,
_EOL,

Отклик из блока управления :

#Src1 - ASCII коды текстовой информации длиной 16 байт
... с информацией по прошивке ПЗУ
#Src16 -
CS,
_EOL.

CPASD = 54H +0,+1,+2+3,+4 - чтение паспорта данных

Посылка в блок управления :

54h, | 55h | 56h | 57h | 58h
CS,
_EOL,

Отклик из блока управления :

#Src1 - ASCII коды текстовой информации длиной 16 байт
... с информацией по таблицам калибровки двигателя
#Src16 -
CS,
_EOL.

CNUMPAR = 60H - чтение количества параметров

Посылка в блок управления :

60h,
CS,
_EOL,

Отклик из блока управления :

80h - длина таблицы переменных блока,
CS,
_EOL.

CREADP = 61H - однократное чтение нескольких параметров

Посылка в блок управления :

61h,
|[ind1] - индекс переменной в таблице переменных [1..80] длина 1 байт,
...
|[indN] - индекс переменной в таблице переменных [1..80] длина 2 байта,
...
CS,
_EOL,
Отклик из блока управления :
#Src1 - переменная длиной 1 байт.
...
#SrcNL - младший байт двухбайтовой переменной,
#SrcNH - старший байт двухбайтовой переменной,
...
CS,
_EOL.

CWRITL = 64H - запись списка параметров

По команде в памяти формируется список параметров точнее индексов параметров,которые при последующем выполнении команды чтения по списку определят считываемые данные.

Посылка в блок управления :

64h,
|[ind1] - индекс переменной в таблице переменных [1..80] длина 1 байт,
...
|[indN] - индекс переменной в таблице переменных [1..80] длина 2 байта,
...
CS,
_EOL,

Отклик из блока управления :

00h - корректное завершение операции, 01h - ошибка при выполнении
CS,
_EOL.

CREADL = 63H - чтение нескольких параметров по списку

По команде производится чтение параметров по заранее определенному списку причем длина параметров определена естественно при внесениисписка.

Посылка в блок управления :

63h,
CS,
_EOL,

Отклик из блока управления :

#Src1 - переменная длиной 1 байт.
...
#SrcNL - младший байт двухбайтовой переменной,
#SrcNH - старший байт двухбайтовой переменной,
...
CS,
_EOL.

CREADPF = 71H - многократное чтение нескольких параметров, 1 уровень

Посылка в блок управления :

71h,
|[ind1] - индекс переменной в таблице переменных [1..80] длина 1 байт,
...
|[indN] - индекс переменной в таблице переменных [1..80] длина 2 байта,
...
CS,
_EOL,

Отклик из блока управления, повторяется периодически:

#Src1 - переменная длиной 1 байт.
...
#SrcNL - младший байт двухбайтовой переменной,
#SrcNH - старший байт двухбайтовой переменной,
...
CS,
_EOL.

CREADPS = 7FH +0,+1,+2,+3,+4 - многократное чтение нескольких параметров, 2 уровень

Посылка в блок управления :

7Fh, | 80h | 81h
|[ind1] - индекс переменной в таблице переменных [1..80] длина 1 байт,
...
|[indN] - индекс переменной в таблице переменных [1..80] длина 2 байта,
...
CS,
_EOL,

Отклик из блока управления, повторяется периодически, причем периодисность передачи определяется для команд 80h, 81h номером текущего такта работы пока нет информации по частоте передачи параметров:

#Src1 - переменная длиной 1 байт.
...
#SrcNL - младший байт двухбайтовой переменной,
#SrcNH - старший байт двухбайтовой переменной,
...
CS,
_EOL.

В двух последних случаях передачу параметров можно остановить закорачиванием линии ALDL.