Système multimédia pour Toyota Prius (partie 2)

Poursuite du projet de remplacement du système multimédia Toyota Prius.

Dans cet article - PHY, Transport et livraison de paquets au périphérique hôte, qui a finalement réussi à être vérifié sur la vraie tête native de la Prius.

Rapidement le conte de fées affecte, mais pas vite la chose se fait. Aujourd'hui, je poursuis le projet prolongé de refonte du système médiatique de Prius, qui a commencé il y a 2 ans.

Offtopic historique
— USB-AVC , . , , .. ++ — , .

, , , , .

, , , PHY- .

Donc, depuis le tout début. En fouillant sur Internet pour trouver des adaptateurs à AVC-LAN, j'ai très souvent vu des solutions similaires à cela . Et dans la discussion, de tels commentaires passent souvent à travers:
Honnêtement, ça ne marche pas très bien, ou plutôt ça ne marche pas bien avec toutes les têtes.

Alors que le pneu est parfaitement lisible sur une vieille radio avec un Spacio de 99 ans.
J'étais initialement fondamentalement opposé à faire quelque chose, et les solutions structurellement instables ne me conviennent pas.
Nous allons répéter le chemin de la rétro-ingénierie du pneu. Aller.

Tout d'abord, nous nous connectons au bus sur une voiture en direct, et supprimons la forme d'onde:


le début du pack.


Les bits sont quelque part au milieu, plus gros.


Quelque chose de très similaire à ACK.

Un peu plus sur cette étrange étape - ci-dessous.

J'ai déjà fait des captures d'écran des formes d'onde à partir des données stockées, tout en les prenant, je n'ai pas immédiatement fait attention à la plage de tension dans laquelle j'ai pris les données. Et quand il l'a dessiné, il a dû redescendre dans la voiture pour s'assurer qu'il n'avait pas survécu à l'esprit. Oui, la portée du bus différentiel n'est que de 200 mV (!!!).

Ensuite, nous allons à la fiche technique utilisée par les collègues ST485, et nous voyons ce qui suit:



Ici, en fait, la racine de tous les problèmes a été trouvée, à cause de laquelle nous devons jouer avec des résistances et prier les dieux de la colophane pour que le convertisseur fonctionne sur une machine spécifique. Travailler près des seuils est mauvais. Mais encore plus intéressant, c'est que pour AVC-LAN, qui dans sa physique est un clone de certains IE-Bus de NEC, selon ses spécifications (le lien sera un peu plus loin), l'état actif est une tension supérieure à 120 mV, tandis que ST485 a le droit de considérer rien de moins de 200 mV est nul. Eh bien, si, en raison d'écarts de fabrication, le ST485 a un niveau de seuil légèrement inférieur et apparaît sur le bus pour une marge légèrement supérieure à la norme (jusqu'à 6 volts est autorisé), alors, bien sûr, le ST485 sera en mesure de recevoir un tel signal. Et ces imprécisions de fabrication sont la seule chose qui force parfois les appareils avec ST485 dans la compositiontravail. Bien sûr, nous ne mettrons pas un tel bonheur dans le développement.

La deuxième solution disponible basée sur le même ST485 et un amplificateur opérationnel, je n'ai pas aimé l'abondance de composants. Eh bien, au 21e siècle, nous vivons, après tout.

Solution:
Il existe des convertisseurs spéciaux pour AVC-LAN. Mais je n'ai pas pu les obtenir à un prix abordable pour cet appareil. La Chine fraternelle est de nouveau venue à la rescousse, où le HA12240FP a été découvert , qui a une différence de tension pour percevoir un journal. "1" par fiche technique est de 80..110 mV. Cela permettra à notre pneu de fixer un niveau actif avec une marge presque double. Arrange.

Nous donnons naissance au schéma sur le STM32F103 mentionné dans la première partie:


UPD: Le schéma est né à la hâte, il contient une erreur. Les conducteurs de bus doivent être alimentés en 5V. Si c'est le cas, comme dans le diagramme, leur différentiel augmente. seuil, et tous les paquets ne sont pas acceptés.

Tout est simple au primitivisme, je pense, n'a pas besoin de description. Sauf, peut-être, le fait que le choix des jambes pour RX1 / 2 n'est pas accidentel, et la première version du circuit a nécessité un «raffinement de fichier» afin d'obtenir des signaux vers les entrées de capture / comparaison, car je veux l'utiliser pour mesurer la longueur d'impulsion. Solutions alternatives - l'interrogation et l'interruption lors d'un changement d'état perdent en précision et en complexité de mise en œuvre logicielle. De plus - je voudrais recevoir au moins deux lignes en parallèle (il y en a trois dans la tête), et si les fronts coïncident sur deux, vous pouvez dire adieu à l'idée d'une précision acceptable si vous n'utilisez pas la capture / comparaison.

Une analyse plus approfondie des données contenues dans le package est bien écrite ici . Mais, étant donné que les liens sont incohérents, je vais répéter brièvement ici:

  • Le bus différentiel, ici, ils écrivent sur l'interprétation des niveaux du journal. "1" à <20mV, journal. "0" -> 110mV.
  • La longueur du bit est de 40 µs, les 20 premiers µs sont toujours «0», les 7 derniers µs sont toujours «1», au milieu se trouve la valeur du bit.


    Eh bien, le feu de circulation:


  • Bit de départ - supérieur à 180 μs
  • (ACK). «», - :



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

Eh bien ... nous avons déterminé le niveau physique, dessiné le circuit et séparé la planche. Il s'est avéré quelque chose comme ceci: La





carte de circuit imprimé est sortie quelque peu sans succès, et non parce que le code QR ne fonctionnait pas en sérigraphie. Il y a une erreur dans le circuit (dans le schéma ci-dessus, je l'ai déjà corrigé) concernant la sélection des jambes pour le RX, et trois pilotes de ligne sont divorcés. Lors de l’écriture et du débogage du programme, j’ai réalisé que c’est bien si vous pouvez en exécuter au moins deux régulièrement. Oui, et plus n'est pas nécessaire.

Eh bien ... l'appareil s'est avéré être simple et efficace, tandis que le problème constructif de l'inadéquation des niveaux a été résolu.

Plus loin dans le programme:

  1. . , . : * USB — , , «» . . * , 8, 6- , 4.4 . , , .
  2. Moniteur Android pour inverser complètement la logique du bus. Si quelqu'un est fort dans Android et Kotlin, je serai reconnaissant de l'opportunité de consulter. Ce sont des tentatives timides pour tout maîtriser à la fois, donc n'entrez pas dans le référentiel par référence sans une nouvelle passe :)


UPD: les données s e temporelles fixes au lieu des microsecondes étaient ms.

All Articles