TWI/I2C

Unachievable speeds

  • 1
  • 2
  • Page 1 of 2
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1374
Registered: 03 / 2005
Subject:

TWI/I2C

 · 
Posted: 03.03.2022 - 12:42  ·  #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
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2093
Registered: 03 / 2003
Subject:

Re: TWI/I2C

 · 
Posted: 03.03.2022 - 13:01  ·  #2
Hallo Merlin,

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

Gruss
Harry
Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 307
Registered: 07 / 2003
Subject:

Re: TWI/I2C

 · 
Posted: 03.03.2022 - 15:38  ·  #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
Gender:
Age: 24
Posts: 1374
Registered: 03 / 2005
Subject:

Re: TWI/I2C

 · 
Posted: 03.03.2022 - 18:29  ·  #4
Quote
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
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2093
Registered: 03 / 2003
Subject:

Re: TWI/I2C

 · 
Posted: 03.03.2022 - 19:41  ·  #5
Hallo Merlin,

wie wäre ein Compilerschalter? {$noCheckTWI}

Harry
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1374
Registered: 03 / 2005
Subject:

Re: TWI/I2C

 · 
Posted: 03.03.2022 - 20:07  ·  #6
Hi Harry.

Yes, I can do that

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

Ja, das kann ich tun.
Avra
Schreiberling
Avatar
Gender:
Location: Belgrade, Serbia
Age: 53
Homepage: rs.linkedin.com/in…
Posts: 653
Registered: 07 / 2002
Subject:

Re: TWI/I2C

 · 
Posted: 06.03.2022 - 01:18  ·  #7
Quote by 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
Gender:
Age: 24
Posts: 1374
Registered: 03 / 2005
Subject:

Re: TWI/I2C

 · 
Posted: 06.03.2022 - 10:28  ·  #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
  • 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: 10 · Cache Hits: 14   132   146 · Page-Gen-Time: 0.019282s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI