Projetando meu próprio ônibus

8

Esta pergunta é posterior à minha pergunta anterior: Alternativas ao SPI por causa do EMI . Estou brincando com a idéia de projetar meu próprio barramento de comunicação. Ficaria muito grato se alguém pudesse olhar para o meu projeto preliminar e me dizer onde sou louco ...

Atualmente, estou usando 2MHz SPI transportado com 10 cm de comprimento para sete ADCs em PCBs separados (CS compartilhado, mas cada ADC tem sua própria linha MISO. É um pouco estridente), mas gostaria de substituí-lo por algo diferencial para reduzir EMI. O problema é que não há muitos ADCs com um barramento diferencial, por isso estou pensando se é possível projetar meu próprio barramento. Pelo menos a camada física e, possivelmente, o protocolo também.

Objetivos do projeto do novo barramento:

  • use componentes fisicamente pequenos
  • EMI baixo
  • não mais que 4 cabos de dados (dois pares)
  • largura de banda de> 300kbps de cada ADC. (> 2.1mbps total)

Antes de me deixar louca por pensar nisso, considere que pode não ser tão difícil de fazer em um PSoC5 . Nesse chip, certamente posso projetar meu próprio protocolo no Verilog e implementá-lo em hardware. E, até certo ponto, também posso incluir os componentes da camada física. Além do mais, talvez eu consiga ter sete dessas coisas ao mesmo tempo, todas funcionando paralelamente no mestre, uma para cada escravo, para que eu possa obter uma boa largura de banda geral.

E aqui está minha ideia preliminar:

insira a descrição da imagem aqui

Seria baseado no I2C, ligeiramente modificado para ajudá-lo a conectar-se aos componentes da camada física. As linhas SDA e SCL agora são pares diferenciais. O par SDA tem a propriedade OR-ing. Isso é conseguido usando um pino que pode apenas dirigir alto e um que pode apenas dirigir baixo. O par SCL é conduzido exclusivamente pelo mestre. A taxa de dados seria aumentada para pelo menos 1 Mbps.

O mestre seria um PSoC5 com 7 módulos mestre. Os escravos também seriam PSoC5s, com um módulo escravo, e usariam o ADC integral.

Pensamentos:

  • Não sei ao certo qual é a melhor maneira de implementar os resistores pull up e os componentes limitadores de taxa de giro.
  • Presumo que não preciso de rescisão. Se eu limitar a taxa de giro para cerca de 80ns, deve ser bom para um cabo de 10cm de comprimento.
  • Obviamente, esse não é um transceptor diferencial adequado. Estou perdendo meu tempo tentando fazer um dos portões?
  • Esses portões não causam alguma inclinação. É provável que isso seja um problema?
Rocketmagnet
fonte
Talvez o LVDS valha uma olhada, se você quiser sinalização diferencial?
Saad
Acho que não vi nenhum dispositivo escravo estilo I2C com entradas e saídas SDA separadas. Além disso, se você estiver usando um escravo I2C baseado em microprocessador, deverá permitir que os escravos mantenham o SCK baixo de forma que o mestre possa vê-lo (o mestre impedirá o envio do próximo bit até que o escravo libera SCK). Caso contrário, se o mestre enviar dados sem esperar que os escravos estejam prontos, as coisas irão falhar mal. Como alternativa, você pode usar o SPI e usar apenas determinados valores de bytes para enviar dados (para que cada byte de dados "reais" seja transmitido como dois bytes). Se você fizer isso ...
supercat 15/11/2012
... como a maioria das implementações de SPI eliminará múltiplos de bytes inteiros em caso de saturação / saturação de dados, o mestre poderá detectar quando o escravo não puder acompanhar e retransmitir bytes individuais até que o escravo possa reconhecê-los.
Supercat 15/11

Respostas:

4

Bem, se você tem PSoC5 por toda parte, eu estava lendo recentemente sobre o IEEE 1355 . A variante de link de sinal DS-SE-02 pode fazer o que você deseja. Ele exige 4 linhas de sinal: uma linha de dados e uma linha estroboscópica em cada direção. O único hardware dedicado que posso encontrar que implementa o 1355 é o Spacewire endurecido por radiação , mas esta apresentação do IEEE afirma que ele pode ser implementado em um FPGA com 1/3 dos portões de um UART e operando a velocidades 100 vezes mais rápidas que um UART .

Uma cópia pública do padrão completo está disponível como cortesia do CERN, se você quiser ler um pouco. Eu não tive a chance de me sentar com a coisa toda, então não posso falar por seu desempenho EMI. Observando a seção DS-SE, parece que você precisa controlar a impedância na linha de transmissão e terminar na extremidade receptora.

Joe Baker
fonte
Obrigado por esta ideia. Parece interessante. Qualquer coisa chamada Spacewire está bem para mim. Vou dar uma olhada agora ...
Rocketmagnet
4

Você já pensou em usar o RS485?

Já existem muitos componentes projetados para funcionar em barramentos RS485.

Bruno Ferreira
fonte
Sim, eu pensei sobre isso. Certamente é uma opção. Eu não acho que eles fazem OR, mas o mestre pode transmitir de forma assíncrona em um par, enquanto os escravos se revezam no outro par. O único problema era que eu não conseguia encontrar transceptores realmente pequenos. Eu mencionei que estou desesperadamente apertado no espaço.
Rocketmagnet
2
O SOIC 8 é muito grande para os seus requisitos? Recentemente, eu estava pensando em usar um transceptor Intersil ISL83485IBZ ou Texas65 SN65HVD11D em um dos meus projetos. Ambos possuem pacotes SOIC 8.
Bruno Ferreira
@Bruno - SOIC-8, você está brincando? :-) A placa de circuito impresso é de 11 mm x 13 mm .
Stevenvh 06/07/12
@stevenvh Não percebeu as dimensões na outra questão. Suponho que um pacote MSOP não resolva seu problema. Se isso acontecer, talvez você poderia usar ADM1485
de Bruno Ferreira