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 вышло за рамки энергоснабжения и охватывает множество задач по идентификации и инициализации системных компонентов.
В смешанных системах спецификация 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 В.
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 мА.
Тактовая частота 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-совместимых устройств — главное не нарушать эти временные параметры.
В I²C ведомое устройство может не подтверждать (NACK) адрес, если не готово принять данные. В SMBus устройство всегда должно подтверждать свой адрес для контроля факта физического присутствия устройства на шине (например, «горячее» подключение батареи или док-станции).
Также в I²C ведомое устройство, подтверждая адрес, может позже отказаться принимать данные дополнительным NACK. В SMBus NACK также используется для индикации невалидной команды или данных. Поэтому устройство должно уметь отправлять NACK после любого байта, а не только как признак занятости, иначе повтор передачи невозможен — SMBus не предусматривает отдельного сигнала «повтор».
Эти особенности критичны для устройств, обрабатывающих важные системные данные, например, SMBus-хосты или компоненты Smart Battery System.
Каждая передача в SMBus происходит в формате одного из определённых протоколов SMBus, которые представляют подмножество форматов передачи данных в I²C. I²C-устройства, поддерживающие необходимые форматы, совместимы со спецификациями SMBus. I²C-устройства, не соответствующие этим протоколам, не могут обслуживаться стандартными средствами SMBus, включая спецификации ACPI.
SMBus использует I²C-совместимое аппаратное адресование, но добавляет второй уровень средств — динамическое выделение адресов (Address Resolution Protocol, ARP). За счёт этого поддерживается «горячее» подключение устройств и их автоматическая конфигурация без перезагрузки системы: устройства определяются и получают уникальные адреса автоматически, реализуя интуитивный plug-and-play интерфейс. Стандарт делает принципиальное различие между системным хостом и остальными устройствами (ведущими/ведомыми).
В PCI Express ARP рекомендуется для контактов SMBus, однако в спецификации SMBus его реализация допускается как необязательная и потому часто не применяется[3].
В SMBus реализован механизм тайм-аута: если передача длится слишком долго, устройства сбрасываются. Именно это обуславливает минимальную рабочую частоту 10 кГц — во избежание блокировки шины. В I²C ведомое устройство может задержать тактовый сигнал на неопределённое время, «растягивая» его, чтобы не потерять связь во время выполнения внутренней задачи. В SMBus задержка ограничена 35 мс, по истечении этого времени считается, что на шине возникла ошибка, после чего все устройства должна сбросить обмен — ведомым не допускается долгий «захват» линии.
Начиная с версии SMBus 1.1, реализован опциональный режим контроля ошибок в пакетах (PEC): к каждому сообщению добавляется контрольный байт (packet error code), вычисляемый по алгоритму CRC-8 для всего сообщения, включая адрес и бит чтения/записи. Используется стандартный полином x8+x2+x+1 (CRC-8-ATM/HEC, инициализация нулём)[4][5][6].
Шина 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].
Примечания
Литература
- Официальный сайт SMBus (англ.). smbus.org. Дата обращения: 7 июня 2024.
- Официальные спецификации SMBus (англ.). smbus.org. Дата обращения: 7 июня 2024.
- SBS forum (англ.). sbs-forum.org. Дата обращения: 7 июня 2024.
- SMBus на tech-faq.com (англ.). tech-faq.com. Дата обращения: 7 июня 2024.