Xmega TWI-Master, riesiger timeout gewollt?

  • 1
  • 2
  • Page 1 of 2
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Xmega TWI-Master, riesiger timeout gewollt?

 · 
Posted: 22.05.2014 - 11:50  ·  #1
Hallo,

ich habe hier einen code, in dem ich TWIInpPC in einer Loop Schleife aufrufe.
Vor und direkt nach dem Aufruf erzeuge ich einen Puls, den ich zusammen mit SDA und SCL mit einem Oszilloskop aufzeichne (siehe Fotos).

Es ist kein Slave angeschlossen.

Folgt auf das Adressbyte kein Acknowledge (NACK, SDA bleibt high), dann wartet die Routine >100ms. Zusätzlich wartet die Routinne bei erneutem Aufruf >100ms bevor sie das Adressbyte sendet.

Ist das so gewollt? Sollte die Routine nicht unmittelbar mit einem false zurückkehren?

Ich möchte den TWI-Master Treiber für die Kommunikation mit einem anderen Prozessor benutzen und das NACK für eine Flusskontrolle verwenden. Lange Wartezeiten wären störend.

Gruß

Thomas

Code

program xTWIMasterTest;

{ $W+}
{$DEBDELAY} // for faster delay in simulator

Device = xmega128A1, VCC = 3.3;

Import SysTick,TWI_C;
From System Import Longword;

Define
  OSCtype        = int32MHz, PLLmul=4, prescA=1, prescB=1, prescC=1;
  SysTick        = 10;
  StackSize      = 128, iData;
  FrameSize      = 256, iData;
  TWIprescC      = TWI_BR100;


Implementation
{$IDATA}

const
  TWI_SLAVE_ADDR : byte = $34;

type

var
  masterRxData : array[0..7] of byte;

procedure testpuls;
begin
  DDRF := $FF;
  PORTF := $FF;
  uDelay(200);
  PORTF := $00;
end;


begin
  mDelay(2000);
  EnableInts($87);
  loop
    testpuls;
    TWIInpPC(TWI_SLAVE_ADDR,@masterRxData,3); //read 3 bytes
    testpuls;
  endloop;
end xTWIMasterTest.

Attachments
Xmega TWI-Master, riesiger timeout gewollt?
Filename: TWI_access.jpg
Filesize: 301.39 KB
Title:
Download counter: 184
Xmega TWI-Master, riesiger timeout gewollt?
Filename: TWI_waiting.jpg
Filesize: 320.48 KB
Title:
Download counter: 183
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Xmega TWI-Master, riesiger timeout gewollt?

 · 
Posted: 22.05.2014 - 17:15  ·  #2
Hallo Thomas,

dieser Timeout ist Absicht! Nicht jeder I2C Slave antwortet mit Lichtgeschwindigkeit.
Ich muss mal prüfen ob man dazu eine Variable exportieren kann wo der User seine
eigenen Werte vorgeben kann.

rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: Xmega TWI-Master, riesiger timeout gewollt?

 · 
Posted: 22.05.2014 - 21:05  ·  #3
Quote by rh

Hallo Thomas,

dieser Timeout ist Absicht! Nicht jeder I2C Slave antwortet mit Lichtgeschwindigkeit.
Ich muss mal prüfen ob man dazu eine Variable exportieren kann wo der User seine
eigenen Werte vorgeben kann.

rolf


Hallo Rolf,

gestern ist mir das aber auch aufgefallen, habe aber noch keinen OSZI dran gehängt.

Wenn ich einen SCAN mit TWISTAT mache dauert es deutlich länger als wenn ich den I2CSTAT auf dem XMEGA nutze. Wenn ich ein neues Board mit I2C durchteste lasse ich meist eine Schleife durchlaufen Adr 1-127 um zu prüfen, das ich keine Fehler gemacht habe und der TWISTAT hat ca. die 3-4 Fache Zeit gegenüber dem I2CStat gebraucht. War für mich jetzt nicht dramatisch, aber man merkt es schon. Eigentlich müsste doch die Pause bei beiden gleich sein? Oder ist der I2C mit Software einfach schneller?

Gruss
Thorsten
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Xmega TWI-Master, riesiger timeout gewollt?

 · 
Posted: 22.05.2014 - 21:52  ·  #4
Hallo Thorsten,

ausser dass beide Treiber mit I2C arbeiten, gibt es absolut keine Gemeinsamkeiten.
Im nächsten Update wird es dazu für den XMega TWI das Byte "TWI_TimeOutxx"
geben wo die App das Timeout selbst einstellen kann.

rolf
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: Xmega TWI-Master, riesiger timeout gewollt?

 · 
Posted: 23.05.2014 - 08:50  ·  #5
Sorry Rolf,

ich verstehe absolut nicht, wieso hier der lange timeout nötig ist.
Bei einer I2C Kommunikation sendet der Master eine Start condition + Adressbits + RWBit und ckeckt bei seiner 9-ten SCL HighFlanke, ob ein Acknowledge vom Slave gesendet wurde. Wenn kein Acknowledge gesendet wurde, muss der Master abbrechen. Worauf soll er denn dann noch warten? Ich hab ja hier kein Clock Stretching vom Slave. In diesem Fall müsste der Master warten.
Der lange timeout ist besonders beim Pollen von Slave-Adressen störend, wie Thorsten bereits anmerkte.

Habe ich etwas falsch verstanden?

Im meinem zweiten Foto sieht man übrigens noch eine stop condition vor der start condition. Komisch ist auch, dass der timeout zweifach zuschlägt. Ich habe > 200ms Pause auf den SDA/SCL Leitungen.
Erklärungsversuch: Master starte Kommunikation und läuft in den timeout. TWIInpPC kehrt ohne Senden einer stop condition mit false zurück.
Bei erneutem Aufruf von TWIInpPC wird zuerst 100ms gewartet, dann mit einer stopcondition das "alte" abgebrochen und mit einer neuen start condition eine neue I2C Kommunikation eingeleitet.


Gruß

Thomas
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Xmega TWI-Master, riesiger timeout gewollt?

 · 
Posted: 23.05.2014 - 09:53  ·  #6
Hallo Thomas,

es gibt I2C Slaves die im Interrupt arbeiten müssen, z.B. uCs. Die können oft garnicht
so schnell reagieren. Nicht hinter jedem I2C Slave steckt eine Hardware State Maschine.
Deshalb das lange Timeout.

Aber was solls, mit dem User-programmierbaren Timeout sollte doch das Problem
beseitigt sein, oder?

rolf
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: Xmega TWI-Master, riesiger timeout gewollt?

 · 
Posted: 23.05.2014 - 13:17  ·  #7
Hallo Rolf,

ich muss leider widersprechen.

Ein I2C-Slave muss sich nach Empfang der Addressbits sofort entscheiden und dann während der 9-ten SCL Flanke entweder die SDA-Leitung oder die SCL Leitung auf low ziehen (acknowledge oder clock-stretching). Dies ist zeitkritisch und nur sicher in Hardware ausführbar bzw. in einem schnell reagierenden Interrupt.
Tritt keiner der beiden Fälle ein, darf der Master nur annehmen, das kein Slave mit dieser Adresse angeschlossen ist, oder dass das Slave nicht bereit war. Auf jeden Fall ist es erforderlich die Kommunikation mit einer [stop-]start-condition + Addressbits neu zu starten. Der timeout ist an dieser Stelle meiner Ansicht nach total überflüssig.

Ein timeout ist natürlich sinnvoll, wenn z.B. das Slave fehlerhaft ist und die SCL dauerhaft auf low zieht.

Den user-timeout finde ich gut, aber geht etwas an dem vorbei was ich brauche. Das Slave darf ja ruhig länger brauchen. In diesem Fall muss es halt den clock stretchen. Hier würde ein zu kurz gewählter timeout die ansonsten fehlerfreie Kommunikation zu Nichte machen.

Wie auch immer, ich werde in meinem Fall wohl anders vorgehen müssen. Verstehen Sie meine Meinung bitte nur als konstruktive Kritik.

Gruß

Thomas
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: Xmega TWI-Master, riesiger timeout gewollt?

 · 
Posted: 04.03.2016 - 12:43  ·  #8
Lässt sich für mega auch eine TWI-Timeout Variable exportieren?
Hätte Verwendung dafür.

Gruß
Thomas
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   143   158 · Page-Gen-Time: 0.053162s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI