Esta comunicação é I²C?


9

Preciso decodificar a comunicação entre dois dispositivos, mas não tenho informações sobre esses dispositivos. Tudo o que sei é que são necessários quatro fios (GND, VCC e dois fios de comunicação). Suspeito que seja comunicação I²C.

Estou tentando decodificá-lo com a ferramenta de decodificação do osciloscópio, mas não tenho muita certeza. Não consigo identificar os elementos da comunicação I²C adequadamente quando verifico visualmente as formas de onda.

Observando as formas de onda, fiz as seguintes suposições, e talvez alguém possa ajudar. Estas foram as minhas suposições:

  1. Tudo leva a acreditar que o relógio é o sinal azul e os dados são o sinal vermelho.
  2. O relógio parece estar invertido porque seu estado ocioso não está em alto nível.
  3. Não tenho certeza se o sinal de dados também está invertido, mas parece ser.

Minhas suposições estão corretas?

Na última figura, a figura com o número 5 indicado em um círculo, e há uma parte do sinal. Não consigo identificar os bits de início, confirmação e parada. Alguém pode identificar esses elementos apenas olhando para a figura?

Digite a descrição da imagem aqui Digite a descrição da imagem aqui

[Editado] Algumas pessoas me perguntaram sobre os dispositivos que estão na comunicação. A comunicação é entre uma chave do carro e uma ferramenta que não tenho permissão para dizer, mas estou tentando fazer uma engenharia reversa.


11
Você tem a condição inicial na borda vermelha mais à esquerda (SDA). Ele fica baixo enquanto o azul invertido (–SCL) é mantido baixo. Depois disso, as alterações para vermelho (SDA) parecem ocorrer apenas quando o azul invertido (–SCL) estiver alto. Isso é conversa válida de I²C.
Janka

2
@Janka, isso é apenas uma conversa I2C válida se você assumir que o SCL está invertido. Não há razão para assumir isso.
Annie

2
@Janka, o OP listou isso como uma suposição. Essa suposição é baseada na suposição de que é I2C. Há várias razões para acreditar que este não é o I2C - uma delas é que o relógio está ocioso.
Annie

5
@ Daniel, você poderia nos dizer quais são os dois dispositivos?
Annie

2
Talvez, em vez de se preocupar com "o que é", você deva pensar em "o que diz". Descubra quais bordas você precisa provar. Obtenha um analisador lógico, provavelmente do tipo USB de streaming, e comece a escrever um decodificador que captura o escopo da variabilidade. Em seguida, comece a procurar padrões nos dados.
21418 Chris Stratton #

Respostas:


6

Meu palpite é que é o protocolo "I2C-like" caseiro de alguma empresa. Algumas pessoas antigamente, ao usar o I2C, significavam ter que dar dinheiro à Philips.

Parece ter um ACK (o pulso curto na linha de dados antes do alongamento do relógio se parece muito com a linha de dados sendo passada do mestre para o escravo).

Estranhamente, ele parece transmitir 7 bits por vez.


11
Se for uma versão proprietária do protocolo, ele poderá usar a comunicação de 7 bits ou menos também
Maple Maple

6
@ Maple Sim. Posso imaginar um engenheiro dizendo: "Como fazemos isso como o I2C, mas apenas o suficiente para não precisar pagar royalties? Inverta o relógio e envie 7 bits por vez". Mas eu só posso adivinhar.
Annie

11

Dado que existem apenas 8 relógios por byte (I2C requer um nono relógio para o bit ACK / NAK) e o estado ocioso do relógio parece baixo, eu diria que é mais provável que seja uma interface SPI (ou SPI).

Entretanto, não tenho certeza sobre a largura extra do relógio no primeiro bit de cada byte.


11
Por outro lado, esse pulso estreito no final da sequência do relógio se parece muito com o NACK. Além disso, o que parece estar ocioso em baixa pode ser o alongamento do relógio, que não é mais permitido por especificações, mas pode ser usado por escravos antigos. O estado inicial nas imagens (1) e (2) é realmente alto
Maple

11
@ Maple: Eu vejo o seu pulso de dados estreito, mas ainda não consigo ver o pulso do 9º relógio. O padrão de dados é perfeitamente consistente com certas configurações SPI de fase e polaridade do relógio.
Dave Tweed

11
Isso é verdade, eu realmente concordo com você no relógio. O que é estranho para mim é inconsistente SDI / SDO (seja ele qual for) comportamento ocioso nas extremidades de (1)
bordo

11
@Maple O I2C não liberaria as linhas para alta ociosidade?
Selvek

11
@Selvek Sim, e é exatamente isso que vejo na figura (1) e no início da figura (2). O restante, no entanto, é mais consistente com o SPI, como Dave apontou. Bem, além do surpreendente primeiro relógio que parece o bit de início. Hmm ... começar pouco ... isso poderia ser ...
bordo

3

Vou jogar meu chapéu no ringue ...

Se estes são dispositivos antigos, você pode observar uma variante síncrona RS-232 "mínima mínima" de 7 bits:

  • Esse pulso mais longo no início de cada quadro pode ser um pouco inicial, e

  • O platô no sinal do relógio no início poderia retornar a 0 antes de passar para a "marca" negativa. (Você não forneceu tensão nas capturas de tela, acho que estou aqui).


11
Oooh, isso é novo para mim. Tem algum reconhecimento? (Não foi possível encontrar um na minha breve pesquisa no Google). Se não, mais alguma coisa que explicaria o pulso curto na linha de dados após o 8º clk?
Annie

11
Não que eu saiba. E, de qualquer forma, se essa é realmente uma série antiquada, qualquer comunicação em outra direção exigiria fios separados. Esse pulso é muito curto para ser algo significativo. Provavelmente, o driver se redefiniu antes do próximo quadro. Tudo isso é adivinhação, como você mesmo disse. A menos que o OP forneça mais detalhes sobre os dispositivos, é tudo o que podemos fazer.
Maple

@ Maple, a comunicação é entre uma chave do carro e uma ferramenta que não tenho permissão para dizer, mas estou tentando fazer engenharia reversa.
Daniel

RS232 é um padrão para níveis elétricos, não para codificar palavras de dados
Chris Stratton

@ ChrisStratton Onde você encontrou algo sobre codificação na minha resposta? Tudo o que eu estou dizendo é que, se os níveis de tensão correspondem a RS232 e sinais assemelham serial síncrona, em seguida, ele provavelmente não é I2C
bordo

-1

De acordo com minha experiência com o I2C, posso usar o dispositivo multímetro para verificar o relógio configurando o dispositivo para medir a frequência (em hertz); portanto, se ele ler um valor constante como 2k, será o relógio I2C.


3
Não, isso não é uma conclusão válida. Muitas coisas que não são I2C têm relógios constantes. De fato, o I2C não possui um relógio fixo, mas sim um relógio estourado. Se o seu medidor estiver contando ao longo de um período de tempo, ele estará na média do relógio ativo com interlúdios inativos - você precisará medir o recíproco da largura de um pulso, idealmente em um escopo em que você possa ter certeza de que está realmente medindo o que se destina. Por outro lado, alguns outros esquemas como o I2S tendem a ter relógios em execução contínua. Mas frequência do relógio só pode governar algo fora, não dentro.
Chris Stratton
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.