SD-Card Support mit TMC2130 Treibern

Eine Frage, die mir immer wieder gestellt wurde, seitdem es dieses Blog gibt, ist, ob die von mir angebotene Firmware denn auch das Drucken von der SD-Karte unterstützt. Bislang musste ich das verneinen. Aber heute zeige ich dir, wie du den SD-Card Slot wieder aktivieren kannst.

Was ist das Problem mit TMC2130 Treibern und dem SD-Card Slot?

Die 2130 Treiber von Trinamic nutzen das sogenannte Serial Peripheral Interface, auch bekannt als SPI-Bus, um mit dem Board des Druckers zu kommunizieren und bieten dadurch viele interessante Funktionen, die andere Treiber nicht haben. Sie sind aber bei Druckern wie dem Tevo Tornado, die ein RepRap Discount Full Graphic Display nutzen nicht die einzige Komponente, die auf diesen Bus setzt. Und genau da liegt unser Problem.

Der SPI Bus basiert im wesentlichen auf drei Leitungen: MISO (bzw. SDI), MOSI (bzw. SDO) und CLK (oder auch SCK), die von allen Teilnehmern im Bus geteilt werden. Damit ein einzelner Teilnehmer angesprochen werden kann, gibt es noch ein Chip-Select, je Teilnehmer. Als ich meine Anleitung für die Umrüstung auf TMC2130 Treiber geschrieben habe, gab es nur wenige Dokumentationen im Netz.

Anhand dessen, was ich so lesen konnte und durch das Studium der verfügbaren Pins auf dem MKS Gen L Mainboard, kam ich zum Schluss, dass die Pins D50, D51 und D52 wohl am besten für den Anschluss geeignet sind. Immerhin sind sie auf dem Schaltplan auch bereits als MISO, MOSI und CLK gekennzeichnet.

Wie sich herausstellen sollte, sind diese Pins aber, anders als die übrigen Anschlüsse, nicht nur einmal auf dem Board vorhanden. Wir nutzen die Pins an AUX-3. Sie sind aber auch am EXP-2 Port vorhanden. Dort wird das Display-Modul samt Cardreader angeschlossen. Und auch der Cardreader sendet und empfängt Daten über den SPI Bus. Die Treiber und das SD-Karten Modul senden nun beide über den gleichen Bus ihre Daten, ohne das irgendwer für Ordnung sorgt. Die Folge: Funktionen der 2130 Treiber tun nicht mehr, was sie sollen und die SD-Karte wird nicht erkannt.

Lese auch:  TMC2130 Treiber vor Schäden schützen

Wie kann ich trotzdem Treiber und Karte nutzen?

Der einfachste Weg, um dieses Problem zu beheben, ist die Treiber vom hardwareseitig festgelegten SPI Bus zu nehmen und einen zweiten, softwareseitigen aufzumachen. Dazu lassen sich beliebige freie Pins auf dem Board verwenden. Durch eine kleine Anpassung in der Firmware weiß auch diese Bescheid, wo sie die Treiber findet.

An den folgenden Stellen müsst ihr Anpassungen in eurer Firmware vornehmen (gezeigt werden nur die geänderten Stellen, die Auszüge basieren auf Marlin Version 1.1.9):

configuration.h

/**
 * SD CARD
 *
 * SD Card support is disabled by default. If your controller has an SD slot,
 * you must uncomment the following option or it won't work.
 *
 */
#define SDSUPPORT

configuration_adv.h

  /**
   * Use software SPI for TMC2130.
   * The default SW SPI pins are defined the respective pins files,
   * but you can override or define them here.
   */
  #define TMC_USE_SW_SPI
  #define TMC_SW_MOSI       65
  #define TMC_SW_MISO       64
  #define TMC_SW_SCK        66

Hardware

Wie du wahrscheinlich schon an der Firmware Anpassung erkannt hast, müssen natürlich auch auf dem Board die drei entsprechenden Leitungen umgesteckt werden:

SDO von Pin 50 auf Pin 65
SDI von Pin 51 auf Pin 64
SCK von Pin 52 auf Pin 66

Alle drei Pins finden sich auf dem AUX-2 Header, wo bereits alle unsere CS-Leitungen angeschlossen sind. Damit haben wir nun auch alle Kabel der TMC2130 Treiber ordentlich auf einem einzigen Anschluss.

Andere Pins als hier genannt wären natürlich auch möglich. Es sollte jedoch immer darauf geachtet werden, ob diese nicht schon anderweitig vorbelegt sind. Da bei mir auch noch eine LED Beleuchtung angeschlossen ist, waren diese, bisher ungenutzten Pins aber die logischste Entscheidung.

Lese auch:  Marlin 1.1.8 SensorlessHoming Bug

2 Gedanken zu “SD-Card Support mit TMC2130 Treibern”

  1. Grüß Gott.
    Ich verstehe irgendwie den Aufwand nicht, einen Software SPI Port aufzumachen, der wesentlich langsamer ist als ein Hardware SPI Bus.
    Mit meinem MKS Gen L 1.0, betreibe ich ein MKS_MINI_12864 LCD mit SD Card Reader und 2130er im SPI Mode unter Marlin 1.1.9.
    Warum funktioniert es bei mir ohne Störungen? Es hat mich zwar 3 Tage Arbeit gekostet, es ans laufen zu bringen, da meines Erachtens an AUX2 zwei Pins laut meines Beschaltungsplans falsch deklariert sind… Aber am Ende läufts einwandfrei. Falls Du meine Config austesten möchtest, sende ich Sie dir gerne zu. Evtl kannst Du mir dann auch bestätigen ob der per Google-Suche findbare Plan tatsächlich 2 Fehler enthält. Vllt schreibe ich mir auch mal ein kurzes Blink Testskript um zu testen ob die Pin Nummern wirklich falsch sind. Ich bin meistens im Discord in realtime erreichbar. Ansonsten ist meine email hinterlegt.
    Gruß,
    Dirk
    1. Hi Dirk,

      können wir gern mal genauer erörtern. Klar ist es nicht die ideale Lösung, zwei SPI-Busse aufzumachen. Alles über einen wäre vermutlich besser, aber auf der anderen Seite kommt es bei der Kommunikation mit den Treibern wohl auch nicht so sehr auf Geschwindigkeit an, wie beim Lesen der SD-Karte. Ich hatte, wie geschrieben, bisher auch nicht die direkte Notwendigkeit für mich, den Reader überhaupt zu verwenden, aber weil immer wieder gefragt wurde und in einem Kommentar mal dieser Weg angeregt wurde, habe ich das so versucht und es war erfolgreich.

      Du hast, wenn ich das richtig sehe, aber auch ein anderes Display, vielleicht liegt es ja auch daran, dass das bei dir problemlos klappt? Wo hast du das Display denn auf dem Board angeschlossen? Beim originalen Tevo Display werden EXP1 und EXP2 belegt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.