Jump to content

Recommended Posts

Geschrieben

Hallo zusammen,

ich habe bin an der Entwicklung eines eigenen Bricks der CAN und LIN Bus anschluss hat. Die Hardware ist bereits fertig und das System implementiert. Habe einen ATSAM3S4C also genau den gleichen wie den Master drauf, welcher die SPI Slave routine laufen lässt. Momentan bin ich stehe ich bei dem Punkt das die SPI routine die Nachrichten vom Master nicht Richtig empfängt, welches am Timing liegt.

Wenn ich die zeilen mit dem Pearson hash auskommentiere passt es. Daraus ziehe ich die vermutung, das bie berechnung der checksum an einigen stellen zu lange dauert.

Da der gleiche Controller verwendet wird wie der Master denke ich, das es an den Clockeinstellungen liegt.

Habt ihr eine Idee an welcher stelle ich dort drehen muss? :)

Oder vll hat jemand schonmal das gleiche Problem gehabt?

 

Gruß

David

Geschrieben

ich verwende einen externen 16MHz quarz.

Die lowlevel routine ist exakt die gleiche wie beim master brick.

Das Problem besteht bisher weiterhin, konnte ich doch durch den Wert

SPI_DELAY_BETWEEN_TRANSFER = 1000 im Master Brick

beheben. Allerdings ist die einstellung nicht optimal. So braucht natürlich die Kommunikation deutlich länger als zuvor. :(

 

Geschrieben

Schwer zu sagen was da passiert. Hast du einen Logic Analyzer da? Mein vorgehen hier wäre jetzt die SPI-Kommunikation einmal komplett aufzunehmen, um zu gucken wo genau etwas schief geht.

 

Optimalerweise würdest du für das Debuggen noch ein paar zusätzliche GPIO Pinne nutzen um anzuzeigen wann CAN/LIN-Bus Kommunikation beginnt/endet etc. Damit kannst du dann gucken ob es dort Überschneidungen gibt o.ä. die zu Problemen führen!

Geschrieben

Hallo,

so. Also das Problem besteht weiterhin.

Ich hab mal die Bilder vom LogicAnalyzer angefügt.

Beim Wert SPI_DELAY_BETWEEN_TRANSFER = 0 funktioniert es nicht.

Beim Wert 500 sieht man das der Slave das CRC Byte zu spät überträgt.

Beim Wert 1000 funktioniert es. Und der Slave sendet auch die Ack.

 

- Die Clock habe ich mittlerweile Überprüft.

- Problem beim Nutzen eines GPIOs ist, das diese sehr langsam an aus geschaltet werden.

- Des weiteren habe ich im Master Brick eine Funktion implementiert die mir die anzahl der Übertragungen anzeigt. dabei auch die fehlerhaften, leeren, und erfolgreichen. Dabei ist aufgefallen, das bei meinem (mit einstellung 1000 s.o.) sowie auch bei den anderen Bricks zu beginn 11 Fehl übertragungen passieren.?!

 

Gruß

David

1440865163_bertragung_0.thumb.PNG.b4d6753b6140329f72d863aa5c71be48.PNG

970148291_bertragung_500.thumb.PNG.0159ce6e2992c4a975cc98d098aceb63.PNG

1292213680_bertragung_1000.thumb.PNG.c9ec07d0e4656276bb54de776b23b8e2.PNG

Geschrieben

- Des weiteren habe ich im Master Brick eine Funktion implementiert die mir die anzahl der Übertragungen anzeigt. dabei auch die fehlerhaften, leeren, und erfolgreichen. Dabei ist aufgefallen, das bei meinem (mit einstellung 1000 s.o.) sowie auch bei den anderen Bricks zu beginn 11 Fehl übertragungen passieren.?!

 

Du meinst ganz am Anfang beim starten? Das ist OK. Damit überprüfen wir ob und wie viele Stack-Teilnehmer vorhanden sind.

 

Die Frage bleibt im Prinzip: Macht dein CAN/LIN-Bus Code irgendwas, was den Slave davon abhält rechtzeitig zu antworten? Funkt ein Interrupt dazwischen o.ä.? Wenn der SPI-Slave Interrupt getriggert wird und einfach durchläuft ohne unterbrochen zu werden und du verwendest unseren Code für die SPI Slave Kommunikation muss es funktionieren. Ich sehe kein Grund warum das nicht gehen sollte :).

Geschrieben

Hallo,

Nein eigentlich sollte der Controller nichts machen.

durch __disable_irq(); und__enable_irq(); sollten auch in der slave routine alle interrupts ausgeschaltet werden oder?!

vielen dank schonmal für die rückmeldung!

Geschrieben

Also der Code für die SPI Slave Kommunikation ist unmodifiziert? Dann verstehe ich das nicht, warum sollte sich der Code auf einmal anders verhalten :o.

 

Die __disable_irq(); und__enable_irq(); schalten Interrupts aus/an, das ist richtig.

Geschrieben

Ja. Die Interruptroutine habe ich auch nicht verändert das finde ich auch komisch.. naja erstmal funktioniert es eingeschränkt.

Andere Frage, gleicher Topic:

Ich habe wahrscheinlich den Bootloader ereased. Wie bekomme ich den nun wieder geflasht? :)

Per JTAG komme ich auf den SAM3S allerdings per USB wird er nicht erkannt.

Gibts den Bootloader zum download?

Gruß

 

Geschrieben

Der Bootloader steht bei den sam3s Mikrocontroller in einem "read-only" Bereich, den kann man nicht löschen. Er ist also definitiv noch da. Hast du schon versucht beim anstecken des USB Steckers den Erase Knopf zu drücken (um sicher zu gehen das er auch wirklich im Bootloader ist)?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...