SMBus

SMBus (англ. System Management Bus, шина системного управления) — простой двухпроводной интерфейс, основанный на однотактной передаче сигналов и предназначенный для лёгкой коммуникации между устройствами. Наиболее часто используется в чипсетах материнских плат компьютеров для обмена информацией с источником питания, например, включение/выключение. Конкретная функциональность и аппаратная реализация могут варьироваться у разных производителей.

Описание

SMBus был разработан на основе I²C для обмена данными с малополосными устройствами на материнской плате, особенно с элементами подсистемы электропитания, такими как контроллеры аккумулятора ноутбуков[1]. К другим типичным устройствам относятся внешние ведущие контроллеры, датчики температуры, датчики оборотов вентиляторов, монитор напряжений, переключатели крышки ноутбука, генераторы тактового сигнала, элементы RGB-подсветки. Карты расширения PCI также могут подключаться к сегменту SMBus.

Через SMBus устройство может передавать информацию о производителе и модели, сохранять своё состояние для событий приостановки питания, сообщать о возникших ошибках, принимать параметры управления, возвращать статус или опрашивать регистры чипсета. SMBus, как правило, не конфигурируется и недоступен напрямую для пользователя[1]. Хотя устройства SMBus обычно не идентифицируют тип своей функциональности, новая коалиция PMBus расширила стандарт SMBus соглашениями, позволяющими идентификацию.

Стандарт SMBus был определён компаниями Intel и Duracell в 1994 году[2]. Данная шина осуществляет передачу тактового сигнала, данных и команд и базируется на последовательном протоколе I²C, разработанном компанией Philips[1]. Диапазон тактовой частоты — от 10 до 100 кГц - стандарт PMBus расширяет частоту до 400 кГц. Электрические уровни и временные параметры SMBus определены более жёстко, чем у I²C, но устройства обеих систем часто могут использоваться на одной линии передачи данных.

Шина SMBus применяется для соединения в различных стандартах управления платформой, включая: «Alert Standard Format» (ASF), «Desktop and mobile Architecture for System Hardware» (DASH), «IPMI» (Intelligent Platform Management Interface).

SMBus также используется для доступа к информации о конфигурации оперативной памяти посредством «Serial presence detect»(SPD). Применение SMBus вышло за рамки энергоснабжения и охватывает множество задач по идентификации и инициализации системных компонентов.

Входные уровни напряжения (VIL и VIH)

В смешанных системах спецификация I²C определяет пороговые уровни входного сигнала как 30% и 70% от питающего напряжения VDD, которое может составлять 5 В, 3,3 В или другую величину. В отличие от этого, SMBus задаёт фиксированные уровни: VIL,max — 0,8 В, VIH,min — 2,1 В (SMBus 2.0, питание 3–5 В), а в версии SMBus 3.0 уровни составляют 0,8 В и 1,35 В соответственно при VDD от 1,8 до 5 В.

Ток утечки (IOL)

SMBus 2.0 определяет класс «High Power», включающий способность тянуть линию до 4 мА, что недостижимо для микросхем I²C, если сопротивление подтягивающего резистора выбрано под параметры I²C. Устройства NXP имеют более высокие энергопараметры, чем SMBus 1.0. Основное различие — возможность протягивать ток при уровне VOL = 0,4 В.

  • SMBus low power = 350 мкА
  • SMBus high power = 4 мА
  • I²C = 3 мА

Совместимость обеспечивается при подборе подтягивающего резистора для тока 3 мА.

Частота (FMAX и FMIN)

Тактовая частота SMBus составляет 10–100 кГц. У I²C возможен диапазон 0–100 кГц, 0–400 кГц, 0–1 МГц и 0–3,4 МГц в зависимости от режима. Работа на частотах ниже 10 кГц несовместима с SMBus (устройства могут считать шину зависшей). Однако многие SMBus-устройства допускают пониженные частоты.

SMBus 3.0 добавляет режимы на 400 кГц и 1 МГц.

Тайминги

  • SMBus определяет тайм-аут 35 мс при низком уровне тактовой линии. В I²C такой тайм-аут отсутствует.
  • SMBus определяет параметры TLOW:SEXT (класс устройств-ведомых) и TLOW:MEXT (класс ведущих). У I²C аналогичные ограничения не заданы.
  • В SMBus отдельно зафиксированы времена нарастания и спада фронта сигнала. В I²C такие характеристики не задаются.
  • Тайминг SMBus не мешает подключению I²C-совместимых устройств — главное не нарушать эти временные параметры.

Использование ACK/NACK

В I²C ведомое устройство может не подтверждать (NACK) адрес, если не готово принять данные. В SMBus устройство всегда должно подтверждать свой адрес для контроля факта физического присутствия устройства на шине (например, «горячее» подключение батареи или док-станции).

Также в I²C ведомое устройство, подтверждая адрес, может позже отказаться принимать данные дополнительным NACK. В SMBus NACK также используется для индикации невалидной команды или данных. Поэтому устройство должно уметь отправлять NACK после любого байта, а не только как признак занятости, иначе повтор передачи невозможен — SMBus не предусматривает отдельного сигнала «повтор».

Эти особенности критичны для устройств, обрабатывающих важные системные данные, например, SMBus-хосты или компоненты Smart Battery System.

Протоколы SMBus

Каждая передача в SMBus происходит в формате одного из определённых протоколов SMBus, которые представляют подмножество форматов передачи данных в I²C. I²C-устройства, поддерживающие необходимые форматы, совместимы со спецификациями SMBus. I²C-устройства, не соответствующие этим протоколам, не могут обслуживаться стандартными средствами SMBus, включая спецификации ACPI.

Протокол разрешения адреса (Address Resolution Protocol)

SMBus использует I²C-совместимое аппаратное адресование, но добавляет второй уровень средств — динамическое выделение адресов (Address Resolution Protocol, ARP). За счёт этого поддерживается «горячее» подключение устройств и их автоматическая конфигурация без перезагрузки системы: устройства определяются и получают уникальные адреса автоматически, реализуя интуитивный plug-and-play интерфейс. Стандарт делает принципиальное различие между системным хостом и остальными устройствами (ведущими/ведомыми).

В PCI Express ARP рекомендуется для контактов SMBus, однако в спецификации SMBus его реализация допускается как необязательная и потому часто не применяется[3].

Тайм-аут

В SMBus реализован механизм тайм-аута: если передача длится слишком долго, устройства сбрасываются. Именно это обуславливает минимальную рабочую частоту 10 кГц — во избежание блокировки шины. В I²C ведомое устройство может задержать тактовый сигнал на неопределённое время, «растягивая» его, чтобы не потерять связь во время выполнения внутренней задачи. В SMBus задержка ограничена 35 мс, по истечении этого времени считается, что на шине возникла ошибка, после чего все устройства должна сбросить обмен — ведомым не допускается долгий «захват» линии.

Контроль ошибок в пакетах (Packet Error Checking)

Начиная с версии SMBus 1.1, реализован опциональный режим контроля ошибок в пакетах (PEC): к каждому сообщению добавляется контрольный байт (packet error code), вычисляемый по алгоритму CRC-8 для всего сообщения, включая адрес и бит чтения/записи. Используется стандартный полином x8+x2+x+1 (CRC-8-ATM/HEC, инициализация нулём)[4][5][6].

Сигнал SMBALERT#

Шина SMBus опционально поддерживает дополнительную общую линию прерывания (interrupt) SMBALERT#, через которую ведомые уведомляют хост о событиях. Также определён менее распространённый протокол «Host Notify», позволяющий передавать дополнительные данные по аналогии с многохостовым режимом I²C.

Поддержка программных платформ

Устройства SMBus поддерживаются в операционных системах FreeBSD, OpenBSD, NetBSD, DragonFly BSD, Linux, начиная с Windows 98 и новее, а также в Windows CE.

Замещение стандарта

С введением стандарта DDR5 шина I3C пришла на смену SMBus для задач идентификации модулей памяти[7].

Устройства PCI Express традиционно используют SMBus как внеполосный интерфейс для управления (out-of-band management port). Однако производители оборудования часто используют мультиплексоры SMBus, чтобы разделить адресацию (вместо поддержки механизма ARP), что приводит к разрывам соединения для протоколов Management Component Transport Protocol и других при переключении мультиплексора. С этой проблемой борется спецификация SNIA Enterprise and Data Center Standard Form Factor версии 3.1 (январь 2023), предлагающая использовать I3C basic поверх двухпроводного интерфейса PCIe[3]. Спецификация NVM Express 2.1 также допускает использование I3C «по аналогии с соглашениями SNIA SFF TA's EDSFF и PCI-SIG для I3C»[8].

Примечания

Литература