TWI/I2C

Unachievable speeds

  • 1
  • 2
  • Seite 1 von 2
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1473
Dabei seit: 03 / 2005
Betreff:

TWI/I2C

 · 
Gepostet: 03.03.2022 - 12:42 Uhr  ·  #1
For XMEGA (and soon for UPDI too) certain baud rates are exported

Code
TWI_BR100 : byte = nn; // nn = prescaler value for 100kBits/sec
 TWI_BR400 : byte = nn; // nn = prescaler value for 400kBits/sec
 TWI_BR500 : byte = nn; // nn = prescaler value for 500kBits/sec
 TWI_BR600 : byte = nn; // nn = prescaler value for 600kBits/sec
 TWI_BR800 : byte = nn; // nn = prescaler value for 800kBits/sec


Now it is possible that these speeds are not achievable on some processors and configurations.

The question is what to do if this is the case.

1. Issue an error saying that these speeds are not achievable in this configuration
2. Go as fast as is possible (which could be significantly slower
3. As 2 but issue a warning (rather than an error), but since the default is not to show warning this is not safe.

I prefer option 1, and unless anyone convinces me otherwise, that is the option I will adopt. This may affect existing XMEGA programs of course...

Any comments welcome.

========================================================

ür XMEGA (und bald auch für UPDI) werden bestimmte Baudraten exportiert

Code
TWI_BR100 : byte = nn; // nn = Vorteilerwert für 100kBits/sec
 TWI_BR400 : byte = nn; // nn = Vorteilerwert für 400kBits/sec
 TWI_BR500 : byte = nn; // nn = Vorteilerwert für 500kBits/sec
 TWI_BR600 : byte = nn; // nn = Vorteilerwert für 600kBits/sec
 TWI_BR800 : byte = nn; // nn = Vorteilerwert für 800kBits/sec


Es ist nun möglich, dass diese Geschwindigkeiten bei einigen Prozessoren und Konfigurationen nicht erreicht werden können.

Die Frage ist, was in diesem Fall zu tun ist.

1. Eine Fehlermeldung ausgeben, die besagt, dass diese Geschwindigkeiten in dieser Konfiguration nicht erreicht werden können
2. So schnell wie möglich arbeiten (was deutlich langsamer sein könnte)
3. Wie 2, aber Ausgabe einer Warnung (statt eines Fehlers), aber da die Standardeinstellung keine Warnung anzeigt, ist dies nicht sicher.

Ich bevorzuge Option 1, und wenn mich niemand vom Gegenteil überzeugt, werde ich diese Option übernehmen. Das kann natürlich Auswirkungen auf bestehende XMEGA-Programme haben...

Alle Kommentare sind willkommen.
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: TWI/I2C

 · 
Gepostet: 03.03.2022 - 13:01 Uhr  ·  #2
Hallo Merlin,

ich wäre für Option 1, aber mit der Möglichkeit, dies zu ignorieren.

Gruss
Harry
Mathias
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Weingarten - Baden
Beiträge: 315
Dabei seit: 07 / 2003
Betreff:

Re: TWI/I2C

 · 
Gepostet: 03.03.2022 - 15:38 Uhr  ·  #3
Hallo Merlin,

schließe mich Harry an.
Wäre für Option 1, aber mit der Möglichkeit, dies zu ignorieren.

Gruß
Mathias
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1473
Dabei seit: 03 / 2005
Betreff:

Re: TWI/I2C

 · 
Gepostet: 03.03.2022 - 18:29 Uhr  ·  #4
Zitat
I would be for option 1 but with the option to ignore this.


Not sure how I would achieve that. By definition an error stops the compile. The option below that is a warning which generally does not appear by default.

I feel if you have specified too high a speed you should take some action to correct it, either by increasing the oscillator speed (e.g. on UPDI from 16M to 20M) or by reducing the divisor (e.g. from DIV6 to DIV1) or by changing transfer speed (e.g. from TWI_BR600 to TWI_BR100).

=============================================

Ich bin mir nicht sicher, wie ich das erreichen könnte. Per Definition stoppt ein Fehler die Kompilierung. Die Option darunter ist eine Warnung, die in der Regel nicht standardmäßig erscheint.

Ich denke, wenn Sie eine zu hohe Geschwindigkeit angegeben haben, sollten Sie etwas unternehmen, um dies zu korrigieren, entweder durch Erhöhung der Oszillatorgeschwindigkeit (z.B. bei UPDI von 16M auf 20M) oder durch Verringerung des Divisors (z.B. von DIV6 auf DIV1) oder durch Änderung der Übertragungsgeschwindigkeit (z.B. von TWI_BR600 auf TWI_BR100).
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: TWI/I2C

 · 
Gepostet: 03.03.2022 - 19:41 Uhr  ·  #5
Hallo Merlin,

wie wäre ein Compilerschalter? {$noCheckTWI}

Harry
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1473
Dabei seit: 03 / 2005
Betreff:

Re: TWI/I2C

 · 
Gepostet: 03.03.2022 - 20:07 Uhr  ·  #6
Hi Harry.

Yes, I can do that

================

Ja, das kann ich tun.
Avra
Schreiberling
Avatar
Geschlecht:
Herkunft: Belgrade, Serbia
Alter: 54
Homepage: rs.linkedin.com/in…
Beiträge: 653
Dabei seit: 07 / 2002
Betreff:

Re: TWI/I2C

 · 
Gepostet: 06.03.2022 - 01:18 Uhr  ·  #7
Zitat geschrieben von Merlin

I prefer option 1

Although I do understand the reasoning, I do not find it consistent, because with serial port we do not have a compiler error when speed error is <> 0%.

If possible, I would calculate error percentage and generate compiler warning (which could be disabled if needed).
Merlin
Administrator
Avatar
Geschlecht:
Alter: 25
Beiträge: 1473
Dabei seit: 03 / 2005
Betreff:

Re: TWI/I2C

 · 
Gepostet: 06.03.2022 - 10:28 Uhr  ·  #8
Hi Avra

My concern with a warning is that if you generate your base application with the AppWizz, which I think most do, Warnings are disabled by default, so you would never see a problem. When we talk of consistency, serial ports do not issue a warning when the error <> 0% and if the baud rate specified is, for example < 300 or > 2000000 an error is generated. True, though that if the baud rate error > 2% a warning is generated rather than an error. Now generally speaking a baud rate error of >2% cannot be handled by most devices, so arguably that should be an error rather than a warning. As against that if a baud rate on TWI is less than expected (even much less that expected) the devices will handle that because of the existence of a clock line.

You can see my dilemma!

And on reflection an error that could be ignored seems a good option for serial too!

But I am not proposing that at the moment.

=========================================================================

Mein Problem mit einer Warnung ist, dass, wenn Sie Ihre Basisanwendung mit AppWizz generieren, was ich denke, die meisten tun, sind Warnungen standardmäßig deaktiviert, so dass Sie nie ein Problem sehen würden. Wenn wir von Konsistenz sprechen, geben serielle Schnittstellen keine Warnung aus, wenn der Fehler <> 0% ist, und wenn die angegebene Baudrate z.B. < 300 oder > 2000000 ist, wird ein Fehler erzeugt. Es stimmt allerdings, dass bei einem Baudratenfehler > 2% eher eine Warnung als ein Fehler ausgegeben wird. Im Allgemeinen kann ein Baudratenfehler von > 2 % von den meisten Geräten nicht verarbeitet werden, so dass es sich wohl eher um einen Fehler als um eine Warnung handeln sollte. Wenn dagegen eine Baudrate auf TWI niedriger ist als erwartet (sogar viel niedriger als erwartet), werden die Geräte dies aufgrund der Existenz einer Taktleitung verarbeiten.

Sie können mein Dilemma sehen!

Und wenn ich darüber nachdenke, scheint ein Fehler, der ignoriert werden kann, auch für die serielle Schnittstelle eine gute Option zu sein!

Aber das schlage ich im Moment nicht vor.


Übersetzt mit www.DeepL.com/Translator (kostenlose Version)
  • 1
  • 2
  • Seite 1 von 2
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   131   145 · Page-Gen-Time: 0.063849s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI