Mediensystem für Toyota Prius (Teil 2)

Fortsetzung des Projekts zum Ersatz des Toyota Prius Mediensystems.

In diesem Artikel - PHY, Transport und Paketzustellung an das Host-Gerät, das schließlich auf dem echten nativen Kopf des Prius überprüft werden konnte.

Schnell wirkt sich das Märchen aus, aber nicht schnell ist die Sache erledigt. Heute setze ich das langwierige Projekt zur Neugestaltung des Mediensystems in Prius fort, das vor zwei Jahren begonnen hat.

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

, , , , .

, , , PHY- .

Also von Anfang an. Graben um im Internet für Adapter AVC-LAN, sah ich sehr oft Lösungen ähnlich wie diese . Und in der Diskussion schlüpfen solche Kommentare oft durch:
Ehrlich gesagt funktioniert es nicht sehr gut, oder besser gesagt, es funktioniert nicht mit allen Köpfen.

Während der Reifen auf einem alten Radio mit einem 99 Jahre alten Spacio perfekt lesbar ist.
Ich war anfangs grundsätzlich dagegen, etwas zu tun, und Lösungen mit struktureller Instabilität passen nicht zu mir.
Wir werden den Weg des Reverse Engineering des Reifens wiederholen. Gehen.

Zunächst verbinden wir uns mit einem Live-Auto mit dem Bus und entfernen die Wellenform:


Der Anfang des Pakets.


Bits sind irgendwo in der Mitte, größer.


Etwas sehr ähnliches wie ACK.

Ein bisschen mehr über diesen seltsamen Schritt - unten.

Ich habe bereits Screenshots der Wellenformen aus den gespeicherten Daten gemacht, während ich sie aufgenommen habe, habe ich nicht sofort auf den Spannungsbereich geachtet, in dem ich die Daten aufgenommen habe. Und als er es zeichnete, musste er wieder ins Auto steigen, um sicherzugehen, dass er nicht aus dem Kopf überlebt hatte. Ja, die Spannweite des Differentialbusses beträgt nur 200 mV (!!!).

Als nächstes gehen wir zum Datenblatt, das von den Kollegen ST485 verwendet wird, und sehen dort Folgendes:



Hier wurde tatsächlich die Wurzel aller Probleme gefunden, weshalb wir mit Widerständen spielen und zu den Kolophoniumgöttern beten müssen, damit der Konverter auf einer bestimmten Maschine arbeitet. Arbeiten in der Nähe von Schwellen ist böse. Noch interessanter ist jedoch, dass für AVC-LAN, das in seiner Physik ein Klon eines IE-Busses von NEC ist, gemäß seiner Spezifikation (die Verbindung wird etwas weiter entfernt sein) der aktive Zustand eine Spannung über 120 mV ist, während ST485 das Recht hat, dies zu berücksichtigen alles weniger als 200 mV ist Null. Das heißt, wenn der ST485 aufgrund von Herstellungsabweichungen einen geringfügig niedrigeren Schwellenwert aufweist und auf dem Bus für einen geringfügig über der Norm liegenden Rand angezeigt wird (bis zu 6 Volt sind zulässig), kann der ST485 natürlich ein solches Signal empfangen. Und diese Herstellungsungenauigkeiten sind das einzige, was Geräte mit ST485 manchmal in die Zusammensetzung zwingtArbeit. Natürlich werden wir dieses Glück nicht in die Entwicklung bringen.

Die zweite verfügbare Lösung, die auf demselben ST485 und einem Operationsverstärker basiert, hat mir die Fülle an Komponenten nicht gefallen. Nun, schließlich leben wir im 21. Jahrhundert.

Lösung:
Es gibt spezielle Konverter für AVC-LAN. Aber ich konnte sie nicht zu einem erschwinglichen Preis für dieses Gerät bekommen. Das brüderliche China kam erneut zur Rettung, wo der HA12240FP entdeckt wurde , der eine Spannungsdifferenz für die Wahrnehmung eines Protokolls aufweist. "1" pro Datenblatt ist 80..110 mV. Dadurch kann unser Reifen ein aktives Niveau mit einem fast doppelten Spielraum einstellen. Arrangiert.

Wir gebären das Schema auf dem STM32F103, das im ersten Teil erwähnt wurde:


UPD: Das Schema wurde in Eile geboren, es enthält einen Fehler. Busfahrer müssen mit 5 V versorgt werden. Wenn ja, wie im Diagramm, steigt ihre Differenz. Schwellenwert, und nicht alle Pakete werden akzeptiert.

Alles ist einfach für den Primitivismus, denke ich, braucht keine Beschreibung. Außer vielleicht der Tatsache, dass die Auswahl der Beine für RX1 / 2 nicht zufällig ist und die erste Version der Schaltung eine „Dateiverfeinerung“ erfordert, um Signale an die Erfassungs- / Vergleichseingänge zu senden, da ich damit die Pulslänge messen möchte. Alternative Lösungen - Abfragen und Unterbrechen bei Statusänderungen verlieren an Genauigkeit und Komplexität der Softwareimplementierung. Plus - Ich möchte mindestens zwei Zeilen parallel erhalten (es gibt drei im Kopf), und wenn die Fronten auf zwei übereinstimmen, können Sie sich von der Idee einer akzeptablen Genauigkeit verabschieden, wenn Sie keine Erfassung / keinen Vergleich verwenden.

Eine weitere Analyse der Daten in dem Paket ist gut geschrieben hier . Da die Links jedoch inkonsistent sind, werde ich hier kurz wiederholen:

  • Der Differentialbus, hier schreiben sie über die Interpretation der Ebenen des Logs. "1" bei <20 mV, log. "0" -> 110 mV.
  • Die Bitlänge beträgt 40 µs, die ersten 20 µs sind immer "0", die letzten 7 µs sind immer "1", in der Mitte steht der Bitwert.


    Nun, die Ampel:


  • Startbit - länger als 180 μs
  • (ACK). «», - :



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

Nun ... wir haben die physische Ebene herausgefunden, die Schaltung gezeichnet und das Board auseinander genommen. Es stellte sich





ungefähr so heraus: Die Leiterplatte kam etwas erfolglos heraus und nicht, weil der QR-Code beim Siebdruck nicht funktionierte. Es gibt einen Fehler in der Schaltung (in der Abbildung oben habe ich ihn bereits korrigiert) bezüglich der Auswahl der Beine für den RX, und drei Leitungstreiber sind geschieden. Beim Schreiben und Debuggen des Programms wurde mir klar, dass es gut ist, wenn Sie mindestens zwei kontinuierlich ausführen können. Ja, und mehr ist nicht erforderlich.

Nun ... das Gerät erwies sich als einfach und effektiv, während das konstruktive Problem mit der Nichtübereinstimmung der Ebenen gelöst wurde.

Weiter im Programm:

  1. . , . : * USB — , , «» . . * , 8, 6- , 4.4 . , , .
  2. Android-Monitor für die vollständige Umkehrung der Buslogik. Wenn jemand stark in Android und Kotlin ist, bin ich dankbar für die Gelegenheit, sich zu beraten. Dies sind schüchterne Versuche, alles auf einmal zu meistern. Betreten Sie das Repository daher nicht ohne neuen Durchgang als Referenz :)


UPD: feste zeitliche s e Daten anstelle Mikrosekunden waren ms.

All Articles