Protokollstudie zum TPY-Protokoll (Vehicle Tire Pressure Monitoring System)

Das System zur Fernüberwachung des Luftdrucks in Autoreifen (Abkürzung TPMS - Tire Pressure Monitoring System) soll den Benutzer unverzüglich über den Rückgang des Reifendrucks und die kritische Temperatur der Reifen informieren.



Die Sensoren sind intern oder extern verfügbar. Die inneren sind im schlauchlosen Radreifen montiert, die äußeren sind an der Radarmatur angeschraubt. Ein Rad mit internem Sensor sieht genauso aus wie ein Rad ohne Sensor. Ein solches Rad ist leicht aufzupumpen. Der externe Sensor fällt auf, er kann gestohlen werden und muss beim Aufpumpen des Rades erst abgeschraubt werden. Es wird auch von atmosphärischen Phänomenen beeinflusst.



Um das Protokoll des TPMS-Systems zu untersuchen, kam mir die Idee, ein solches System auf einem Kinderwagen zu installieren, um den Reifendruck schnell zu überwachen.



Bild

Abb. 1. Erscheinungsbild des TPMS-Systems



Bild

Abb. 2. TPMS-Systemsteuerkarte



Es war nicht möglich, die Standardempfangseinheit einfach so zu installieren, da der minimal zulässige Druckwert 1,1 bar und in einem Kinderwagen weniger beträgt. Daher piept das Modul ständig und informiert über niedrigen Reifendruck. Über die Entwicklung eines Controllers für den Kinderwagen "Smart" "Maksimka" , in dem die Forschungsergebnisse angewendet werden, können Sie in meinem Artikel [1] nachlesen .



Das Sammeln von Informationen über den Betrieb von TPMS begann mit der Suche nach Artikeln im Internet. Leider gibt es wenig Informationen. Dies gilt auch für die üblichen Standardautosysteme, die etwas komplizierter und viel teurer sind. Und ich brauchte Informationen über ein einfaches billiges chinesisches System. Ich hatte ein minimales Verständnis, jetzt musste ich anfangen zu experimentieren.



Also rüsten wir uns mit der USB-Pfeife des DVB-Tuners aus, starten RTL-SDR und schauen uns die Sendung an. Die Sensoren arbeiten mit 433,92 MHz in FSK-Modulation. Zunächst habe ich die Sendung aufgezeichnet und dann das Protokoll manuell analysiert. Hier begannen die Schwierigkeiten. Bisher nur OOK-Modulation angetroffen. Dort ist alles einfach. Hier ist es etwas komplizierter. Die Informationen werden mit zwei Frequenzen codiert. Deshalb habe ich Beispiele studiert, die Theorie der Modulationen. Dann habe ich gesehen, wie das URH-Universal Radio Hacker-Programm verwendet wurde [2, 3]. Ich habe versucht, es zu installieren, aber es funktioniert nicht auf meinem WinXP 32bit. Ich musste nach einem Computer mit Win8 64bit suchen und dann wurde das Programm installiert. Weitere Informationen zu ihrer Arbeit finden Sie auf der Website des Entwicklers. URH hat mir den Prozess etwas erleichtert, weil Es erfasst das Signal aus der Luft, zeigt es mit einem Oszillogramm an und decodiert es sofort in eine digitale Rohform in binärer und hexadezimaler Form.



Bild

Abb. 3. Screenshot des Programms mit einem erfassten Frame des TPMS-Sendens.



Der Sensor sendet in einer Sitzung mehrere Nachrichten nacheinander. Der Zeitraum zwischen den Sitzungen kann bis zu einer Minute oder länger betragen. Wenn eine Alarmsituation auftritt, beginnt der Sensor sofort mit dem Senden von Datenpaketen. Die Audiodatei der Nachricht vom Sensor [8]. Ein Beispiel für eine Nachricht vom Sensor aus dem URH-Programm:



010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001100110100110101001011001011010011010100110101001100101010101011010010101010101010110101001011001101010010101100101101001010101011001011001100110101001


In hexadezimaler Form hat diese Prämisse die Form:



5555555555555555555555555555555555555555555555555555555555555555555556669a965a6a6a6555a5555a966a565a556599a9


Es war offensichtlich, dass alle 4 Pakete in einer Sitzung dieselben Daten hatten, was bedeutet, dass das Paket korrekt akzeptiert wurde und Sie mit der Analyse beginnen können.



Im obigen Beispiel sehen Sie die Präambel (Sequenz 01010101….), Gefolgt von den Daten. Nachdem wir das Internet gelesen haben, verstehen wir, dass wir ein mit Manchester (GE Thomas) codiertes Paket haben. Jedes Bit wird mit zwei Bits 01 oder 10 codiert. Ich habe ursprünglich von Hand codiert, wodurch die Codierungs- / Decodierungstheorie verstärkt wird. Aber dann habe ich mich für den Online-Decoder [4,5,6] entschieden, was den Prozess erheblich beschleunigt hat.



Wenn wir also die ursprüngliche Nachricht vom Sensor mit dem Manchester-Code dekodieren, erhalten wir



000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101101110010011011101110100000011000000001110010111000100110000010010101110


Die ersten 136 Nullen sind eine Präambel und können verworfen werden. Wir sind nur an Daten interessiert.



Wenn wir sie in hexadezimale Form übersetzen, erhalten wir: 0x15B937740C03971304AE



Dies hat bereits schöne Anfangsdaten, in denen die Kennung, der Reifendruck und die Temperatur irgendwo versteckt sind.



Für die weitere Forschung ist es notwendig, Datenstatistiken zu sammeln. Zu diesem Zweck habe ich einen Sensor an das Rad gewickelt und die Luft erfasst, während ich aufgezeichnet habe, was auf der ursprünglichen Systemplatine angezeigt wird. Er ließ den Druck ab, pumpte ihn auf, stellte das Rad für eine negative Temperatur in den Gefrierschrank und heizte es auf. Dann suchte er die gleichen Bedingungen für einen anderen Sensor, um die Temperatur- und Druckbytes herauszufinden.



Das gesamte Paket benötigt 10 Bytes. Wenn Sie die empfangenen decodierten Daten in einer Spalte anordnen, können Sie konstante Daten und sich ändernde Daten sehen.



15B937740C03971304AE
15B937740C03A1FC00A4
15B937740C03A700087B


Auf den Sensoren am Körper befinden sich Aufkleber. Jeder Sensor ist anders: 0A, 1B, 2C, 3D.



Das stereotype Denken hier hat nicht gut funktioniert. Ich dachte, dass dies der ID-Sensor ist.

Ich bezweifelte, warum die ID nur 1 Byte benötigt, vergaß sie dann aber und versuchte, im Stream nach diesen Kennungen zu suchen. Dann sah ich im Menü des ursprünglichen Empfängers des Systems, dass andere Sensoren an diesen Empfänger gebunden werden könnten, und der Empfänger selbst zeigt die Sensor-ID auf jedem Rad an. Und siehe da, ich habe herausgefunden, dass der vierte Radsensor die ID = 3774 hat.



15B937740C03971304AE


Das 3. und 4. Byte des Pakets sind also die Rad-ID. Im Vergleich zu anderen Sensoren stimmten auch die Kennungen mit denen des Standardpanels überein.



Ich habe das 1. Byte als Präfix für den Beginn der Daten und das 2. Byte als Kennung des TPMS-Subsystems gezählt.

Nachfolgend finden Sie den Vergleich von Paketen verschiedener Sensoren.



15B9F3FA2300BE1B007BSensor 0A ID = 0xF3FA

15B91AA43201B71B002ASensor 1B ID = 0x1AA4

15B9ABFF32027B1B029BSensor 2C ID = 0xABFF

15B937740C03971304AESensor 3D ID = 0x3774



Und mir wurde klar, dass die Beschriftungen auf den Sensoren (0A, 1B, 2C, 3D) nur Radnummern in digitaler Form und in alphabetischer, nicht hexadezimaler Form sind Rad-ID Trotzdem ist das 6. Byte im Paket der Seriennummer des Sensors sehr ähnlich. Für mich selbst kam ich zu dem Schluss, dass dies die Radkennung ist. Also wird ein weiteres Byte dekodiert.



Das letzte Byte ist höchstwahrscheinlich eine Prüfsumme, die ich noch nicht lesen kann. Dies blieb mir bis zum Ende ein Rätsel.



Das nächste decodierte Byte ist die Radtemperatur. Glück hier. Die Temperatur dauert 1 Byte und wird in ganzen Grad angegeben. Negative Temperatur im Zweierkomplement. Dies bedeutet, dass die Temperatur von -127 ... 128 Grad Celsius in ein Byte passt.



In unserem Paket ist die Temperatur das 8. Byte.



15B9F3FA2300BE1B007B0x1B entspricht +27 Grad.

15B937740C03A1FC00A40xFC entspricht -4 Grad



Es gibt drei nicht erkannte Bytes 5., 7., 9 .. Gemessen an der Dynamik der Änderung ist der Reifendruck in 7 Bytes und im 9. Byte höchstwahrscheinlich in den Statusbits des Sensors verborgen. Laut verschiedenen Informationsquellen im Internet sowie der Funktionalität meines TPMS-Systems sollte es eine etwas entladene Batterie, ein bisschen schnellen Druckverlust und ein paar weitere Bits geben, für die nicht klar ist, wofür.



Also werden wir das 7. Byte analysieren, da Wir meinen, dass sich der Druck darin versteckt.

Nachdem ich Statistiken über verschiedene Sensoren mit unterschiedlichen Drücken eingegeben hatte, konnte ich die Formel zur Neuberechnung des Drucks nicht klar definieren. Und es ist nicht klar, in welchen Einheiten der Sensor standardmäßig Druck überträgt (Bar, PSI). Infolgedessen stimmte die in Excel erstellte Tabelle nicht genau mit der Standard-TPMS-Anzeigetafel überein. Man könnte diesen Unterschied von 0,1 bar vernachlässigen, aber ich wollte das Konzept eines Protokolls bis zum letzten Bit. Aufregung herrschte.



Wenn Sie nicht verstehen können, wie das Druckbyte gebildet wird, müssen Sie einen Drucksensoremulator erstellen und beim Ändern des Druckwerts sehen, was auf dem Standardfeld angezeigt wird.



Es blieb abzuwarten, wozu das 5. und 9. Byte des Pakets dienen, aber sie ändern sich selten, sodass Sie ihre Werte wie im Originalpaket akzeptieren und nur das Druckbyte ändern können. Jetzt geht es nur noch um die Berechnung der Prüfsumme. Ohne diese Option ignoriert das Standardfenster mein Paket und zeigt nichts an.



Um den Sensor zu emulieren, mussten Sie ein Paket senden. Zu diesem Zweck hatte ich einen SI4432-Transceiver an einen PIC16F88 angeschlossen, der einst für andere Zwecke verwendet wurde.



Bild

Abb. 4. Foto des Testbretts



Unter Verwendung alter Datenübertragungspraktiken habe ich ein Programm für den PIC entworfen, das eines der Pakete überträgt, die ich mit dem URH-Programm erhalten habe. Einige Zeit nach dem Einschalten des Senders wurden auf dem Bedienfeld die Daten angezeigt, die an den Sender übertragen wurden! Dies ist jedoch ein vorgefertigtes Paket mit einem vorgefertigten CRC. Damit ich das Druckbyte ändern kann, muss ich auch den CRC neu berechnen.



Ich fing an zu lesen, suchte nach Informationen darüber, welche CRCs verwendet werden, probierte verschiedene Xor aus und so weiter, aber nichts funktionierte. Ich dachte bereits, dass nichts klappen würde und ich mich mit dem Druck zufrieden geben müsste, den ich gemäß meiner Tabelle erhielt, aber etwas anders als die ursprüngliche Anzeigetafel. Aber im Internet habe ich einen Artikel über die CRC-Auswahl gesehen. Es gab ein Programm, dem Sie mehrere Pakete geben, das versucht, eine Prüfsumme zu finden, und bei Erfolg den Polynomwert und den CRC-Initialisierungswert ausgibt. [7] Wir



geben dem Programm mehrere Pakete:



reveng -w 8 -s 15B9ABFF3202AA1B0017 15B9ABFF3202AA1B0249 15B9F3FA2300D01A00D8 15B937740C037B130089 15B937740C03BD18025E 15B9ABFF32028F150834


Das Programm gibt folgende Probleme:



width=8  poly=0x2f  init=0x43  refin=false  refout=false  xorout=0x00  check=0x0c  residue=0x00  name=(none)


Ich schrieb ein Programm zur Berechnung des CRC unter Berücksichtigung dieser Daten und ließ es durch die Pakete laufen, was ich zuvor erhalten hatte - alles kam zusammen!



//  CRC  
 crc=0x43;    //     
 for(j=0;j<9;j++)
 {
  crc ^= tmp[j];
  for(i=0;i<8;i++)
   crc=crc&0x80 ? (crc<<1)^0x2F : crc<<1;  //  0x2F    CRC
 }


Hände juckten, um Druckdaten zu übertragen. Nachdem ich das Testprogramm mit der CRC-Berechnung abgeschlossen hatte, sendete ich das erste Paket. Das OEM-Panel empfing das Signal und zeigte den Druck und die Temperatur an. Ein kleines Problem war, dass das Standardpanel eine Dezimalstelle hatte und während der Übertragung des Wertes an die Luft auf dem Bildschirm immer der gleiche Druck angezeigt wurde, weil Der Rest der Entladungen war nicht sichtbar. Übergebener Bytewert 0..255. Aber auch hier ist es irgendwie nicht klar. Es stellte sich heraus, dass der Druck 0,00 Bar beginnt, wenn das 7. Byte den Wert 97 enthält. Es ist nicht klar, warum dies so ist. Aber dann ist mit einer Auflösung von 0,01 Bar alles klar.



Byte P Druck, Balken

255 1,58

254 1,57

... ...

107 0,10

106 0,09

105 0,08

104 0,07

103 0,06

102 0,05

101 0,04

100 0,03

99 0,02

98 0,01

97 0,00



Nach der Tabelle beträgt der maximale Druck, der in ein Byte passt, nur 1,58 bar, aber das System ermöglicht es Ihnen, einen Druck von bis zu 4 Atm zu messen. Dies bedeutet, dass 1 Bit des höchstwertigen Bits an einer anderen Stelle versteckt ist. Es bestand kein Wunsch, alle Bytes durchzugehen und die Bits in ihnen zu ändern. Ein Rad aus einem Auto wurde gefunden, ein Sensor wurde darauf gewickelt, ein Signal wurde erfasst. Neugierde herrschte, und in meinen Gedanken setzte ich darauf, wo der Beat erscheinen würde. Und dass es genau ein Bit sein wird und kein anderes Codierungsschema.



Nachdem ich das Paket dekodiert hatte, sah ich dieses Bit. Es ist das 7. Bit des 6. Bytes. Dies bedeutet, dass das 6. Byte nicht nur die Radnummer enthält, sondern auch den höchstwertigen Teil des Reifendrucks.

15B937740C833C18025C



Das höchstwertige Bit von 0x83 und 0x3C ergibt 0x13C = 219, was einem Druck von 2,19 bar entspricht

Die Formel zur Umwandlung von Druck in Bar: P = (ADC-97) / 100,

wobei ADC = (B7 >> 7) * 0x100 + B6, wobei B6 und B7 die Werte von Byte 6 und Byte 7 sind.



Mit einem Wert von 511 haben wir einen maximalen Druck von 4 14 Bar. Es war auch nicht klar, warum der Balken 4,14 bar betrug, aber ich denke, er entspricht 4 atm - dem maximal zulässigen Druck für den Sensor.



Es bleibt zu verstehen, wofür die Statusbits verantwortlich sind. Bits wurden erhalten, indem der Druck abgelassen, der Sensor an eine geregelte Stromversorgung angeschlossen und die Spannung reduziert wurde. 2 Bits blieben unklar. Vielleicht gibt es noch mehr, aber sie haben während des gesamten Experiments nie den Wert eins akzeptiert.



Um die Analyse zu vereinfachen, wurde ein Programm geschrieben [8]



Bild

Abb.5. Das Erscheinungsbild der Programmschnittstelle zum Untersuchen von TPMS-Paketen



Sie können ein Rohpaket aus dem URH-Programm in hexadezimaler Form in das Programm einfügen. Das Programm decodiert das Paket, liest die Prüfsumme und zeigt die Daten in normalen Temperatur- und Druckeinheiten an.



Irgendwie bin ich zurück in das Menü des Standard-Panels gekommen und habe gesehen, dass die Sensor-ID nicht zwei Bytes, sondern vier ist. Das Panel hat große und kleine Anzeigen und ich habe nicht sofort bemerkt, dass das 2. und 5. Byte auch in der Sensor-ID enthalten sind.



15B937740C833C18025C



Somit bleibt nur das 1. Byte unerkannt, aber es ist immer 0x15 (0b010101), und dies sieht aus wie eine bestimmte Präambel eines Pakets oder dessen Anfangskennung.



Auch die Statusbits werden nicht genau erkannt, sondern die fehlenden.



Neugierig herauszufinden, was im Inneren des Sensors vorherrschte und ich nahm einen von ihnen auseinander (Abb . 6) Abb. 6



Bild

. TPMS-Sensor



Es basiert auf dem Infineon SP372-Mikrokreis mit einem kleinen Umreifungsband. Eine Suche nach der Dokumentation dieser speziellen Mikroschaltung ergab nichts. Diejenigen, die ich gefunden habe, sind entweder Umfrage oder Werbung. Es war also nicht möglich, sich über das Protokoll zu informieren. In den Artikeln wird jedoch erwähnt, dass dies eine programmierbare Steuerung ist, sodass das Programm alles sein kann. Daher habe ich es nicht gewagt, die Mikroschaltung separat zu kaufen.



Protokoll



Nun zum Empfangen von Daten vom Sensor zum SI4432-Transceiver. Ursprünglich war geplant, Rohdaten vom SI4432 zu empfangen, damit der Controller Manchester dekodiert und Bytes sammelt. Dieser Transceiver hat jedoch eine Paketverarbeitungsfunktion. Das heißt, für die Übertragung können Sie den Sender auf die gewünschte Frequenz, Modulation, Abweichung konfigurieren, die Präambellänge, die Codierung, das Synchronisationswort, die Bitrate und die Datenlänge einstellen. Schreiben Sie dann das ursprüngliche Datenpaket in den Senderpuffer (z. B. unseren 15B937740C833C18025C) und starten Sie die Übertragung. Der Transceiver selbst bildet ein Paket und sendet es unter Beachtung aller angegebenen Parameter. Der Controller kann zu diesem Zeitpunkt weitere Informationen verarbeiten.



Idealerweise möchte ich beim Empfang eine Batch-Datenverarbeitung vom SI4432 erhalten. Damit der Empfänger das Paket empfängt und einen Interrupt generiert, dass das Paket empfangen wurde. Dann liest die Steuerung einfach den Empfangspuffer, der die Daten bereits in seiner reinen Form speichert, wodurch Prozessorzeit für andere Funktionen frei wird.



Ich begann, die Einstellung von Registern für den Betrieb des Transceivers für den Empfang zu untersuchen. Dies stellte sich als viel schwieriger heraus als das Übertragen des Pakets. Hier muss man die Theorie des Radioempfangs gut kennen, die ich nicht habe. Es gibt Tabellen zur Berechnung von Registern in Excel für diesen Transceiver, aber sie funktionieren entweder nicht, weil Excel russisch ist, oder sie werden abgeschnitten. Es gibt auch eine Anwendung des Entwicklers, aber auch dort ist nicht alles sehr transparent. Nachdem ich viele Beispiele durchgesehen und die Berechnungstabellen angesehen habe, habe ich die Registerwerte gemäß der Dokumentation manuell gelesen.



Ich habe einen Logger an den Ausgang des Empfängers angeschlossen und die Luft erfasst, je nachdem, was der Empfänger ausgibt. Infolgedessen konnte ich die Empfängerfilter so konfigurieren, dass mein Paket durchgelassen wird. Er manipulierte die Flussrate und schlug das Tamburin. Die Theorie ist mir leider immer noch nicht klar.



Damit der Empfänger ein Datenpaket empfangen kann, muss er die Präambellänge, das vorhandene Synchronisationswort und die Datenlänge angeben. Es ist dem Empfänger auch möglich, die Prüfsumme selbst zu lesen, aber in SI4432 entspricht der Berechnungsalgorithmus nicht dem CRC-Algorithmus der Drucksensoren.



Das obligatorische Vorhandensein eines Zwei-Byte-Synchronisationsworts könnte die Idee des Empfangs eines Pakets überschatten, aber hier war es ein Glück, dass die Nachricht vom Sensor bei 0x15B9 (15B937740C833C18025C) beginnt und für alle Sensoren gleich ist. Dies bedeutet, dass 0x15B9 für das Synchronisierungswort angegeben wurde. Die Datenpaketlänge beträgt 8 Byte, die Prüfsummenanalyse ist deaktiviert. Wir setzen die Erzeugung eines Interrupts beim Empfang eines Pakets und starten den Empfangsvorgang.



Wenn der Empfänger die Präambel, das Synchronisationswort 0x15B9 und 8 Datenbytes empfängt, gibt er einen Interrupt an die Hauptsteuerung aus, die einfach 8 Datenbytes aus dem Puffer des Empfängers liest. Als nächstes berechnet der Hauptcontroller die Prüfsumme, vergleicht sie und decodiert die empfangenen Daten. Zum Glück hat alles wie geplant geklappt!



Bild

Abb. 7. Foto der Standard-TPMS-Anzeige und Anzeige des "intelligenten" Kinderwagens



Das folgende Beispiel zeigt die Initialisierung des zu empfangenden SI4432-Transceivers:



WriteSI4432(0x06, 0x05);	   // interrupt all disable
   WriteSI4432(0x07, 0x01);	   // to ready mode
   WriteSI4432(0x09, 0x7f);	   // cap = 12.5pf
   WriteSI4432(0x0A, 0x06);	   // uC CLK: 1 MHz

   WriteSI4432(0x73, 0x00);	   // no frequency offset
   WriteSI4432(0x74, 0x00);	   // no frequency offset 
   WriteSI4432(0x75, 0x53);	   // 430-440MHz range   
   WriteSI4432(0x76, 0x62);	   // 0x621A-433.924 
   WriteSI4432(0x77, 0x1A);	   //  
   WriteSI4432(0x79, 0x00);	   // no frequency hopping
   WriteSI4432(0x7a, 0x00);	   // no frequency hopping  
 
   //      9090/2
   WriteSI4432(0x1C, 0x81);    // 01 IF Filter Bandwidth 
   WriteSI4432(0x1D, 0x44);    // 44 AFC Loop Gearshift Override 
   WriteSI4432(0x1E, 0x0A);    // 0A AFC Timing Control
   WriteSI4432(0x1F, 0x05);    // 00 Clock Recovery Gearshift Override
   WriteSI4432(0x20, 0x28);    // 64 Clock Recovery Oversampling Ratio 
   WriteSI4432(0x21, 0xA0);    // 01 Clock Recovery Offset 2 
   WriteSI4432(0x22, 0x18);    // 47 Clock Recovery Offset 1 
   WriteSI4432(0x23, 0xD2);    // AE Clock Recovery Offset 0 
   WriteSI4432(0x24, 0x08);    // 12 Clock Recovery Timing Loop Gain 1 
   WriteSI4432(0x25, 0x19);    // 8F Clock Recovery Timing Loop Gain 0 
   WriteSI4432(0x2A, 0x00);    // 00 AFC Limiter 
   WriteSI4432(0x69, 0x60);    // 60 AGC Override 1
   
   WriteSI4432(0x70, 0x26);     //  Manchester,   
   WriteSI4432(0x71, 0x22);	    //  FSK, FIFO
   WriteSI4432(0x72, 31);       //  31*625=19375  (     )
   WriteSI4432(0x34,10);         // 10 -    4- 
   WriteSI4432(0x35,0x1A);      // preambula threshold
   
   WriteSI4432(0x36,0x15);      //  3  0x15
   WriteSI4432(0x37,0xB9);      //  2  0xB9
   
   WriteSI4432(0x27,0x2C);      // RSSI

   //  
   WriteSI4432(0x33, 0x0A);     // fixpklen=1, Synchronization Word 3 and 2
   WriteSI4432(0x32, 0x00);     //   
   WriteSI4432(0x30, 0x80);	    // Skip2ph, Enable Packet RX Handling=0 (   Skip2ph...)
   WriteSI4432(0x3E, 0x08);     //    8 

   WriteSI4432(0x0B, 0x12);     //  GPIO0     TX 
   WriteSI4432(0x0C, 0x15);     //  GPIO1     RX

   //  FIFO TX
   WriteSI4432(0x08, 0x01);// 0x01  Operating Function Control 2 
   WriteSI4432(0x08, 0x00);// 0x00  Operating Function Control 2      
   //  FIFO RX
   WriteSI4432(0x08, 0x02);// 0x02  Operating Function Control 2 
   WriteSI4432(0x08, 0x00);// 0x00  Operating Function Control 2      
 
   //   :  ,  ,  
   WriteSI4432(0x05, 0x02);     //    
   WriteSI4432(0x06, 0x00); 
   //   ,       NIRQ  . 1
   SI4432_stat[0] = ReadSI4432(0x03); 
   SI4432_stat[1] = ReadSI4432(0x04); 
   WriteSI4432(0x07, 0x05);     //   


Der Datenempfang selbst sieht folgendermaßen aus:



if (si_int)		//      SI4432
   {
    //      
    SI4432_stat[0] = ReadSI4432(0x03); 
    SI4432_stat[1] = ReadSI4432(0x04); 
    SI4432_RSSI = ReadSI4432(0x26); 
    if (SI4432_stat[0]&0x02)
    {
     WriteSI4432(0x07, 0x01);      //  .     .  ,     
     SI4432_ReadFIFO();            //   FIFO 8  
     TPMS_Parsing();               //  CRC   
     //  FIFO
     WriteSI4432(0x08, 0x02);      //  0x02  Operating Function Control 2 
     WriteSI4432(0x08, 0x00);      //  0x00  Operating Function Control 2      
     //WriteSI4432(0x07, 0x05);      //   
    }
    else
    {
     //  FIFO TX
     WriteSI4432(0x08, 0x01);// 0x01  Operating Function Control 2 
     WriteSI4432(0x08, 0x00);// 0x00  Operating Function Control 2      
     //  FIFO RX
     WriteSI4432(0x08, 0x02);// 0x02  Operating Function Control 2 
     WriteSI4432(0x08, 0x00);// 0x00  Operating Function Control 2      
    }
    if (SI4432_stat[0]&0x80)
    {
     //  FIFO RX
     WriteSI4432(0x08, 0x02);// 0x02  Operating Function Control 2 
     WriteSI4432(0x08, 0x00);// 0x00  Operating Function Control 2      
    }
    WriteSI4432(0x07, 0x05);      //   
    si_int=0;
   }


Die Funktion SI4432_ReadFIFO () liest einfach 8 Bytes aus dem Empfängerpuffer, der die Daten vom Sensor enthält.



Die Funktion TPMS_Parsing () analysiert die Prüfsumme und decodiert die Informationen in endgültige Druck- und Temperatureinheiten sowie Statusinformationen.



Probleme



  1. Beim Lesen der Informationen zu den Sensoren wurde die Synchronisation der Sensoren miteinander erwähnt. Aus irgendeinem Grund ist es notwendig, die Sensoren zu koppeln, es gab etwas über eine Geschwindigkeit von mehr als 20 km / h für 30 Minuten. Es ist nicht klar, warum dies notwendig ist. Vielleicht liegt das am Moment der Informationsübertragung, aber das ist meine Vermutung.
  2. Erst am Ende der Funktion der Statusbits des Drucksensors herausgefunden.
  3. Es ist nicht klar über die Einstellung des SI4432-Transceivers für den Empfang, über die Baudrate unter Verwendung der Manchester-Codierung. Es funktioniert für mich, aber es gibt noch kein Bewusstsein für das Prinzip.


Arbeitsergebnisse



Die in diesem Artikel behandelten Forschungsarbeiten dauerten ungefähr einen Monat Freizeit.



Als Ergebnis der Untersuchung des Protokolls des Reifendrucküberwachungssystems wurden die Probleme beim Senden und Empfangen von Daten über Funk aufgeworfen, die Signalcodierung wurde kurz in Betracht gezogen, der SI4432-Transceiver wurde auf Senden und Empfangen getestet. Diese Aufgabe ermöglichte es, TPMS in das Hauptprojekt eines intelligenten Kinderwagens zu integrieren. Wenn Sie das Austauschprotokoll kennen, können Sie weitere Sensoren anschließen und in Ihre Entwicklung integrieren. Darüber hinaus kann der geregelte Druck in weiten Grenzen liegen und nicht wie im Standardsystem 1.1-3.2 Bar, weil Druck außerhalb dieses Bereichs wird von einem alarmierenden Quietschen des Standard-Zentraleinheitensystems begleitet. TPMS kann jetzt auch verwendet werden, um den Reifendruck eines Motorrads, Fahrrads oder beispielsweise einer Luftmatratze zu überwachen. Sie müssen lediglich den Sensor physisch installieren und ein Programm der obersten Ebene schreiben.



Links



  1. "Smart" Kinderwagen "Maksimka"
  2. github.com/jopohl/urh
  3. habr.com/ru/company/neuronspace/blog/434634
  4. www.rapidtables.com/convert/number/hex-to-binary.html
  5. www.rapidtables.com/convert/number/binary-to-hex.html
  6. eleif.net/manchester.html
  7. hackaday.com/2019/06/27/reverse-engineering-cyclic-redundancy-codes
  8. Meine Dienstprogramme, Beispielpaket, CRC-Auswahl. Archivkennwort " tPmSutiLity " dropmefiles.com/MtS9W "
  9. i56578-swl.blogspot.com/2017/08/eavesdropping-wheels-close-look-at-tpms.html
  10. www.rtl-sdr.com/tag/tpms



All Articles