Jump to content

Recommended Posts

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

Link to comment
Share on other sites

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. :(

 

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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

Link to comment
Share on other sites

- 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 :).

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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ß

 

Link to comment
Share on other sites

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)?

Link to comment
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...