Подключение к CAN шине

Ответить

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

Сообщение AS21 » 19 дек 2016, 17:26

Инфа от Константина:
по вопросу скорости работі кан
все согласно 7-уровневой сетевой модели -- т.е. L1 = PHY, для которого используется соответствующий приемо-передатчик под витую пару с волновым сопротивлением 120 Ом. Однако, поскольку КАН-интерфейс довольно старый, то в далекие времена на заре его появления первые чипы приемо-передатчиков были с невысокой максимальной скоростью, например, 125 кБит/с или 250 кБит/с, но "шли годы" и производители научились выпускать более скоростные чипы, например, до 1МБит/сек у Микрочипа и т.п. Соответственно, некоторые старые низкоскоростные производятся до сих пор и продолжают использоваться из-за более низкой стоимости. А программирование фактической скорости производится ПО микроконтроллера stm8
алгоритм работы: магнтола+канбас
магнитола + канбас => "слушает" КАН-шину безотносительно ЕТАКС-а и передает "нужные известные" ЕМУ пакеты по следующей цепочке КАН-шина --> КАНбус-блок (stm8) --> UART (38400 бод) --> MCU (stm32) --> UART (1Мбод) --> CPU (RK3188 пока невыясненный apk) --> пользовательское приложение с картинками (MTCCanbus.apk)
Более полноценно работает только КАНбус для Фольсвагена и Пежо
MTCCanbus и MTCManager
1) этот невыясненный точно apk предположительно MTCManager.apk судя по полученной от одного человека предварительной информации "Непрерывное чтение команд MCU происходит через SerialReceiver в MTCManafer.apk
Управление MCU и чтение параметров MCU происходит с помощью AudioManager.setParameter() Вызов этих команд производится в многих приложениях, например, чтобы включить или выключить Радио, переключиться на другую станцию, и пр. Сам код, посылающий команду в MCU находится во фреймворке. Скорее всего, используется такой же SerialReceiver."
2) если можешь, то разбери оба этих apk (MTCCanbus и MTCManager), т.к. в идеале разобрать весь протокол обмена между MCU и RK;
3) сомневаюсь, что там будут конкретные ID из КАН-шины, т.к. по цепочке MCU (stm32) --> UART (1Мбод) --> CPU (RK3188 пока невыясненный apk, предположительно MTCManager) идет общий обмен между MCU и RK, а не только КАН;

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

Подключение ELM к CAN шине

Сообщение AS21 » 07 май 2017, 08:20

1) Подключение ELM и Android:
- настройки
2) Настройки порта:
GetCommState(hPort,dcb);
dcb.BaudRate:=38400;
dcb.ByteSize:=8;
dcb.StopBits:=ONESTOPBIT;
dcb.Parity:=NOPARITY;
dcb.Flags:=(dcb.Flags and $FFFFCFCF) or $00000000; // устанавливаем управление вручную DTR и RTS
3) Проверка подключения ELM в проге:
- AT Z - Сброс чипсета (новый сеанс)
- AT L1 - получение ответа "+" enter
- AT L0 - получение ответа "-" enter
- AT E1 - выводить команді запроса
- AT E0 - не выводить команды запроса
- AT I => Если "ELM..." - ok (запрос на номер версии)
- ATSP6 - работаем по ISO 15765-4 CAN (11 bit ID, 500 kbaud)
- AT DP - проверка, какой проткол
- ATH1 - включаем отображение can id
- ATAL - включаем поддержку длинных пакетов (на ELM 2.1 - у меня не работает)

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

Re: Подключение к CAN шине

Сообщение AS21 » 07 май 2017, 08:44

Дима, расшифруй плз. на примере "комфорта"
//Set BR 115200 if needed ;
{ st := 'atbrd 23' ;
if ELM327_IO(1, st) then MainForm.StMemo.Lines.Add(st) ;
GetCommState(hCom,dcb) ;
dcb.BaudRate:=CBR_115200 ;
SetCommState(hCom, dcb) ;
st := '' ;
if ELM327_IO(5, st) then MainForm.StMemo.Lines.Add(st) ;
sleep (10) ; }
//echo off
if ELM327_IO(gdelay,'ate0', st) then
//Set Mitsubishi Flow control
if ELM327_IO(gdelay, 'atfcsd30FF00', st) then
if ELM327_IO(gdelay, 'atfcsh ' + tx, st) then
if ELM327_IO(gdelay,'atfcsm1', st) then
//Auto format off
if ELM327_IO(gdelay,'atcaf0', st) then
//LF off
if ELM327_IO(gdelay,'atl0', st) then
//Set RX addr
if ELM327_IO(gdelay,'atcra'+ rx, st) then
//Set TX addr
if ELM327_IO(gdelay,'atsh'+ tx, st) then result := true ;

end ;
1) Это настройки шины? Я правильно понимаю конструкцию: каждый последующий if выполняется, если предыдущий по условию true?
2) На примере "комфорта": замени плз. tx, rx, st на конкретные значения. Я попробовал, что-то не пошло...

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

Подключение к CAN шине диагностик на столе

Сообщение AS21 » 08 май 2017, 08:43

Дима, нижний разьем (ASX - C-411) пин 4-5:
- напряжение == 0
Может надо подать питание не только на C-417?
- при таком подключении (питание только на C-417):
-- (ASX - C-411) пин 6-7 (CAN2 - 83,33) и 8-9 (CAN1 - ): напряжение присутсвует и по осцилу постоянно что-то сыпется.
Схема разьемов
ETACS_C__.pdf
(60.79 КБ) 89 скачиваний
Схема подключения ETACS на столе
IMG_20170507_181031.jpg
Схема подключения ETACS на столе
Логи ELM
IMG_20170507_180822.jpg
Логи ELM

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

Подключение к CAN шине разных ELM

Сообщение AS21 » 08 май 2017, 19:02

2.1 - только для ECU Engine
1.5 - больше для разных ECU

Протестил свою ELM 2.1 (ELM identifier)
- ATCF... - вообще не поддерживается
ата сканирования=2017-05-08 18:44:33
Имя устройства=OBDII
Mac адрес устройства=88:18:56:68:98:EB
Версия устройства (Заявленная)=ELM327 v2.1

Команда Версия Результат
AT@1 1.0 OK
ATSPA6 1.0 OK
ATTPA6 1.0 OK
ATTP6 1.0 OK
ATSP00 1.3 OK
ATSP6 1.0 OK
ATAL 1.0 KO
ATNL 1.0 KO
ATAMC 2.0 KO
ATAMT20 2.0 KO
ATRA70 1.3 KO
ATSR70 1.2 KO
ATAR 1.2 KO
ATAT0 1.2 OK
ATAT2 1.2 OK
ATAT1 1.2 OK
ATBD 1.0 KO
ATBRT0F 1.2 KO
ATCAF0 1.0 OK
ATCAF1 1.0 OK
ATCEA04 1.4 KO
ATCERF1 2.2 KO
ATCEA 1.4 KO
ATCF00000111 1.0 KO
ATCF111 1.0 KO
ATCFC0 1.0 KO
ATCFC1 1.0 KO
ATCM00000111 1.0 KO
ATCM111 1.0 KO
ATCP18 1.0 KO
ATCRA7C0 1.3 KO
ATCRA000007C0 1.3 KO
ATCRA 1.4b KO
ATCS 1.0 KO
ATCSM0 1.4b KO
ATCSM1 1.4b KO
ATCTM5 2.1 KO
ATCTM1 2.1 KO
ATCV0000 1.4 KO
ATD1 1.3 KO
ATD0 1.3 KO
ATDP 1.0 OK
ATDPN 1.0 OK
ATE0 1.0 OK
ATE1 1.0 OK
ATFCSD0430FF00 1.1 KO
ATFCSH000007B0 1.1 KO
ATFCSH7B0 1.1 KO
ATFCSM0 1.1 KO
ATFE 1.3a KO
ATH0 1.0 OK
ATH1 1.0 OK
ATI 1.0 OK
ATIB10 1.0 OK
ATIB12 2.2 OK
ATIB15 2.2 OK
ATIB48 1.4 OK
ATIB96 1.0 OK
ATIFRS 1.2 OK
ATIFRH 1.2 OK
ATIFR0 1.2 OK
ATIFR2 1.2 OK
ATIFR1 1.2 OK
ATIFR6 2.2 OK
ATIFR5 2.2 OK
ATIFR4 2.2 OK
ATIGN 1.4 OK
ATIIA7A 1.2 OK
ATJS 1.3 KO
ATJE 1.3 KO
ATJHF0 1.4b KO
ATJHF1 1.4b KO
ATJTM5 1.4b KO
ATJTM1 1.4b KO
ATKW 1.3 KO
ATKW0 1.2 KO
ATKW1 1.2 KO
ATL0 1.0 OK
ATL1 1.0 OK
ATM1 1.0 OK
ATM0 1.0 OK
ATPPFFON 1.1 KO
ATPPFFOFF 1.1 KO
ATR0 1.0 KO
ATR1 1.0 KO
ATRV 1.0 OK
ATS0 1.3 OK
ATS1 1.3 OK
ATSDFF 1.4 KO
ATRD 1.4 KO
ATSH000007E0 2.0 KO
ATSHA848F1 1.0 OK
ATSH7B0 1.0 OK
ATST32 1.0 OK
ATSWFF 1.0 KO
ATTAF9 1.4 KO
ATV1 1.3 KO
ATV0 1.3 KO
ATWMC133F13E 1.0 KO
ATPC 1.0 OK
ATWS 1.0 OK
ATD 1.0 KO
ATZ 1.0 OK
Протестил свою ELM 1.5 (ELM identifier)
Картина совсем другая, как бы все заработало
Дата сканирования=2017-05-10 15:02:40
Имя устройства=OBDII
Mac адрес устройства=AA:BB:CC:11:22:33
Версия устройства (Заявленная)=ELM327 v1.5

Команда Версия Результат
AT@1 1.0 OK
ATSPA6 1.0 OK
ATTPA6 1.0 OK
ATTP6 1.0 OK
ATSP00 1.3 OK
ATSP6 1.0 OK
ATAL 1.0 OK
ATNL 1.0 OK
ATAMC 2.0 KO
ATAMT20 2.0 KO
ATRA70 1.3 OK
ATSR70 1.2 OK
ATAR 1.2 OK
ATAT0 1.2 OK
ATAT2 1.2 OK
ATAT1 1.2 OK
ATBD 1.0 OK
ATBRT0F 1.2 OK
ATCAF0 1.0 OK
ATCAF1 1.0 OK
ATCEA04 1.4 OK
ATCERF1 2.2 KO
ATCEA 1.4 OK
ATCF00000111 1.0 OK
ATCF111 1.0 OK
ATCFC0 1.0 OK
ATCFC1 1.0 OK
ATCM00000111 1.0 OK
ATCM111 1.0 OK
ATCP18 1.0 OK
ATCRA7C0 1.3 OK
ATCRA000007C0 1.3 OK
ATCRA 1.4b KO
ATCS 1.0 OK
ATCSM0 1.4b KO
ATCSM1 1.4b KO
ATCTM5 2.1 KO
ATCTM1 2.1 KO
ATCV0000 1.4 OK
ATD1 1.3 OK
ATD0 1.3 OK
ATDP 1.0 OK
ATDPN 1.0 OK
ATE0 1.0 OK
ATE1 1.0 OK
ATFCSD0430FF00 1.1 OK
ATFCSH000007B0 1.1 OK
ATFCSH7B0 1.1 OK
ATFCSM0 1.1 OK
ATFE 1.3a OK
ATH0 1.0 OK
ATH1 1.0 OK
ATI 1.0 OK
ATIB10 1.0 OK
ATIB12 2.2 KO
ATIB15 2.2 KO
ATIB48 1.4 OK
ATIB96 1.0 OK
ATIFRS 1.2 OK
ATIFRH 1.2 OK
ATIFR0 1.2 OK
ATIFR2 1.2 OK
ATIFR1 1.2 OK
ATIFR6 2.2 KO
ATIFR5 2.2 KO
ATIFR4 2.2 KO
ATIGN 1.4 OK
ATIIA7A 1.2 OK
ATJS 1.3 OK
ATJE 1.3 OK
ATJHF0 1.4b KO
ATJHF1 1.4b KO
ATJTM5 1.4b KO
ATJTM1 1.4b KO
ATKW 1.3 OK
ATKW0 1.2 OK
ATKW1 1.2 OK
ATL0 1.0 OK
ATL1 1.0 OK
ATM1 1.0 OK
ATM0 1.0 OK
ATPPFFON 1.1 OK
ATPPFFOFF 1.1 OK
ATR0 1.0 OK
ATR1 1.0 OK
ATRV 1.0 OK
ATS0 1.3 OK
ATS1 1.3 OK
ATSDFF 1.4 OK
ATRD 1.4 OK
ATSH000007E0 2.0 KO
ATSHA848F1 1.0 OK
ATSH7B0 1.0 OK
ATST32 1.0 OK
ATSWFF 1.0 OK
ATTAF9 1.4 OK
ATV1 1.3 OK
ATV0 1.3 OK
ATWMC133F13E 1.0 OK
ATPC 1.0 OK
ATWS 1.0 OK
ATD 1.0 OK
ATZ 1.0 OK
Вот только с ETACS смог сконнеститься на столе
ETACS-Ok
IMG_20170510_143348_ETACS_Ok_1.jpg
CAN-BOX - Bad
IMG_20170510_143809_Can_Bad.jpg

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

Подключение к CAN шине скан устройств

Сообщение AS21 » 14 июн 2017, 20:41

Вопрос по подключению ELM и других аналогичных сканеров:
- я планирую так:
-- выбираем уже подключенные и спаренные устройства
-- отработали - переключились к другому
-- вышли из проги - при повтором входе надо снова подключаться!!! или надо восстанавливать последнее подключение?
-- все первичные подключения и спаривания: в блутуз телефонной проги или в настройках
Какие есть мнения?

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

ELM-android

Сообщение AS21 » 14 июн 2017, 21:53

Первая проба пера, пакетная посылка:
AppVersion: 2.17.0
Type ELM327: Bluetooth
Device: AA:BB:CC:11:22:33
Write: ATE0
Read: OK

>
Write: ATFCSD30FF00
Read: OK

>
Write: ATFCSH
Read: ?

>
Write: ATFCSM1
Read: ?

>
Write: ATCAF0
Read: OK

>
Write: ATL0
Read: OK

>
Write: ATCRA
Read: ?

>
Write: ATSH
Read: ?

>
Write: ATZ
Read:

ELM327 v1.5

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

MMC_CAN_Log_v1

Сообщение AS21 » 15 июн 2017, 09:24

Дима!
Коннект - закончил, перехожу к запросам:
1) что делает этот код:
COM_IO.pas
Что делают эти строчки:
Result:=true;
if Str[1] <> 'a' then // ?? Str - это строка запроса (например "ATZ"? правильно? что значит в строке второй знак <> 'a' и 'a' - регистр учитывать?
begin
i := length (Str) ;
sw := 'att6 '+ IntToStr(i+2) + ' 64' + chr($0D) + chr($0A) + chr($00) + chr($00) + Str ; // ?? Почему с третьей позиции? и как будет выглядеть на примере ? зачем в конце дважды chr($00)
Str := sw
end
else Str := Str + chr($0D) + chr($0A);

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

Re: Подключение к CAN шине

Сообщение AS21 » 15 июн 2017, 12:43

Пока иду не системно, разными посылками дебажу свой код
еще одна проба пера
AppVersion: 2.17.0
Type ELM327: Bluetooth
Device: AA:BB:CC:11:22:33
Write: ATE0
Read: ATE0
OK

>
Write: ATFCSD30FF00
Read: OK

>
Write: ATFCSH620
Read: OK

>
Write: ATFCSM1
Read: OK

>
Write: ATCAF0
Read: OK

>
Write: ATL0
Read: OK

>
Write: ATCRA504
Read: OK

>
Write: ATSH620
Read: OK

>
Write: 0221B0
Read: BUS INIT: ERROR

>
Write: 021A87
Read: BUS INIT: ERROR

>
Write: 021A88
Read: BUS INIT: ERROR

>
Write: 041800FF00
Read: BUS INIT: ERROR

>
Write: ATZ
Read:

ELM327 v1.5

>

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

Re: Подключение к CAN шине

Сообщение AS21 » 15 июн 2017, 14:13

Дима, чтобы правильно использовать этот код:
MMC_ETACS.pas=> TMainForm
procedure TMainForm.BtnRdClick(Sender: TObject);
var
st, sw, fd : string ;
Stream : TFileStream ;
begin
if not connected then exit ;
//Read Coding data
if sys = 'ENGINE' then st := '0221C0' else
if sys = 'AT/CVT' then st := '0221EA' else
if sys = 'METER' then st := '0221BF' else
if sys = 'ABS/ASC' then st := '022165' else
if sys = 'SRS' then st := '022160' else
if sys = 'ETACS' then st := '0221B0' else
begin
MainForm.StMemo.Lines.Add('Function for current system not supported.');
exit ;
end;
if ELM327_IO(gdelay,st,sw) then
MainForm.StMemo.Lines.Add ( 'Coding Data: ' + sw + ' (' + INtToStr(length(sw) div 2) + ' bytes)' ) ;
fd := sw ;
//Read Customisation data
if sys = 'ETACS' then
begin
st := '0221B2' ;
if ELM327_IO(gdelay,st,sw) then
MainForm.StMemo.Lines.Add ( 'Customization Data: ' + sw + ' (' + INtToStr(length(sw) div 2) + ' bytes)' ) ;
fd := fd + chr($0D)+ chr($0A) + sw ;
//Save Coding to File
MainForm.FileSave.FileName := vin + '_' + ecupn + '_ETACS.mmk' ;
if sys = 'ENGINE' then
MainForm.FileSave.FileName := vin + '_' + ecupn + '_ENG.mmk' ;
if sys = 'ABS/ASC' then
MainForm.FileSave.FileName := vin + '_' + ecupn + '_ABS.mmk' ;
if sys = 'SRS' then
MainForm.FileSave.FileName := vin + '_' + ecupn + '_SRS.mmk' ;
if (MainForm.FileSave.Execute) then
begin
Stream := TFileStream.Create(MainForm.FileSave.FileName, fmCreate);
try
Stream.Write(fd[1], length(fd));
finally
Stream.Free;
end ;
end ;
end else MainForm.StMemo.Lines.Add('Function for current system not supported.') ;
end;
В какой последовательности надо послать команды на ELM?

И здесь тот же вопрос?
// Start diagnostic session
if not StartSession ('92') then
begin
MainForm.StMemo.Lines.Add('ECU not connected. Check IG ON.') ;
PortClose ;
exit ;
end ;
//Read ECU ID
if ELM327_IO(gdelay, '021A87', st) then
begin
sw := '' ;
for i := 0 to 8 do begin sw:=sw + chr(StrToHex(copy(st,21+i*2,2))) end ;
StMemo.Lines.Add ( 'Connect to ECU success.' + chr($0D) + chr($0A) +
'ECU ID: ' + copy(st, 1, 8) + chr($0D) + chr($0A) +
'H/W VER: ' + copy(st, 11, 4) + chr($0D) + chr($0A) +
'S/W VER: ' + copy(st, 15, 6) + chr($0D) + chr($0A) +
'ECU P/N: ' + sw);

ecupn := sw ;
end ;
sw := '' ;
if ELM327_IO(gdelay, '021A88', st) then
for i := 0 to (length(st)-1) div 2 do begin sw:=sw + chr(StrToHex(copy(st,1+i*2,2))) end ;
StMemo.Lines.Add ( 'VIN O: ' + copy(sw, 1, 17));
sw := '' ;
if ELM327_IO(gdelay, '021A90', st) then
for i := 0 to (length(st)-1) div 2 do begin sw:=sw + chr(StrToHex(copy(st,1+i*2,2))) end ;
vin := copy(sw, 1, 17) ;
if length(vin) < 14 then vin := sys ;
StMemo.Lines.Add ( 'VIN C: ' + vin);
connected := true ;

end;

AS21
Сообщения: 1095
Зарегистрирован: 04 авг 2014, 13:24

OBD + tel

Сообщение AS21 » 25 июн 2017, 09:41

Думаю вся путаница в работе двух приложений:
- блутуз телефон
- блутуз настройки
из-за несогласования трех состояний и некорректной записи данных в bt_conf.ini:
- Подключенные - есть питание и готово к работе (OBD (одно) + только один из телефонов)
- Сопряженные - по паролю (не ограничено по количеству)
- Доступные - обнаруженое устройство при поиске (не ограничено по количеству
Особенности OBD - только два состяния:
- Сопряженные + Подключенный
или
- Доступный (хоть раз обнаруженый, но на данный момент нет питания
В телефонах не заню где, а в магнитолах MTCC, MTCB:
В bt_conf.ini - хранятся все устройства, но только сопряженные
bt_conf.ini
[CONFIGURE]
autoconnect=0
pairlisttotal=1
passkey=1254
autoanswer=9
localname=CAR MyASX
[PAIRSTLIST]
type0=2
addr0=C0EEFB0356A0
name0=[A0001 (194)]0
type1=9
addr1=AABBCC112233
name1=OBDII
[LASTDEV]
addr=C0EE:FB:0356A0
Интерсно, где в коде:
1) кто восстанавдивает ЭТО файл, если его удалить?
2) кто обновляет в нем информацию?
3) где хранится инфа о "Доступных", но не "Сопряженых"?
bt_conf.ini -> pairlisttotal - отвечает только за размер массива (подключенные - настройки, сопряженные (подкл или не подключенные) для приложения телефона
А непосредственно - кого из списка светить как - идет опрос и по ответу -> фактическое состояние и куда помещать

Ответить