Обмен по последовательному асинхронному полудуплексному
Описание протокола взаимодействия с ЭБУ Микас 5.4 и 7.1. (K-Line).
Версия 0.1. от 27 сентября 2000 года.
Общие сведения.
Обмен по последовательному асинхронному полудуплексному интерфейсу K-Line происходит со скоростью 9600 бит/сек. Формат кадра – 8N1. Для связи с ЭБУ используется 2 провода: K-LINE и GROUND. Физический уровень протокола обмена соответствует рекомендации ISO9141 и реализуется различными K-Line адаптерами типа MC33199, MC33290 (Motorola).
Формат сообщения.
Обмен с ЭБУ происходит путем посылки сообщений следующего формата:
[код команды][параметр(ы)] [контрольная сумма] [0x0D]
(тело сообщения) (контрольная информация) (Конец посылки)
Возможные коды команд приведены в таблице 1. Число байтов в сообщении регламентируется только форматом команды и в заголовке сообщения не отражается.
Ответное сообщение имеет вид:
[возвращаемые параметры или код завершения команды] [контрольная сумма] [0x0D]
(тело сообщения) (Контрольная информация) (Конец посылки)
В случае двухбайтовых параметров первым передается младший байт.
Расчет контрольной суммы.
Контрольная сумма всегда представляется в виде одного байта. Значение этого байта равно дополнению до 0 суммы всех байт тела сообщения без учета переполнения.
Типичный кадр выглядит следующим образом: 0x01 0xFF 0x0D, что соответствует запросу на доступность ЭБУ.
Особые случаи при передаче байта 0x0D в теле сообщения.
Байт 0x0D служит для окончания сообщения. Если в теле сообщения встречается байт 0x0D, он кодируется последовательностью 0x40 0xCD. В случае если в теле сообщения встречается 0x40, этот байт кодируется последовательностью 0x40 0x00. Таким образом, встречая в сообщении байт 0x40, необходимо просуммировать его и следующий байт, чтобы получить исходное сообщение. При кодировании сообщения необходимо заменять в теле сообщения 0x40 и 0x0D на вышеуказанную последовательность байт.
Коды команд и параметры.
1. Запрос доступности ЭБУ (возвращает код версии ЭБУ).
Команда |
Ответ ЭБУ |
0x01 |
0x09, если ЭБУ Микас 5.4 0x0A, если ЭБУ Микас 7.1 |
2. Запрос на получение параметров из ЭБУ.
Запрашиваемый параметр |
Кодированное обозначение |
Тип перемен-ной |
Тело сообщения |
Ответ ЭБУ, тело сообщения |
Формула пересчета |
Температура охлаждающей жидкости, С |
TWAT |
uchar |
0x61 0x1A |
1 байт |
Byte1-40 |
Частота вращения коленвала, с-1 |
FREQ |
uchar |
0x61 0x29 |
1 байт |
Byte1*40 |
Частота вращения коленвала на х.х., с-1 |
FREQX |
uchar |
0x61 0x2C |
1 байт |
Byte1*10 |
Угол опережения зажигания, град |
UOZ |
Char |
0x61 0x26 |
1 байт |
Byte1/2 |
Напряжение бортсети, В |
UACC |
char |
0x61 0x1E |
1 байт |
Byte1/10 |
Длительность впрыска, мс |
INJ |
uint |
0x61 0x3F |
2 байта |
(Byte2*256+Byte1)/125 |
Расход воздуха, кг/час |
JAIR |
uint |
0x61 0x21 |
2 байта |
(Byte2*256+Byte1)/100 |
Часовой расход топлива, л/ч |
JQT |
uint |
0x61 0x40 |
2 байта |
(Byte2*256+Byte1)/10 |
Признак детонации |
DET |
byte |
0x61 0x08 |
1 байт |
(Byte1&0x40)!=0 - да |
Признак холостого хода |
RXX |
byte |
0x61 0x07 |
1 байт |
(Byte1&0x04)!=0 - да |
Признак полной мощности |
BITPOW |
byte |
0x61 0x07 |
1 байт |
(Byte1&0x20)!=0 - да |
Признак коррекции УОЗ по детонации |
RDET |
byte |
0x61 0x07 |
1 байт |
(Byte1&0x80)!=0 - да |
Состав смеси |
VALF |
uchar |
0x61 0x39 |
1 байт |
0,5+Byte1/256 |
Положение ДЗ, % |
THR |
uchar |
0x61 0x20 |
1 байт |
Byte1 |
Коэффициент коррекции топливоподачи |
RCOK |
uchar |
0x61 0x42 |
1 байт |
|(Byte1-128)/256|-0,5 |
Коэффициент коррекции СО на холостом ходу |
RCOD |
uchar |
0x61 0x41 |
1 байт |
|(Byte1-128)/256|-0,5 |
Поправка УОЗ, град |
UOZOC |
char |
0x61 0x28 |
1 байт |
Byte1/2 |
Установка РДВ, шаг |
SSM |
uchar |
0x61 0x5B |
1 байт |
Byte1 |
Положение РДВ, шаг |
FSM |
uchar |
0x61 0x5C |
1 байт |
Byte1 |
Запрос ошибок. В ответ ЭБУ возвращает первым байтом количество ошибок, а затем четными байтами идут номера ошибок, а нечетными – разделители 0xE0. |
uchar |
0x02 |
n байт |
[N_ERR][ERRCODE1]0xE0 [ERRCODE2] 0xE0 … [ERRCODEN] 0xE0 |
|
Стирание ошибок Для стирания ошибок выполняют-ся последовательно два запроса. В нормальной ситуации ответом должно быть 0x00. |
uchar |
1) 0x62 0x0E 0x08 2) 0x62 0x0E 0x00 |
1) 1 байт 2) 1 байт |
Byte1=0x00 – OK Byte1=0x00 – OK |
|
Минимальный номер неисправности |
MINERR |
uchar |
0x61 0x72 |
1 байт |
Byte1=номер неисправности |
Установка расхода воздуха, кг/час |
UGB |
uint |
0x61 0x59 |
2 байта |
(Byte2*256+Byte1)/100 |
Температура воздуха, 0С |
TAIR |
uint |
0x61 0x1C |
1 байт |
Byte1-40 |
Температура охлаждающей жидкости на момент пуска, 0С |
TWATI |
uchar |
0x61 0x19 |
1 байт |
Byte1-40 |
3. Команды работы с памятью ЭБУ
Название команды |
Команда |
Тело сообщения |
Ответ ЭБУ |
Чтение байта из RAM ЭБУ [0..FF] |
CREADI |
0x11 [ADDR] |
[ADDR] [BYTE] |
Запись байта в RAM ЭБУ [0..FF] |
CWRTI |
[ADDR] [BYTE] |
|
Чтение байта из XRAM [0..FFFF] |
CREADX |
0x13[ADDR_L][ADDR_H] |
[ADDR_L][ADDR_H][BYTE] |
Запись байта в XRAM [0..FFFF] |
CWRITX |
0x14[ADDR_L][ADDR_H][BYTE] |
[ADDR_L][ADDR_H][BYTE] |
Чтение байта из CODE [0..FFFF] |
CREADC |
0x15[ADDR_L][ADDR_H] |
[ADDR_L][ADDR_H][BYTE] |
Запись байта в CODE [0..FFFF] |
CWRITC |
0x16[ADDR_L][ADDR_H][BYTE] |
[ADDR_L][ADDR_H][BYTE] |
Чтение SFR |
CREADSFR |
0x31[ADDR] |
[ADDR][BYTE] |
Запись SFR |
SWRITSFR |
0x32[ADDR][BYTE] |
[ADDR][BYTE] |
Переход по адресу |
CGOTO |
0x41[ADDR_L][ADDR_H] |
|
Чтение паспорта программы. 3 последовательных запроса |
CPASP |
0x51 0x52 0x53 |
String[16] String[16] String[16] Кодировка DOS, до 16 байт дополненяется нулями |
Чтение паспорта данных. 5 последовательных запроса |
CPASD |
0x54 0x55 0x56 0x57 0x58 |
String[16] String[16] String[16] String[16] String[16] Кодировка DOS, дополняется до 16 байт нулями |
Считывание количества параметров |
CNUMPAR |
0x60 |
[BYTE] |
Чтение параметра. Возможно чтение нескольких параметров за один раз – при этом передается. |
CREADP |
0x61[PARCODE1]…[PARCODEN] |
[DATA1]…[DATAN] |
Запись параметра. |
CWRITP |
0x62[PARCODE][PARDATA] |
0x00 – успешное завершение операции; 0x01 – ошибка. |
Чтение нескольких параметров по списку |
CREADL |
0x63 |
[DATA1]…[DATAN] |
Запись списка параметров |
CWRITL |
0x64 [PARCODE1]…[PARCODEN] |
0x00 – успешное завершение операции; 0x01 – ошибка. |
Чтение нескольких байтов RAM |
CREADDI |
0x21 [ADDR][NUM_OF_BYTES] |
[ADDR][NUM_OF_BYTES] [BYTE1]…[BYTEN] |
Запись нескольких байтов RAM |
CWRITDI |
0x22 [ADDR][NUM_OF_BYTES] [BYTE1]…[BYTEN] |
0x00 – успешное завершение операции; 0x01 – ошибка. |
Чтение нескольких байтов XRAM |
CREADDX |
0x23 [ADDR_L] [ADDR_H] [NUM_OF_BYTES] |
[ADDR_L][ADDR_H][BYTE1] [BYTE2] |
Запись нескольких байтов XRAM |
CWRITDX |
0x24 [ADDR_L] [ADDR_H] [NUM_OF_BYTES] |
0x00 – успешное завершение операции; 0x01 – ошибка. |
Чтение нескольких байтов CODE |
CREADDC |
0x25 [ADDR_L] [ADDR_H] [NUM_OF_BYTES] |
[ADDR_L][ADDR_H][BYTE1] [BYTE2] |
Запись нескольких байтов CODE |
CWRITDC |
0x26 [ADDR_L] [ADDR_H] [NUM_OF_BYTES] |
0x00 – успешное завершение операции; 0x01 – ошибка. |
Многократные команды. В зависимости от способа синхронизации с работой ПО ЭБУ, многократные команды деляться на команды первого и второго уровня. Команды первого уровня не синхронизированы с вращением КВ двигателя и посылают данные из блока циклически. Время передачи списка команд определяется количеством команд и режимом работы двигателя. Команды второго уровня синхронизированы с вращением КВ и позволяют получать данные в заданном такте двигателя. Количество параметров в списке ограничено скоростью передачи. |
|||
Многократное чтение нескольких параметров. Команда первого уровня. |
CREADPF |
0x71 [PARCODE1][PARCODEN] |
[DATA1]…[DATAN] |
Многократное чтение нескольких параметров. Команда второго уровня. Синхронизация по нулевому, первому, второму, третьему и четвертому тактам двигателя. |
CREADPS |
0x7F [PARCODE1][PARCODEN] 0x80 [PARCODE1][PARCODEN] 0x81 [PARCODE1][PARCODEN] 0x82 [PARCODE1][PARCODEN] 0x83 [PARCODE1][PARCODEN] |
[DATA1]…[DATAN] [DATA1]…[DATAN] [DATA1]…[DATAN] [DATA1]…[DATAN] [DATA1]…[DATAN] |
Примечания.
Автор данной версии описания – Гуляев Александр aka ASHA
asha@sortos.ru