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?
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.