Für I²C hätt ich eine Idee, vielleicht kann man die ja aufs RS485 übertragen?
- Der Master (Chef) sendet einen General Call (GCALL).
- Der Chef wird zum Slave.
- Nach dem GCALL bestimmt jeder Slave eine Zufallszahl Z (zB aus uninitialisiertem RAM-Inhalt).
- Der Slave wird zum Master und versucht, Z an den Chef zu senden.
- Verliert er die Arbitration, wartet er bis der Bus frei ist und geht zurück zu 4.
- Kommt der Slave (momentan ein Master) zum Chef (momentan Slave) durch, bekommt er eine Adresse A vom Master zugewiesen.
- Wenn alle Slaves zum Master durchgekommen sind, ist man fertig.
- Falls sich scheinbar weniger als die vorhandenen N Slaves (Chef muß N kennen) gemeldet haben, dann haben 2 oder mehr Slaves genau das selbe Z geschickt, ohne daß einer die Arbitration verloren hat.
Das ist möglich, wenn beide (oder mehrere) zur gleichen Zeit die gleichen Daten mit der selben Geschwindigkeit schicken.
Durch Vergrößern von Z kann man die Wahrscheinlichkeit dafür aber beliebig klein machen. Tritt dieser Fall auf (kann man wohl nur über einen Timeout erkennen), dann startet das ganze von vorne bei 1.
Lesezeichen