Conectei dois fios ao relógio SMBus e às linhas de dados da minha placa-mãe (soldadas manualmente via fios, porque não há cabeçalho). Desejo fazer interface deste barramento com meu microcontrolador.
Liguei-os ao meu escopo e eles mostram os 3,3V corretos ou mais ou menos (isso me parece que os fios foram conectados desde que há uma interrupção).
Eu posso ler e escrever neste SMBus via python-smbus no linux. O mesmo SMBus capta os eeproms SPD nos módulos de memória, portanto, ESTE smbus definitivamente funciona. Mas não consigo ver nenhuma dessas atividades no meu escopo.
Existe apenas um SMBus em placas-mãe para PC? Ou existem vários, e por isso estou ligando meus fios aos lugares errados?
Minha placa-mãe é uma ASRock X58 Extreme 6 (Southbridge é ICH10R)
Respostas:
Dê uma olhada na folha de dados da família ICH10 .
Na página 214, descreve o SMBus. Há apenas uma interface SMBus integrada para controlar / pesquisar dispositivos da placa-mãe, mas há um SMBus escravo adicional , através do qual um dispositivo mestre externo pode enviar eventos para o ICH10. Não há como usar isso programaticamente do lado do computador. A seção 5.20.7 na página 222 descreve como isso funciona e o que você pode fazer. Parece que é usado para gerenciamento de luzes apagadas, cães de guarda externos, telemetria de sensores etc.
Pode ser que você esteja conectado a essa interface escrava, e é por isso que não está vendo tráfego. As extensões desses pinos provavelmente estão lá para proteger as entradas de alta impedância.
fonte
Quantos ônibus existem depende do sistema.
Atualmente (2017), muitas placas-mãe com soquete de processador único usam o único controlador SMBus na ponte sul. Esse barramento pode ser conectado a ambos os pinos SMBus nos slots PCIe e é usado para coisas como a leitura das informações de configuração da DRAM no eeprom. Os processadores que usam soquetes com mais pinos, como os processadores Intel Xeon E5, possuem vários barramentos I2C extras para conversar com os eeproms de memória; portanto, não compartilhe um único barramento I2C entre slots e dispositivos da placa-mãe.
Se uma placa em um slot tem um endereço conflitante ou coloca sinais falsos no barramento, o resultado é que o sistema pode não inicializar (não consegue ler os parâmetros DIMM para inicializar os controladores DRAM) ou pode ter problemas operacionais com a placa-mãe I2C dispositivos como os monitores de temperatura / tensão.
Infelizmente, o padrão SMBus atualmente não exige dispositivos para evitar endereços I2C muito comuns, como 0x50-0x57 (DIMM SPD eeproms), de modo que foram criados cartões que funcionam bem em servidores de ponta com vários barramentos, mas não funcionam em níveis mais baixos. servidores finais com um barramento compartilhado. Quais endereços são usados em um design de barramento compartilhado dependerão do design da placa-mãe e de quais slots de memória são preenchidos. Você pode ter um sistema com 4 slots de memória, 2 dos quais são preenchidos e uma placa controladora PCIe que usa SMBus e tudo funciona bem. Quando você adiciona mais 2 DIMMs, o sistema não inicializa e o motivo é que o endereço SMBus da placa controladora entra em conflito com o endereço I2C dos novos DIMMs. O problema é a placa controladora, não a memória.
As soluções alternativas incluem: colocar fita nos pinos SMBus da placa controladora (consulte o artigo da Wikipedia sobre PCIe para obter os pinos corretos) ou algumas placas-mãe têm um jumper para controlar se o SMBus é roteado para os slots.
Uma solução a longo prazo seria alterar as especificações do SMBus para refletir essa realidade dos computadores compartilhados SMBus / I2C e tornar os endereços 0x50-0x57 e qualquer outro endereço comumente usado para sensores térmicos e outros, proibidos para adicionar cartões. A especificação DIMM Serial Presence Detect (SPD) também pode ser esclarecida para esclarecer como os dispositivos em barramentos I2C compartilhados podem entrar em conflito, e talvez defenda que tomar medidas para evitar conflitos de endereço é uma boa idéia. A especificação do Micron SPD que eu já falei sobre padrões de bits e você deve ler atentamente para perceber quais endereços I2C serão consumidos.
fonte