Sistema de mídia para Toyota Prius (parte 2)

Continuação do projeto para substituir o sistema de mídia Toyota Prius.

Neste artigo - PHY, Transporte e entrega de pacotes ao dispositivo host, que finalmente pôde ser verificado na cabeça nativa real do Prius.

Rapidamente o conto de fadas afeta, mas não rapidamente a coisa é feita. Hoje continuo o projeto prolongado de redesenho do sistema de mídia em Prius, que começou há 2 anos.

Offtopic Histórico
— USB-AVC , . , , .. ++ — , .

, , , , .

, , , PHY- .

Então, desde o começo. Procurando na Internet por adaptadores para AVC-LAN, muitas vezes vi soluções semelhantes a essa . E na discussão, esses comentários costumam aparecer:
Honestamente, não funciona muito bem, ou melhor, não funciona bem com todas as cabeças.

Enquanto o pneu é perfeitamente legível em um rádio antigo com um Spacio de 99 anos.
Inicialmente, opus-me fundamentalmente a fazer alguma coisa, e soluções com instabilidade estrutural não me agradam.
Vamos repetir o caminho da engenharia reversa do pneu. Vai.

Primeiro de tudo, nos conectamos ao ônibus em um carro ao vivo e removemos a forma de onda:


o início do pacote.


Os bits estão em algum lugar no meio, maiores.


Algo muito semelhante ao ACK.

Um pouco mais sobre esse estranho passo - abaixo.

Eu já fiz capturas de tela das formas de onda a partir dos dados armazenados, enquanto os capturava, não prestei atenção imediata à faixa de tensão em que obtive os dados. E quando ele desenhou, ele teve que descer no carro novamente para se certificar de que não havia sobrevivido da mente. Sim, a extensão do barramento diferencial é de apenas 200mV (!!!).

Em seguida, vamos à folha de dados usada pelos colegas ST485 e vemos o seguinte:



Aqui, de fato, foi encontrada a raiz de todos os problemas, por causa dos quais temos que brincar com resistores e orar aos deuses da resina para que o conversor funcione em uma máquina específica. Trabalhar próximo dos limites é mau. Mas ainda mais interessante é que, para a AVC-LAN, que em sua física é um clone de algum barramento IE da NEC, de acordo com sua especificação (o link será um pouco mais distante), o estado ativo é uma tensão acima de 120mV, enquanto o ST485 tem o direito de considerar qualquer coisa menor que 200mV é zero. Bem, isto é, se, devido a desvios de fabricação, o ST485 tiver um nível de limiar um pouco mais baixo e aparecer no barramento uma margem um pouco acima da norma (até 6 volts é permitido), é claro que o ST485 poderá receber esse sinal. E essas imprecisões de fabricação são a única coisa que às vezes força os dispositivos com ST485 na composiçãotrabalhos. Obviamente, não colocaremos tanta felicidade no desenvolvimento.

A segunda solução disponível, baseada no mesmo ST485 e em um amplificador operacional, não gostei da abundância de componentes. Bem, no século 21 nós vivemos, afinal.

Solução:
Existem conversores especiais para AVC-LAN. Mas não consegui obtê-los a um preço acessível para este dispositivo. A China fraterna voltou a resgatar, onde o HA12240FP foi descoberto , o que tem uma diferença de voltagem para a percepção de um registro. "1" pela folha de dados é 80..110 mV. Isso permitirá que nosso pneu defina um nível ativo com uma margem quase dupla. Arranjos.

Nós criamos o esquema no STM32F103 mencionado na primeira parte:


UPD: O esquema nasceu às pressas, contém um erro. Os motoristas de ônibus devem ser alimentados a partir de 5V. Nesse caso, como no diagrama, seu diferencial aumenta. limite, e nem todos os pacotes são aceitos.

Tudo é simples para o primitivismo, eu acho, não precisa de uma descrição. Exceto, talvez, o fato de a escolha das pernas para o RX1 / 2 não ser acidental, e a primeira versão do circuito exigir "refinamento de arquivo" para obter sinais para as entradas de captura / comparação, porque eu quero usá-lo para medir o comprimento do pulso. Soluções alternativas - pesquisas e interrupção na mudança de estado perdem a precisão e a complexidade da implementação do software. Além disso - eu gostaria de receber pelo menos duas linhas em paralelo (há três na cabeça) e, se as frentes coincidirem em duas, você pode dizer adeus à ideia de uma precisão aceitável se você não usar captura / comparação.

Uma análise mais aprofundada dos dados no pacote está bem escrita aqui . Mas, como os links são inconsistentes, repetirei brevemente aqui:

  • O barramento diferencial, aqui eles escrevem sobre a interpretação dos níveis do log. "1" a <20mV, log. "0" -> 110mV.
  • O comprimento do bit é de 40 µs, os primeiros 20 µs são sempre "0", os últimos 7 µs são sempre "1", no meio está o valor do bit.


    Bem, o semáforo:


  • Bit inicial - maior que 180 μs
  • (ACK). «», - :



    ACK- , Dallas 1-wire, , , , . , . 1 , «0» ( , ), .2 , , , . .3 , (1), , , 7 , . «1».

Bem ... descobrimos o nível físico, desenhamos o circuito e separamos o quadro. Aconteceu algo assim: a





placa de circuito impresso saiu um pouco sem sucesso, e não porque o código QR não funcionou na impressão serigráfica. Há um erro no circuito (no diagrama acima, eu já o corrigi) em relação à seleção de pernas para o RX, e três drivers de linha são divorciados. No processo de escrever e depurar o programa, percebi que seria bom se você pudesse executar pelo menos dois constantemente. Sim, e mais não é necessário.

Bem ... o dispositivo acabou sendo simples e eficaz, enquanto o problema construtivo com a incompatibilidade de níveis foi resolvido.

Mais adiante no programa:

  1. . , . : * USB — , , «» . . * , 8, 6- , 4.4 . , , .
  2. Monitor Android para reversão completa da lógica do barramento. Se alguém é forte no Android e Kotlin, ficarei grato pela oportunidade de consultar. Estas são tentativas tímidas de dominar tudo de uma vez, portanto, não entre no repositório por referência sem uma nova passagem :)


UPD: temporais fixa s e dados em vez microssegundos foram ms.

All Articles