LIS331HH-Register geben nur Null zurück

Ich verwende das LIS331HH und das FRDM-K22F Board.

Ich kann in das Leistungsregister schreiben und den LIS331HH einschalten, ich kann auch in das Interrupt-Steuerregister (23h) schreiben und den von mir geschriebenen Wert auslesen.

Aus irgendeinem Grund kann ich jedoch nicht aus dem INT1_CFG (30)-Register, dem INT1_SOURCE (31)-Register oder einem der anderen Interrupt-bezogenen Register lesen.

Es scheint jedoch, dass ich ihnen einen Wert schreiben kann.

Auch das STATUS_REG (0x27) gibt immer 0 zurück.

Ich frage mich, ob jemand auf dieses Problem mit diesem Gerät gestoßen ist? Wie würde ich vorgehen, um sicherzustellen, dass das Gerät auf Hardwareebene nicht defekt ist?

Ich bin mir nicht sicher, ob ich den Code hier posten soll, aber ich muss es tun, bitte lassen Sie es mich wissen.

Antworten (1)

Wie würde ich vorgehen, um sicherzustellen, dass das Gerät auf Hardwareebene nicht defekt ist?

Sie können die Möglichkeit, dass ein Gerät einen Hardwarefehler hat, nie vollständig ausschließen, egal wie viele Tests Sie durchführen (z. B. sporadische oder subtile Fehler).

In der von Ihnen beschriebenen Situation könnten Sie jedoch:

  1. Überprüfen Sie, ob die Versorgungsspannungen, Entkopplungskondensatoren und das PCB-Layout Ihres Sensors den Anforderungen entsprechen, die auf seinem Datenblatt erläutert werden ( insbesondere , wenn Sie kein bewährtes, kommerzielles Breakout-Board für den Sensor verwenden).

  2. Verwenden Sie ein Oszilloskop, um die Schnittstellensignalpegel, die Wellenform usw. anzuzeigen und zu bestätigen, dass dort keine Probleme vorliegen. Dann...

  3. Verwenden Sie ein Oszilloskop (oder in diesem Stadium einen Logikanalysator oder die in einige Oszilloskope integrierte Protokolldecodierungsfunktion wäre besser), um die Befehlssequenzen (an welcher Schnittstelle Sie auch immer für diesen Sensor verwenden, I 2 C oder SPI) zu erfassen gesendet von Ihrem aktuellen FRDM-K22F-Code.

  4. Vergleichen Sie die von Ihrem aktuellen Programm gesendeten Befehlsfolgen mit denen im Datenblatt des Sensors. Dieser Vergleich erfordert möglicherweise die Unterstützung eines Experten, da es für Sie schwierig sein kann, zu bestätigen, dass Ihr Programm definitiv die richtigen Befehle sendet.

  5. Vergleichen Sie auch die verschiedenen von Ihnen erwähnten Befehlssequenzen miteinander , da Sie berichten, dass sich Zugriffe auf einige Register scheinbar wie erwartet verhalten, andere jedoch nicht.

Oder:

  1. Überprüfen Sie wie oben zuerst die Leistung, Entkopplung, das PCB-Layout usw.

  2. Verwenden Sie wie oben ein Oszilloskop, um zu bestätigen, dass es keine Probleme mit den Wellenformen der Schnittstellensignale gibt.

  3. Verbinden Sie Ihren Sensor vorübergehend mit einem bekanntermaßen funktionierenden Arduino.

  4. Verwenden Sie eine der vorhandenen Arduino-Bibliotheken für diesen Sensor (z. B. diese von SparkFun , die die SPI-Schnittstelle verwendet), um Vertrauen in Ihre Sensorhardware selbst zu bekommen.

  5. Angenommen, Ihr Sensor funktioniert mit diesem Arduino-Code, verwenden Sie dann ein Oszilloskop oder einen Logikanalysator wie oben erwähnt, um die Befehlssequenzen zu erfassen, wenn Sie das "funktionierende" Arduino und seine Bibliothek verwenden.

  6. Vergleichen Sie die „funktionierenden“ Arduino-initiierten Befehlssequenzen mit denen, die im aktuellen FRDM-K22F-Code nicht „funktionieren“, finden Sie die Unterschiede und verwenden Sie dann standardmäßige Debugging-Ansätze, um diesen Code zu beheben.

Wenn Sie kein Oszilloskop oder keinen Logikanalysator haben, können Sie die tatsächlichen Befehlssequenzen, die an der Schnittstelle des Sensors gesendet werden, nicht erfassen:

  1. Überprüfen Sie visuell die Befehlssequenzen, insbesondere bei der Initialisierung, die vom vorhandenen Code anderer Personen verwendet werden (z. B. in der von mir erwähnten Arduino-Bibliothek).

  2. Vergleichen Sie diese Sequenzen mit denen, die im aktuellen FRDM-K22F-Code verwendet werden.

  3. Konzentrieren Sie Ihre Untersuchung auf Unterschiede, die zwischen diesen beiden Sätzen gefunden wurden.

    Dies kann natürlich nur helfen, Probleme zu finden, die im Code sichtbar sind, und setzt voraus, dass der von anderen Personen geschriebene Code korrekt ist. Dies ist ein relativ schwacher Ansatz zur Fehlerbehebung im Vergleich dazu, was wirklich auf der Schnittstelle passiert, wie in den früheren Vorschlägen in der Liste beschrieben.

Das ist keine vollständige Liste möglicher Ansätze zur Fehlerbehebung, aber hoffentlich sollten sie einige Ideen dazu geben, was in dieser Situation getan werden könnte.