I2C-HW/SW zum effizienten Test

Gast #7560977
Lesenswert?

Ich frage folgendes in die Runde nach einem Tipp:

Ich suche nach einer Testsoftware mit der ich I2C-Geräte durchtesten kann. Es handelt sich um mehre Systemkomponenten, die in einem Bussystem zusammen geschaltet sind und an unterschiedlichen I2C-Bussen hängen. Diese will ich abklemmen und testen. Das soll möglichst einfach und effektiv laufen, da per SW automatisierbar. Benötigt wird z.B. eine Software für den PC, die ein Script abarbeiten kann und die auch stückchenweise vorgeht und prüft.

Ein Fall ist z.B. dass ein Gerät mit unterschiedlichen Parametern per I2C konfiguriert wird und dann Daten auf ein anderes geschoben werden, wobei ich die Status Infos aus dem zweiten Geräte lesen muss, was real ein Prozessor tut. Es sollen dann alle Grenzfälle durchgefahren werden und gescheckt werden, ob bei den Eingangsdaten (Druckgrößen) die Grenzen erkannt und Überläufe detektiert werden. Es geht da um ca 5x2 x 7x2 = 140 Kombinationen für die die Antworten aufgezeichnet werden müssen.

Gibt es da eine SW die das kann? Was benötigt man an HW? Ich nehme an 2 USB I2C Kabel-Konverter?

Bevor Fragen kommen - wir haben CAN aus dem System geschmissen und alles auf I2C umgestellt.

#7561471
Lesenswert?

Mit Seriewiderstaenden auf der Leitung kann man Signale aufdruecken. Per Teststecker, oder Nadeladapter. Ich wuerd Nadeladapter empfehlen. Ich wuerd's mit einem Controller, welcher per USB Serial mit dem PC verbunden ist loesen. Der kann dann irgendwelches Timing einhalten, welches man dem PC nicht anvertrauen sollte.

#7563657
Lesenswert?

Bernd H. schrieb:

wir haben CAN aus dem System geschmissen und alles auf I2C umgestellt.

Echt jetzt? Nachdem Philips seine 8051 mit I2C ausrangiert hat, habe ich derart massive Problem mit I2C bekommen, daß wird auf CAN umgestiegen sind. Insbesondere die 8051 und AVR von Atmel sind sowas von buggy. Und beim P89C668 Nachbau von Tekmos lief das I2C überhaupt nicht.

Neben dem großen Vorteil, daß sich bei CAN schon die Hardware um alles kümmert (Kollision, Arbitration, CRC, Retry, Puffer) kann man die Signale auch viel einfacher galvanisch trennen. CAN läuft völlig problemlos.

I2C läuft bei Dir wohl auch nicht stabil, sonst würdest Du ja keinen Tester benötigen.

Gast #7565670
Lesenswert?

Crazy H. schrieb:

Das kann auch nur einfach für eine Abnahmemessung/einen Abnahmetest sein.

Vor allem auch Entwicklung.

Peter D. schrieb:

I2C läuft bei Dir wohl auch nicht stabil, sonst würdest Du ja keinen Tester benötigen.

NeNe, erst mal brauchen wir überhaupt genug Tester und dann eben einen, der die ganzen Szenarien durchrattern kann. Auf I2C bin ich festgelegt. Die massenhaft verbauten Sensoren gibt es nur in I2C. Da ist nichts zu rütteln.

Dass man den Rest auch entfernt hat, liegt wohl auch an Kosten. Nach meinem Wissen ist die Haupttriebfeder, dass die ehemalige GUI-Einheit nicht mehr mit CAN, sondern über Ethernet zuppelt. Da liefen dann CAN-Aapter, die zu teuer geworden sind.

Gast #7565754
Lesenswert?

Hardware https://www.az-delivery.de/products/digispark-board

Firmware https://github.com/harbaum/I2C-Tiny-USB/blob/master/digispark

Zum Firmware-Upload brauchst du dieses Programm: https://github.com/micronucleus/micronucleus/releases

Das Ding wird vom Linux Kernel unterstützt, du kannst deinen Testautomat daher in jeder beliebigen Programmiersprache schrieben, gerne auch als Bash Script.

Ich habe mir dazu folgende Notizen gemacht:

The following commands must be executed as root.

Upload firmware:

1
micronucleus --run --dump-progress --type intel-hex main.hex

Install I2C Tools and load the kernel driver:

1
apt install i2c-tools
2
modprobe i2c-dev

Scan for I2C busses:

1
root@stefanspc:~# i2cdetect -l
2
i2c-0  smbus       SMBus I801 adapter at 5040        SMBus adapter
3
i2c-1  i2c         nvkm-0000:01:00.0-bus-0000        I2C adapter
4
i2c-2  i2c         nvkm-0000:01:00.0-bus-0001        I2C adapter
5
i2c-3  i2c         nvkm-0000:01:00.0-bus-0002        I2C adapter
6
i2c-4  i2c         nvkm-0000:01:00.0-bus-0005        I2C adapter
7
i2c-5  i2c         nvkm-0000:01:00.0-bus-0006        I2C adapter
8
i2c-6  i2c         nvkm-0000:01:00.0-bus-0007        I2C adapter
9
i2c-7  i2c         nvkm-0000:01:00.0-bus-0008        I2C adapter
10
i2c-8  i2c         nvkm-0000:01:00.0-bus-0009        I2C adapter
11
i2c-9  i2c         nvkm-0000:01:00.0-aux-000a        I2C adapter
12
i2c-10  i2c         nvkm-0000:01:00.0-aux-000b        I2C adapter
13
i2c-11  i2c         nvkm-0000:01:00.0-aux-000c        I2C adapter
14
i2c-12  i2c         nvkm-0000:01:00.0-aux-000d        I2C adapter
15
i2c-13  i2c         i915 gmbus dpc                    I2C adapter
16
i2c-14  i2c         i915 gmbus dpb                    I2C adapter
17
i2c-15  i2c         i915 gmbus dpd                    I2C adapter
18
i2c-16  i2c         AUX A/DDI A/PHY A                 I2C adapter
19
i2c-17  i2c         i2c-tiny-usb at bus 001 device 109  I2C adapter

Check capabilities of the I²C adapter:

1
root@stefanspc:~# i2cdetect -F 17
2

3
Functionalities implemented by /dev/i2c-17:
4
I2C                              yes
5
SMBus Quick Command              yes
6
SMBus Send Byte                  yes
7
SMBus Receive Byte               yes
8
SMBus Write Byte                 yes
9
SMBus Read Byte                  yes
10
SMBus Write Word                 yes
11
SMBus Read Word                  yes
12
SMBus Process Call               yes
13
SMBus Block Write                yes
14
SMBus Block Read                 no
15
SMBus Block Process Call         no
16
SMBus PEC                        no
17
I2C Block Write                  yes
18
I2C Block Read                   yes

Scan the I2C bus:

1
root@stefanspc:~# i2cdetect 17
2

3
WARNING! This program can confuse your I2C bus, cause data loss and worse!
4
I will probe file /dev/i2c-17.
5
I will probe address range 0x08-0x77.
6
Continue? [Y/n] Y
7

8
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
9
00:                         -- -- -- -- -- -- -- -- 
10
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
11
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
12
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
13
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
14
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
15
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
16
70: -- -- -- -- -- -- -- --

Send data:

1
i2cset 17 0x20 0x12 1

This example sends the value 1 to address 0x12 on slave 0x20 at bus 17.

Receive data:

1
i2cget 17 0x20 0x12 i 5

This example receives 5 bytes from address 0x12 on slave 0x20 at bus 17.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren