Forum: Mikrocontroller und Digitale Elektronik SI5351 Problem


von Vancouver (vancouver)


Lesenswert?

Hallo,

ich arbeite gerade mit einem Adafruit-SI5351-Modul 
(https://learn.adafruit.com/adafruit-si5351-clock-generator-breakout/overview), 
Ansteuerung per Arduino und der bekannten SI5351-Library 
(https://github.com/etherkit/Si5351Arduino). Funktioniert alles perfekt.

Nun will ich den SI aber an einem FPGA betreiben, in dem ein RISC-V 
System läuft. Die Arduino-Software habe ich an den I2C-Controller im 
RISC-V angepasst (funktioniert etwas anders als im Arduino), dabei aber 
nur die I2C-Aufrufe geändert, nicht die Funktionen der SI-Library 
selbst. Die Kommunikation zwischen RISC-V und SI5351 läuft problemlos, 
auch das Busprotokoll sieht auf dem Logi richtig aus, alle 
Schreibvorgänge liefern ein ACK.

Trotzdem macht der SI nicht, was er soll. Das Merkwürdigste ist: im 
Statusregister 0 ist das LOS_XTAL-Bit gesetzt, was anzeigt, das 
angeblich kein Eingangstakt vorhanden ist. Der kommt aber von einem 
Quarz auf dem Adafruit-Board - warum sollte also der Eingangtakt fehlen? 
Die PLLs sind angeblich gelockt (LOS_A=LOS_B=0). An den Taktausgängen 
kommt aber eine Frequenz in der Nähe des 25-MHz Referenztakes heraus, 
die keine Ähnlichkeit mit dem eingestellten Takt hat.

Kennt jemand das Verhalten, dass der SI5351 LOS_XTAL=1 meldet bei einem 
fest verbundenden Quarz? Welche Ursache kann das haben?

von Mario M. (thelonging)


Lesenswert?

Ob es wohl daran liegt, dass es das LOS_CLKIN-Bit nur beim Si5351C gibt 
und die von Adafruit verbauten MSOP-10-Chips die A-Version sind?

von Vancouver (vancouver)


Lesenswert?

Daran habe ich auch gedacht, aber warum funktioniert das Teil dann am 
Arduino mit der gleichen Software? Vermutlich liegt es doch an einen 
Hickup im I2C-Protokoll. Mir wird nichts anderes übrigbleiben, als die 
Initialisierung am Logi Bit für Bit zu vergleichen.

von Vancouver (vancouver)


Lesenswert?

Ich jage da wohl einem Phantom hinterher. Sehr lange Geschichte. Nach 
ein paar Bugfixes und endlosem Herumprobieren mit verschiedenen 
Versionen der Arduino-Lib (von denen die neueste (2.2) bei mir auch auf 
dem Arduino nicht funktioniert), besteht das Problem immernoch: Das 
Statusregister meldet einen fehlenden Ref-Clock und eine unsinnige RevID 
(0x1 statt 0x3), beide PLLs sind aber gelockt. Das ergbit überhaupt 
keinen Sinn. Aber nur auf dem RISC-V, nicht auf Arduino, obwohl die 
Daten, die per I2C an die PLL geschrieben werden, bei beiden bis aufs 
Bit identisch sind. Ich habe sie sogar zurückgelesen und mit den 
Arduino-Werten verglichen, es gibt keine Unterschiede außer dem Status.

Heute habe ich dann mal im Labor gemessen, was die PLLs eigentlich 
veranstalten.  Und siehe da: beide laufen einwandfrei, mit exakt den in 
der SW eingestellten Frequenzen. Offenbar steht also Unsinn im 
Statusregister.
Ich habe keine Idee, warum das so ist, aber das Teil tut jetzt was es 
soll und ich ignoriere den Status einfach.

von Dieter S. (ds1)


Lesenswert?

Hast Du auch schon mal LOS_XTAL_STKY angeschaut? Das sollte ja dann 
ebenfalls gesetzt sein. Falls nicht wird es wohl ein Problem beim Lesen 
des Register 0 geben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.