Saya telah menghubungkan dua kabel ke jam SMBus dan jalur data motherboard saya (disolder secara manual melalui kabel, karena tidak ada header). Saya ingin menghubungkan bus ini ke mikrokontroler saya.
Saya menghubungkan ini ke ruang lingkup saya, dan mereka menunjukkan 3.3V yang benar atau sekitar (ini menurut saya bahwa kabel telah terhubung karena ada pullup).
Saya bisa membaca dan menulis ke SMBus ini melalui python-smbus di linux. SMBus yang sama bahkan mengambil eeprom SPD pada modul memori, jadi smbus INI pasti berfungsi. Tapi saya tidak bisa melihat kegiatan ini di lingkup saya.
Apakah hanya ada satu SMBus di motherboard PC? Atau ada beberapa, jadi saya menghubungkan kabel saya ke tempat yang salah?
Motherboard saya adalah ASRock X58 Extreme 6 (Southbridge is ICH10R)
Jawaban:
Lihatlah lembar data untuk keluarga ICH10 .
Di halaman 214, ini menggambarkan SMBus. Hanya ada satu antarmuka SMBus onboard untuk mengendalikan / polling perangkat motherboard, tetapi ada SMBus budak tambahan , di mana perangkat master eksternal dapat mengirim acara ke ICH10. Tidak ada cara untuk menggunakan ini secara pemrograman dari sisi komputer. Bagian 5.20.7 di halaman 222 menjelaskan cara kerjanya dan apa yang dapat Anda lakukan. Sepertinya ini digunakan untuk manajemen pemadaman lampu, pengawas eksternal, telemetri sensor, dll.
Bisa jadi Anda sudah melekat pada antarmuka budak itu, itulah sebabnya Anda tidak melihat lalu lintas. Pull-up pada pin tersebut mungkin ada untuk melindungi input impedansi tinggi.
sumber
Berapa banyak bus yang tergantung pada sistem.
Saat ini (2017) banyak motherboard soket prosesor tunggal menggunakan pengendali SMBus tunggal di jembatan selatan. Bus ini dapat dihubungkan ke KEDUA pin SMBus pada slot PCIe dan digunakan untuk hal-hal seperti membaca info konfigurasi DRAM dari eeprom. Prosesor yang menggunakan soket dengan lebih banyak pin, seperti prosesor Intel Xeon E5, memiliki beberapa bus I2C ekstra untuk berbicara dengan eeprom memori, jadi jangan berbagi bus I2C tunggal antara slot dan perangkat motherboard.
Jika kartu dalam slot memiliki alamat yang bertentangan, atau menempatkan sinyal palsu di bus, hasilnya adalah sistem mungkin tidak bisa boot (tidak dapat membaca parameter DIMM untuk menginisialisasi pengontrol DRAM) atau mungkin memiliki masalah operasional dengan motherboard I2C perangkat seperti monitor suhu / tegangan.
Sayangnya, standar SMBus saat ini tidak memerlukan perangkat untuk menghindari alamat I2C yang sangat umum, seperti 0x50-0x57 (eMMP SPD DIMM), jadi kartu telah dibuat yang berfungsi dengan baik pada server kelas atas dengan banyak bus tetapi tidak berfungsi lebih rendah end server dengan bus bersama. Alamat apa yang digunakan pada desain bus bersama akan tergantung pada desain motherboard dan slot memori apa yang terisi. Anda mungkin memiliki sistem dengan 4 slot memori, 2 dari apa yang terisi, dan kartu pengontrol PCIe yang menggunakan SMBus dan semuanya berfungsi dengan baik. Ketika Anda pergi untuk menambahkan 2 DIMM lagi, sistem tidak bisa boot, dan alasannya adalah karena alamat kartu SMBus bertentangan dengan alamat I2C dari DIMM yang baru. Masalahnya adalah kartu pengontrol, bukan memori.
Penanganannya meliputi: menempatkan pita pada pin SMBus pada kartu pengontrol (lihat artikel Wikipedia tentang PCIe untuk pin yang benar), atau beberapa motherboard memiliki jumper untuk mengontrol jika SMBus diarahkan ke slot.
Solusi jangka panjang adalah mengubah spesifikasi SMBus untuk mencerminkan kenyataan ini dari komputer SMBus / I2C yang dibagikan, dan membuat alamat 0x50-0x57 dan alamat lainnya yang biasa digunakan untuk sensor termal dan semacamnya, dilarang untuk ditambahkan kartu. Spesifikasi DIMM Serial Presence Detect (SPD) juga dapat diklarifikasi untuk menguraikan bagaimana perangkat pada bus I2C bersama dapat bertentangan, dan mungkin membuat kasus bahwa mengambil langkah-langkah untuk menghindari konflik alamat adalah ide yang baik. Micron SPD spec yang saya lihat berbicara tentang pola bit dan Anda harus membaca dengan cermat untuk menyadari apa yang akan dikonsumsi oleh alamat I2C.
sumber