- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Bootloader via CAN-Bus

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.09.2006
    Beiträge
    5

    Bootloader via CAN-Bus

    Anzeige

    Praxistest und DIY Projekte
    Hallo Alle zusammen,

    ich habe da so ein kleines Problem. Das da lautet: Wie kann man einen Atmega-Controller über CAN-Bus Bootloaden? Aufgabe ist das es mit einem externen CAN-Controller und Transceiver zu verwirklichen. Hat da jemand schon mal was gemacht damit?

    Gruss

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.09.2005
    Beiträge
    225
    Hat sich hier in der Zwischenzeit schon was ergeben? Wäre auch sehr daran interessiert. Vielleicht kann man da auch zusammenarbeiten.

    Gruß Philipp

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.09.2006
    Beiträge
    5
    Danke, für die Antwort. Ich habe es mit einem Atmega2560 und einem SJA1000 CAN-Controller ausprobiert. Der CAN-Transceiver ist der PCA251T.

    Das Problem ist die Ansteuerung des SJA1000. Da dies mit dem Daten/Adress-Bus ausgeführt wird, sehe ich keine Möglichkeit einen Bootloader in dem Atmega zu implementieren. Der geht ja nur seriell zu programmieren. Es sei den Du oder jemand anderes sieht da eine andere Möglichkeit dies machen zu können.

    Eine alternative ist der MCP2515 von Microchip. Dieser CAN-Controller kommuniziert mit dem Atmega seriell und da ist es möglich einen CAN-Bootloader zu verwenden.
    So sehe ich das ganze momentan.

    Danke gruß

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.09.2005
    Beiträge
    225
    Möglich sollte es mit beiden sein, einen Bootloader wirst du aber in beiden Fällen schreiben müssen. SPI ist zwar seriell, das hat aber trotzdem nichts mit dem UART zu tun, für den die meiste Bootloader ausgelegt sind.

    Ich benutze den MCP2515. Wie hattest du dir das Boot Protokoll über den CAN Bus denn generell so vorgestellt?

    Gruß Philipp

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    01.09.2006
    Beiträge
    5
    Nun es gibt ja dieses Tool von Atmel Flip mit dem man den Chip über CAN-Bus programmieren kann. Aber so geht es nun mal nicht, weil dieses Programm nur Controller mit integriertem CAN-Controller unterstützt. Toll wäre es das ganze direkt im Bascom auszuführen, aber dat wird nix denke ich.

    Man müsste die Initialisierung des SJA1000 mit einbringen in den Bootloader und die Standart Empfangsroutinen bzw. Senderoutinen so umschreiben das ein Hex-file gut empfangen und in die Seiten, Register usw. des Controllers schreiben zu können.
    Darüber müsste man ein Tool schreiben das z.B. über einem USB To CAN Dongle das Hex-file schickt und in einem Netzwerk nur der CAN-Knoten angesprochen wird welcher gewünscht ist.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.09.2005
    Beiträge
    225
    Ja genau. Wobei ich ja eher für den MCP2515 Support wäre aber egal

    Meine Frage ist halt nur ob man das vernünftig klein bekommt, so dass es bei einem Mega8 noch Sinn macht. Ich möchte ja nicht die hälfte des Flash dafür verwenden um evtl. mal über CAN updaten zu können.

    Und dann muss man sich noch überlegen wie man die Übertragung usw macht. Eine bestimmte ID pro Knoten vielleicht mit der dann die Bytes übertragen werden? Die PC Software dazu sollte kein Problem sein. Man muss sich nur ein vernünftiges Protokoll überlegen.

    Ich dachte mir das ungefähr so:
    Eine Programmiernachricht wird an ein bestimmten Knoten geschickt:
    dieser geht dann in eine Endlosschleife und der Watchdog macht daraufhin einen Reset damit wird der Bootloader Code gestartet.
    Der Bootloader sendet nun per RTR eine Anfrage an den PC das er die neue Firmware empfangen möchte. Wenn der PC nicht innerhalb der Zeit X antwortet oder ein Paket schickt in dem steht, das er nix bekommt wird die normale Firmware gestartet.
    Ansonsten beginnt auf der ID mit der auch das RTR kam die Übertragung. So kann der CAN Bus normal weiterlaufen, während ein Knoten geflasht wird. Theoretisch könnte der PC sogar viele Knoten gleichzeitig flashen. Man könnte per RTR ja vorher noch ne Firmware Version abfragen und wenn der PC ne neuere hat kommt die automatisch drauf.
    Mit den RTR Paketen kann man sogar eine Flusskontrolle realisieren, so dass der Controller nur neue Daten bekommt, wenn er soweit ist.

    Gruß Philipp

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    01.09.2006
    Beiträge
    5
    Es geht bestimmt irgendwie. Aber ich denke für die Routinen zum Empfang und Senden der CAN-Frames benötigt man bestimmt einen groß Teil des Flash. Die ID kann man ja einfach mit der Idendifier Matrix festlegen und dem Akzeptanzfilter im CAN-Controller. Aber das ist ja jedem sein Ding wie er das macht, bzw. welche Art an CAN-Bus man benötigt.

    Du brauchst denke ich nicht unbedingt einen RTR Frame Senden. Meiner Meinung ist das nicht so elegant, weil man bei einer optimalen Busauslastung Nachrichten mit großem Datenpaket besser geeignet sind. Daher sollte der RTR Frame auch nicht zum Bootloaden verwendet werden.

    Die Idee mit dem Watchdog ist cool. Aber Du kannst auch einfach eine Nachricht vom PC senden und, so eine Art Reset Nachricht und den Controller damit Reseten.

    Also wie gehen wir weiter vor. Versuchen wir was auf die Beine zu stellen?

    Gruß

    Alex

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.09.2005
    Beiträge
    225
    Ich würde schon ein RTR benutzen, sonst ist es ja nicht möglich einen Flusskontrolle zu machen. Man kann ja ruhig immer alle 8 Byte senden, und wenn der Controller soweit ist fordert er die nächsten 8 Byte an. Das löschen der Page und das schreiben einer Page nimmt ja einige Zeit in Anspruch.

    Warum findest du es unelegant mit RTR? Ich finde einfach CAN Pakete drauf los schießen nicht so schön. Bei mir im Auto Frage ich auch immer an, wenn ich etwas wissen möchte. Wozu sollte zB permanent die Öltemp gesendet werden? Wenn ich das wissen möchte (also zB wenn es gerade auf dem Display angezeigt wird), dann sende ich zB alle 500ms eine RTR Nachricht um die Anzeige zu refreshen.
    Wie löst du soetwas denn?
    Vielleicht können wir nicht nur einen Bootloader machen, sondern generell uns ein wenig über Konzepte usw austuaschen das ist immer gut.

    Bascom kann ich leider nicht, habe diesen Thread über die Googel gefunden und erst später gesehen, das es Bascom ist. Aber einen kleinen Bootloader in Bascom zu schreiben ist wohl eh nicht realistisch. Ich würde ja C vorschlagen, weil der komplette CAN kram in ASM wohl relativ umfangreich wird, aber von mir aus halt auch ASM.

    GRuß Philipp

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    28.01.2005
    Beiträge
    10
    CAN Bus bootloader geht nur bei den MEGA Varianten mit CAN BUS drin.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.09.2005
    Beiträge
    225
    Nein, das ist falsch

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen