Я подключил два провода к часам SMBus и линиям передачи данных моей материнской платы (вручную припаял через провода, потому что нет заголовка). Я хочу связать эту шину с моим микроконтроллером.
Я подключил их к своей области, и они показывают правильные 3,3 В или около того (мне кажется, что провода были подключены, так как есть подтягивание).
Я могу читать и писать в этот SMBus через python-smbus в Linux. Тот же SMBus даже улавливает SPD EEPROM на модулях памяти, так что ЭТО smbus определенно работает. Но я не могу видеть ничего из этого действия в моей области.
На материнских платах ПК есть только один SMBus? Или есть несколько, и поэтому я подключаю свои провода в неправильных местах?
Моя материнская плата - ASRock X58 Extreme 6 (южный мост ICH10R)
Ответы:
Посмотрите таблицу данных для семейства ICH10 .
На странице 214 он описывает SMBus. На плате имеется только один интерфейс SMBus для управления / опроса устройств материнской платы, но есть дополнительный подчиненный SMBus, через который внешнее ведущее устройство может отправлять события на ICH10. Нет способа использовать это программно со стороны компьютера. Раздел 5.20.7 на стр. 222 описывает, как это работает и что вы можете сделать. Похоже, он используется для управления освещением, внешними сторожевыми устройствами, сенсорной телеметрией и т. Д.
Вполне возможно, что вы подключены к этому подчиненному интерфейсу, поэтому вы не видите трафика. Подтягивания на этих выводах, вероятно, предназначены для защиты входов с высоким сопротивлением.
источник
Сколько здесь автобусов, зависит от системы.
В настоящее время (2017 г.) многие однопроцессорные материнские платы используют один контроллер SMBus на южном мосту. Эта шина может быть подключена к обоим контактам SMBus на слотах PCIe и используется для таких вещей, как чтение информации конфигурации DRAM из eeprom. Процессоры, использующие разъемы с большим количеством контактов, такие как процессоры Intel Xeon E5, имеют несколько дополнительных шин I2C для связи с EEPROM памяти, поэтому не разделяйте одну шину I2C между слотами и устройствами материнской платы.
Если карта в слоте имеет конфликтующий адрес или выдает ложные сигналы на шину, в результате система может не загружаться (она не может прочитать параметры DIMM для инициализации контроллеров DRAM) или могут возникнуть проблемы с материнской платой I2C устройства, такие как мониторы температуры / напряжения.
К сожалению, стандарт SMBus в настоящее время не требует, чтобы устройства избегали очень распространенного адреса I2C, такого как 0x50-0x57 (EEPROM DIMM SPD), поэтому были созданы карты, которые отлично работают на серверах более высокого уровня с несколькими шинами, но не работают на младших конечные серверы с общей шиной. Какие адреса используются в общей шине, зависит от конструкции материнской платы и от того, какие слоты памяти заполнены. У вас может быть система с 4 слотами памяти, 2 из которых заполнены, и карта контроллера PCIe, которая использует SMBus, и все работает отлично. Когда вы добавляете еще 2 модуля DIMM, система не загружается, и причина в том, что адрес SMBus карты контроллера конфликтует с адресом I2C новых модулей DIMM. Проблема в контроллере, а не в памяти.
Обходные пути включают в себя: размещение ленты на выводах SMBus на плате контроллера (правильные выводы см. В статье Википедии о PCIe) или на некоторых материнских платах есть перемычка для управления, если SMBus направляется в слоты.
Долгосрочным решением было бы изменить спецификацию SMBus, чтобы она отражала эту реальность совместно используемых компьютеров SMBus / I2C, и сделать адреса 0x50-0x57 и любые другие часто используемые адреса для тепловых датчиков и тому подобное, запрещенные для добавления на карты. Спецификацию DIMM Serial Presence Detect (SPD) также можно уточнить, чтобы объяснить, как устройства на совместно используемых шинах I2C могут конфликтовать, и, возможно, обосновать, что принятие мер во избежание конфликтов адресов является хорошей идеей. Спецификация Micron SPD, которую я видел, говорит о битовых шаблонах, и вам нужно внимательно прочитать, чтобы понять, какие адреса I2C будут использованы.
источник