Перейти к содержанию

SMBus (System Management Bus)

Батареи ноутбуков, датчики температуры и контроллеры питания часто общаются по SMBus. Электрически это почти I²C, и устройства обычно совместимы, но у SMBus свои строгие правила: минимальная частота, таймаут и проверка пакета.

Обновлено Редакция GAW

SMBus (System Management Bus) — двухпроводная шина для управления питанием, батареями и датчиками на плате, построенная на основе I²C. Линии называются SMBCLK и SMBDAT, принцип тот же: открытый сток, подтяжки, условия START и STOP, адрес и подтверждения. Спецификация SMBus сама называет шины в целом совместимыми, но перечисляет отличия в отдельном приложении.

Чем SMBus отличается от I²C

ПараметрI²C (UM10204)SMBus 3.3.1
Частота тактаот 0 Гцот 10 кГц, классы до 100 кГц, 400 кГц и 1 МГц
Удержание SCL в нулебез ограничениятаймаут 25–35 мс
Пороги входа0,3 и 0,7 VDDфиксированные 0,8 и 1,35 В
Питание устройствне ограничено так строго1,8–5 В
Подтверждение своего адресане обязательнообязательно, с оговорёнными исключениями
Формат сообщенийтолько байтыкомандные протоколы (WRITE WORD, BLOCK READ и др.)
Проверка пакетанетнеобязательный байт PEC (CRC-8)

Таймаут и минимальная частота

В I²C ведомый может растягивать такт сколько угодно, и зависший ведомый блокирует шину навсегда. SMBus ограничивает это: если такт держится в нуле дольше 25 мс (tTIMEOUT,MIN), устройство вправе прервать обмен — спецификация настоятельно рекомендует ведомому отпустить шину, — а не позже 35 мс (tTIMEOUT,MAX) оно обязано быть готовым к новому START. Отдельно спецификация задаёт минимальную частоту 10 кГц и пределы на растягивание такта внутри байта и сообщения. Требования SMBus к таймаутам калькуляторы I²C на сайте не учитывают; электрические отличия от I²C — пороги и питание — сведены в таблице выше, а подтяжки для обычной шины I²C считает калькулятор подтяжки I²C.

PEC

Packet Error Checking — байт CRC-8 с полиномом x⁸ + x² + x + 1, который считается по всем байтам сообщения, включая адрес, и передаётся последним. Поддержка PEC необязательна, а устройства с PEC обязаны работать и с теми, кто его не поддерживает: у каждого протокола есть вариант с байтом PEC и без него.

Не путать с PMBus — отдельной спецификацией протокола управления источниками питания, на которую ссылается SMBus, — и с самим I²C: устройство I²C может не поддерживать таймаут и протоколы SMBus.

Частые вопросы

Можно ли подключить устройство SMBus к шине I²C?

Обычно да: спецификация SMBus прямо называет шины в целом совместимыми. Нужно учесть три вещи: частота такта не должна падать ниже 10 кГц а если такт держится в нуле дольше 25 мс, устройство SMBus вправе прервать обмен и сбросить интерфейс; пороги у SMBus фиксированные (0,8 и 1,35 В), а не доли питания; протоколы чтения SMBus используют повторный START, которого понимают не все устройства I²C.

Зачем в SMBus таймаут?

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

Что такое PEC в SMBus?

Packet Error Checking — необязательный байт CRC-8 в конце сообщения. Он считается по всем байтам, включая адрес, по полиному x⁸ + x² + x + 1. Его добавляет устройство, выдавшее последний байт данных. Если при записи ведомый ответил NACK после байта PEC, контроллер узнаёт об ошибке; но и ACK после PEC не гарантирует, что запись прошла: бит подтверждения тоже может исказиться.

Источники

  1. System Management Interface Forum. System Management Bus (SMBus) Specification, Version 3.3.1 (20 Oct 2024) — табл. 2: классы 100 кГц, 400 кГц и 1 МГц, fSMB от 10 кГц; tTIMEOUT 25–35 мс; tLOW:CEXT и tLOW:TEXT — пределы растягивания такта контроллером и ведомым; разд. 4.2.2: устройство, у которого такт удерживается в нуле дольше tTIMEOUT,MIN, отпускает шину и не позже tTIMEOUT,MAX готово к новому START; разд. 4.3.4: питание 1,8–5 В, VIL 0,8 В, VIH 1,35 В; разд. 6.4: необязательная проверка пакета PEC — байт CRC-8 по полиному x⁸ + x² + x + 1 по всем байтам сообщения, включая адрес и бит R/W, добавляет устройство, выдавшее последний байт данных; устройства с PEC должны работать и с устройствами без него; NACK после PEC у контроллера-передатчика означает ошибку (разд. 6.4.1.2); список литературы: спецификация PMBus; прил. B: отличия от I²C — пороги, минимальная частота, таймаут, обязательное подтверждение адреса, командные протоколы, повторный START
  2. NXP Semiconductors. UM10204: I2C-bus specification and user manual (Rev. 7.0, 1 October 2021) — разд. 3.1.2: пороги входа I²C зависят от питания — 0,3 и 0,7 VDD; табл. 11: нижней границы частоты SCL нет (0 Гц)

Нашли ошибку?