Inhoudsopgave:

Arduino I2C Sniffer - Ajarnpa
Arduino I2C Sniffer - Ajarnpa

Video: Arduino I2C Sniffer - Ajarnpa

Video: Arduino I2C Sniffer - Ajarnpa
Video: Декодер протоколов | Часть первая I2C сниффер 2024, Juli-
Anonim
Arduino I2C Sniffer
Arduino I2C Sniffer

I2C is een serieel protocol dat wordt gebruikt om een microcontroller te communiceren met externe randapparatuur die op hetzelfde circuit is aangesloten. Elk randapparaat moet een uniek ID-nummer hebben dat adres wordt genoemd en dat wordt gebruikt om het te identificeren als de beoogde ontvanger van een bepaald bericht. Die adressen worden toegewezen door de fabrikant van het apparaat en kunnen meestal niet worden gewijzigd. Een sniffer scant alle mogelijke adressen op zoek naar aangesloten apparaten en rapporteert de gevonden apparaten. Dit helpt bij het identificeren van niet-gemarkeerde chips, aangezien het adres vervolgens kan worden gegoogled voor meer informatie over de chip.

Dit apparaat bootst op een Arduino UNO het gedrag van het Raspberry Pi i2cdetect-script na, snuffelt alle mogelijke i2c-adressen op zoek naar aangesloten apparaten en drukt de resultaten mooi af op een 16x02 LCD-scherm.

Om alles op het scherm te laten passen, worden zowel het hoge als het lage deel van het adres boven de resultaten afgedrukt, het hoge deel is vetgedrukt. Met twee drukknoppen kan tussen de adressen worden genavigeerd, waarbij 16 adressen tegelijk worden weergegeven. Als een apparaat wordt gedetecteerd, wordt W afgedrukt om het als een schrijfadres weer te geven en wordt R weergegeven als het een leesadres is. Als er op dat adres niets wordt gedetecteerd, wordt er een koppelteken (-) op het scherm weergegeven.

Stap 1: Materialen

Materialen
Materialen
Materialen
Materialen

Optie 1

1 x Arduino UNO

1 x 16x02 LCD-scherm

1x 10K potentiometer

1x 330 ohm weerstand

3x Drukknoppen

Startkabels

1x I2C level shifter (niet op materiaal foto)

Optie 2

1 x Arduino UNO

LCD-toetsenbordscherm (de knoppen op het schild worden niet gebruikt)

3x Drukknoppen

Startkabels

1x I2C level shifter (niet op materiaal foto)

Optie 2 is degene die zal worden gebouwd, want dat is wat ik op dit moment bij de hand had. De niveauverschuiver is een belangrijk onderdeel van het circuit, aangezien de meeste apparaten tegenwoordig 3.3V-logica gebruiken en de 5V van de Arduino deze beschadigt.

(Op de foto's is het doorgestreepte materiaal niet verplicht.)

Stap 2: Circuit

Stroomkring
Stroomkring
Stroomkring
Stroomkring
Stroomkring
Stroomkring

Het circuit is vrij eenvoudig, met de standaard pinout voor de Arduino-voorbeelden voor het LCD-scherm, de standaardpinnen voor I2C en 3 reservepinnen voor de drukknoppen.

Als u het LCD-toetsenbordscherm gebruikt, verandert de pin-out voor het LCD-scherm, maar daar wordt al rekening mee gehouden in de code. De LCD Keypad Shield-knoppen worden niet gebruikt omdat ze een analoge pollingmethode vereisen die de compatibiliteit tussen de twee mogelijke implementatiecircuits verbreekt (Shield en stand-alone LCD)

Stap 3: Coderen

Code
Code

Als het LCD-toetsenbordscherm wordt gebruikt, moet #define LCD_SHIELD aan het begin van de schets niet worden becommentarieerd. Geef anders commentaar om het eerste diagram te gebruiken.

Stap 4: Conclusies

conclusies
conclusies
conclusies
conclusies
conclusies
conclusies

Voor het testen van de code en het circuit werden een BQ32000 RTC-chip en een MMA8452Q-versnellingsmeter gebruikt. Zoals op de foto's te zien is, detecteert het apparaat 4 adressen: 0x3A en 0xD0 als schrijfadressen, en 0x3B en 0xD1 als leesadressen. Deze adressen komen overeen met de testapparaten, dus de code werkt.

Ik wil de aardige meiden van Beijing Makerspace, Fu Yao en Liu Xin, bedanken voor hun hulp om op zo'n korte termijn de benodigde materialen te krijgen om dit project te testen.

Aanbevolen: