Obd ошибка bus error

Опубликовано: 28.06.2024

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

На платформах, совместимых с POSIX , ошибки шины обычно приводят к отправке сигнала SIGBUS процессу, вызвавшему ошибку. SIGBUS также может быть вызван любой общей ошибкой устройства, которую обнаруживает компьютер, хотя ошибка шины редко означает, что компьютерное оборудование физически сломано - обычно это вызвано ошибкой в программном обеспечении . Ошибки шины могут также возникать для некоторых других ошибок пейджинга; увидеть ниже.

Содержание

Причины

Есть как минимум три основных причины ошибок шины:

Несуществующий адрес

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

Невыровненный доступ

Большинство процессоров имеют байтовую адресацию , где каждый уникальный адрес памяти относится к 8-битному байту . Большинство процессоров могут получить доступ к отдельным байтам из каждого адреса памяти, но обычно они не могут получить доступ к более крупным блокам (16 бит, 32 бита, 64 бита и т. Д.) Без того, чтобы эти блоки были " выровнены " по определенной границе ( платформа x86 является заметным исключением. ).

Например, если многобайтовый доступ должен быть выровнен по 16 битам, адреса (в байтах) 0, 2, 4, 6 и т. Д. Будут считаться выровненными и, следовательно, доступными, в то время как адреса 1, 3, 5 и так далее будет считаться невыровненным. Точно так же, если многобайтовый доступ должен быть выровнен по 32 бита, адреса 0, 4, 8, 12 и так далее будут считаться выровненными и, следовательно, доступными, а все адреса между ними будут считаться невыровненными. Попытка получить доступ к блоку размером больше байта по невыровненному адресу может вызвать ошибку шины.

Некоторые системы могут иметь их гибрид в зависимости от используемой архитектуры. Например, для оборудования на основе мэйнфрейма IBM System / 360 , включая IBM System z , Fujitsu B8000, RCA Spectra и UNIVAC Series 90 , инструкции должны находиться на 16-битной границе, то есть адреса выполнения должны начинаться с даже байт. Попытки перейти на нечетный адрес приводят к исключению спецификации. Однако данные могут быть получены с любого адреса в памяти и могут быть одним байтом или больше в зависимости от инструкции.

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

Ошибки подкачки

FreeBSD , Linux и Solaris могут сигнализировать об ошибке шины, когда страницы виртуальной памяти не могут быть выгружены , например, потому что она исчезла (например, доступ к файлу с отображением памяти или выполнение двоичного образа, который был усечен во время работы программы), или потому что только что созданный файл с отображением памяти не может быть физически выделен, потому что диск заполнен.

Отсутствующий сегмент (x86)

На x86 существует более старый механизм управления памятью, известный как сегментация . Если приложение загружает регистр сегмента с помощью селектора отсутствующего сегмента (что в POSIX-совместимых операционных системах может быть выполнено только на языке ассемблера ), генерируется исключение. Некоторые операционные системы использовали это для свопинга, но в Linux это генерирует SIGBUS.

пример

Это пример невыровненного доступа к памяти, написанный на языке программирования C с синтаксисом ассемблера AT&T .

Компиляция и запуск примера в POSIX- совместимой ОС на x86 демонстрирует ошибку:

В GDB отладчик показывает , что непосредственное значение 0x2a в настоящее время хранятся в местоположении , хранящейся в EAX регистр , используя X86 язык ассемблера . Это пример косвенной адресации регистров .

Печать младших битов адреса показывает, что он не выровнен по границе слова («двойное слово» в терминологии x86).

ELM327 Bluetooth/USB/WI-FI - Обсуждение
Диагностический автосканер
Обсуждение »
Для сравнения устройства с конкурентами и по вопросам выбора устройств обращайтесь в раздел: Выбор и сравнение


  • Torque - здесь
  • HobDrive - ссылка
  • Программа терминала - ELM327Chat(Android).zip ( 146,2 КБ )
  • FORScan Lite -здесь
  • LeafSpy Lite - здесь


  • Carista - здесь


  • Проверка сканера - здесь
  • Первичные проверки адаптера - здесь
  • Как купить правильный адаптер - здесь
  • Ещё один метод - здесь


  • Видеоинструкция по подключению и настройке - здесь
  • Поменять в адаптере без веб интерфейса режим сети - здесь
  • Команда для калибровки напряжения - здесь
  • Инструкция для тех кто хочет взять правильный девайс, а в крайнем случае вернуть бабло за кривой! - здесь
  • Тонкая настройка ELM327 - здесь
  • Если наблюдается нестабильная работа (рвётся связь) - сюда.
  • Выбор версии адаптера: здесь и здесь.
  • Проверка адаптера без подключения к автомобилю: здесь.
  • Замена на оригинальный чип: здесь.
  • Настройка Vgate 2 WiFI без стандартного доступа к Web интерфейсу: здесь.
  • Распиновка для замены WiFi на BT - здесь
  • Если перестала работать кнопка в выключенном состоянии - здесь
  • Доработка адаптера - здесь
  • Доработка одноплатного адаптера - здесь, здесь и здесь
  • Одна из причин обрывов связи, реконнекта программ - здесь
  • Совместимость программ из AppStore с OBD2 адаптерами - здесь
  • Создание виртуального COM-порта - здесь.
  • Что делать, если вышла из строя схема управления питанием - здесь

Короче, покупка китайского адаптера- лотерея.
У одного продавца сегодня могут быть нормальные адаптеры, а завтра- фуфло.
И проверка терминалом- мало что даёт.

Китайцы успешно "адаптируют адаптер" под правильные ответы на запросы терминала.
Но это только ответы, к работоспособности не имеет отношения.

У меня 2 адаптера.

1. Проверку терминалом нормально не проходит.
На половину запросов- вопросительные знаки.
Работает при этом нормально.
Стабильная связь, верные данные.

2. Проверку терминалом проходит лучше первого.
Работает при этом криво, данные не все.

Мой работающий адаптер - ВНЕШНЕ выглядит как по ссылке с оранжевой этикеткой и четырьмя светодиодами.

Не работающий нормально- выглядит как маленький синий по ссылке.

Работающий адаптер я покупал здесь: />Т.к форумчане мне сказали, что он нормально работать не будет - я потребовал возврата денег.

Адаптер остался у меня и работает.

Всё, что мне надо - показывает. Верно показывает.
Но идеален ли он - то я не знаю.
Может, он ещё что-то должен, мне неведомо.

Прикрепленное изображение

Добавочка:
Оказывается, этот адаптер, возможно, не будет работать по "заводскому" протоколу, требующему настроек.
А по стандарту - работает.
Но мне уже и не хочется ничего настраивать.
И так что мне надо - показывает.

Хотел вообще-то турбобуст померить, он у меня добавлен чиповкой, а прога выше 2.55 бара не показывает.
Но возиться надоело.
Ясно, что буст- хорош. Точно померю в сервисе без проблем. Один замер нужен.

В рамках диагностического стандарта OBDII существует 5 основных протоколов обмена данными между электронным блоком управления (ЭБУ) и диагностическим сканером. Физически подключение автосканера к ЭБУ производится через разъем DLC (Diagnostic Link Connector), который соответствует стандарту SAE J1962 и имеет 16 контактов (2x8). Ниже представлена схема расположения контактов в разъеме DLC (рисунок 1), а также назначение каждого из них.

Рисунок 1 – Расположение контактов в разъеме DLC (Diagnostic Link Connector)

Расшифровка кодов ошибок по протоколу OBD 2 на русском

1. OEM (протокол производителя).

Коммутация +12в. при включении зажигания.

9. Линия CAN-Low, низкоскоростной шины CAN Lowspeed.

2. Шина + (Bus positive Line). SAE-J1850 PWM, SAE-1850 VPW.

10. Шина — (Bus negative Line). SAE-J1850 PWM, SAE −1850 VPW.

4. Заземление кузова.

5. Сигнальное заземление.

6. Линия CAN-High высокоскоростной шины CAN Highspeed (ISO 15765-4, SAE-J2284).

14. Линия CAN-Low высокоскоростной шины CAN Highspeed (ISO 15765-4, SAE-J2284).

7. K-Line (ISO 9141-2 и ISO 14230).

15. L-Line (ISO 9141-2 и ISO 14230).

16. Питание +12в от АКБ.

Назначение неопределенных контактов выбирается на усмотрение производителя автомобиля. Разъем должен быть расположен не далее, чем в 2 футах (0.61 метра) от рулевого колеса.

Иногда разъем OBD-II устанавливается на автомобили, которые в принципе не поддерживают ни один из OBD-II-протоколов. В таких случаях необходимо использовать специальный сканер, рассчитанный на работу с заводскими протоколами конкретной марки автомобиля - например, это касается Opel Vectra и некоторых автомобилей европейского рынка 1996-1997 гг.

Также бывают обратные ситуации, когда на автомобиле установлен нестандартный разъем, но при этом автомобиль поддерживает один из диагностических протоколов OBD-II.

Далее подробно рассмотрим формат и физический уровень каждого протокола связи в рамках стандарта OBDII.

SAE J1850 PWM

Существует два типа протокола J1850. PWM является высокоскоростным и обеспечивает передачу информации со скоростью 41,6 Кбайт/с. Он применяется в автомобилях марок Ford, Jaguar и Mazda. В протоколе PWM сигналы передаются по двум проводам, подсоединенным к 2 и 10 контакту диагностического разъема.

Формат сигнала протокола J1850 включает:

SOF - Start of Frame (начало кадра, высокий импульс на 200uS);

Header - заголовок длиной 1 байт;

CRC - Cyclic Redundancy Check (циклический избыточный код, 1 байт);

EOD - End Of Data (окончание данных, низкий импульс на 200uS).

SAE J1850 PWM

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

SAE J1850 VPW

Реальный пример сигнала SAE J1850 выгладит следующим образом:

ISO 9141-2

SAE J1850 VPW

Протокол VPW осуществляет передачу данных со скоростью 10,4 Кбайт/с, что существенно медленнее, чем у протокола PWM. Формат данного протокола идентичен SAE J1850 PWM . Данный протокол используется на автомобилях General Motors (GM) и Chrysler. VPW предусматривает обмен данными по одному проводу, подсоединенному ко 2 контакту диагностического разъема. Длина шины может достигать 35 метров.

ISO 9141-2

Данный протокол разработан компанией ISO. Он не такой сложный, как протоколы J1850 и не требует в использовании специальных коммуникационных микропроцессоров, но, с другой стороны, обеспечивает довольно медленную передачу данных со скоростью 10 Кбайт/c. Протоколы ISO 9141 и ISO 14230 схожи по физической реализации обмена информацией, но различаются ее использованием. Поэтому сканер ISO 9141, обычно может работать и с ISO 14230, но не наоборот.

В протоколе ISO 9141-2 сигналы передаются по 7 контакту (К-линия) и опционально по 15 контакту (L-линия). К-линия является двунаправленной (т.е. передает данные в обе стороны), L-линия однонаправленная и используется лишь для соединения ЭБУ и сканера, после чего линия L переходит в состояние логической единицы.

Физический уровень передачи информации в протоколах ISO 9141 и ISO 14230 заключается в одновременной передачи ЭБУ специального 8-битного кода по К- и L-линиям со скоростью 5Б/сек. Если код правильный, то ЭБУ посылает сканеру 8-битный код со скоростью последующего соединения. Затем передается еще два кода с информацией о последующем соединении и расположении К- и L-линий. Сканер возвращает отражение этих кодов в ЭБУ. На этом процесс распознавания окончен.

В общем виде процесс инициализации сигнала в протоколах ISO 9141 и ISO 14230 выглядит следующим образом:

ISO 9141 и ISO 14230

Передача данных в протоколе осуществляется по следующей схеме:

Keyword Protocol 2000

ISO 14230-4 (др. название Keyword Protocol 2000)

На физическом уровне данный протокол идентичен ISO 9141, но является еще более медленным (скорость передачи данных от 1,2 до 10 Кбайт/c в быстрой версии).

ISO 15765 CAN

CAN-протокол был разработан компанией Bosch для автомобильного и промышленного применения. В рамках стандарта OBD2 протокол использует линии CAN High и CAN Low, т.е. 2 контакта для обмена сигналом: 6 и 14. Является самым скоростным и совершенным. Сейчас данный протокол используется на большинстве современных автомобилях. Стандарт CAN не регламентирует определенной скорости работы для каждой шины в автомобиле. С помощью отдельных и встроенных микроконтроллеров есть возможность менять ее от 20 Кбит/c до 1 Мбит/с. Более подробно CAN рассмотрен в статье CAN-шина и CAN-интерфейс.

Autocom 2015.1 расшифровка кодов ошибок

Интерпретация диагностических кодов неисправностей для инструментов Delphi и серии DS

Начиная с определенного момента, все производители перешли на общий стандарт диагностического разъема в производстве своих автомобилей, этим стандартом стал OBD 2.

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

по совместимости машин с обд-2 стандартом.

в связи с нашествием ситроенщиков ;) , не умеющих пользоваться яндексом, краткая компиляция из разных интернет-источников.

для штатов совместимость с обд-2 стандартом обязательна с 96-97 года. канада на два года позже - 98-99. европа - 2001-2002 для бензиновых машин, и 2004 для дизелей. япония - примерно с 2003.

в любом случае через обд-2 не будет читаться машина с НЕ-обд-2 разъемом. машина с обд-2 разъемом - не обязана быть совместима с обд-2 стандартом. то есть наличие знакомого разъема - не повод для радости. отсутствие - необорот, однозначно говорит о несовместимости.

то есть машина из америки гарантированно будет читаться с помощью обд-2 совместимого адаптера (elm-327 и аналоги) с 97 года, а такая же на вид европейская машина - только с 2002. исключения и переплетения возможны (типа крайслер вояжер хоть и европейской сборки, но и с 98 года будет читаться по обд-2), но вы все здесь достаточно взрослые люди так что додумайте сами. ;) в любом случае читать машину раньше заявленного года через обд-2 - это лотерея, и вы должны понимать что отсутствие связи с такой машиной ни о чем не говорит.

в любом случае, стандарт обд-2 подразумевает диагностику только PCM, то бишь двигателя и коробки-автомат, но не абс, аирбэгов и прочих кондиционеров и вэбаст.
впрочем, и тут есть некоторые "исключения", то бишь существует софт для некоторых марок, который через адаптер на elm-327 (обычно версии 1.3 и выше - это важно! причем китайский 1.5 - не факт что прокатит) может диагностировать други системы на определенных марках. как пример - fiatecuscan для фиатов, vauxcheck для опелей, и если не путаю - scanxl-elm для фордов.

просьба дополнять, если у кого есть что сказать. только без флуда, за который я, как обычно, буду жестоко наказывать. еще жестче буду наказывать за вопросы "где скачать" и "почему не скачивается"

для диагностики нам нужна программно-аппаратная система. при отсутствии любого из компонентов ничего работать не будет. аппаратная часть - это в данном случае компьютер и адаптер ЕЛМ. программная - это соответственно тот софт который связывается с машиной.
с аппаратной точки зрения ЕЛМ-адаптер поддерживает большинство диагностических стандартов. но кроме физического уровня связи существуют и другие. и вот они-то у всех разные, за исключением ОБД-2 стандарта.
поэтому при помощи ЕЛМ-адаптера МОЖНО связаться с любой системой любой машины, НО - вопрос каким софтом. для опеля есть vauxcheck, для фиатов - fiatecuscan, для фордов - forscan и elmconfig, вот пожалуй и всё. есть еще универсальный вариант - терминалка, но это не есть инструмент для начинающих. да и для продвинутых это тоже неудобно, честно говоря.

то есть, если машина соответствует ОБД-2 стандарту - то тут всё в шоколаде. если НЕ соответствует, или требудется диагностика систем не входящих в обд-2 (а стандарт оговаривает работу с мотором и коробкой, как мы помним) - тут нужно знать "адреса и пароли".

UPD: в последнее время китайцы стали массово впаривать адаптеры, не имеющие практически ничего общего с оригинальным elm-327. то есть они поддерживают ограниченный набор команд и соответственно работают с ограниченным набором софта. подробнее можно почитать тут

После обновления Linux, при следующем выключении компьютера на экран повалилась куча одинаковых сообщений об ошибке: " pcieport 0000:00:1c.3: PCIe Bus Error: severity=Corrected, type=Physical Layer ". Причём длится это безобразие довольно долго, так что рука тянется принудительно выключить компьютер с кнопки, что я пару раз и проделал, пока не нашёл решения проблемы.

Как я уже сказал выше, выключение или перезагрузка компьютера стала адовой процедурой — лог повторяющихся ошибок бежал по экрану в течении (!) двух минут. Оказалось, что данная проблема постигла практически всех владельцев интеловских процессоров и, по всей видимости, связана с попытками понизить питание на порту PCIe. На тематических Linux-форумах предлагается добавить следующие два параметра при загрузке ядра:

Однако, возвращаться к использованию устаревших методов доставки прерываний мне совсем не хотелось — костыли, так себе. Решил пойти другим путём и просто отключить технологию ASPM (Active-State Power Management).

ASPM позволяет управлять энергопотреблением шин PCI Express (PCIe) посредством их перевода в энергосберегающий режим, если устройство не используются. В то же время, активация ASPM приводит к задержке ответа от устройств, так как требуется некоторое время на переключение режимов работы шины.

Поведением ASPM можно управлять, добавив параметр pcie_aspm в загрузчик или внеся изменения в файле /sys/module/pcie_aspm/parameters/policy (pcie_aspm=off отключает ASPM, а pcie_aspm=force принудительно задействует, даже на поддерживающих технологию устройствах). Я подправил загрузчик GRUB:

В моём случае, ошибку выдавал встроенный Wi-Fi адаптер, который в принципе не отличался стабильностью в работе и постоянно отваливался. Отдельно отключить энергосбережение для WiFi поможет продвинутая консольная утилита для управления питанием TLP (/etc/default/tlp):

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

Читайте также: