Blue Flower

STM32-CAN

  • STM32-3x-CAN-FD

    Tripple CAN-FD USB Dongle

    Realsierung mit dem STM32G474-RB Prozessor.

    .... in kürze ist hier mehr zu finden Sobald die Prototypen überprüft wurden.

     

    Vorschau:


     

     

    Bestückungsplan:

    STM32-CAN-FD  Bestückungsplan
    Abb.1.3 - Bestückungsplan

     Prototyp V1.0

    Dieser Prototyp funktioniert auch ohne bestückten Quarz, d.h. der interne DFU-USB Bootloader und CAN-FD1 hatten auf Anhieb funktioniert. Ein kompletter Funktionstest, bei dem alle Hardware Module getestet werden, steht noch aus. Ebenso ist ja der Einsatz eines 24 MHz Quarz geplant. Für diesen Kurztest wurde der interne HSI verwendet und mittels PLL der System-Takt auf 160 MHz eingestellt. Die 160 MHz wurden gewählt, da dieser günstiger ist, um die üblichen CAN-Bus Baudraten einzustellen.

    Hinweis: Der interne USB-Bootloader aktiviert den Ausgang PA6  (blaue LED). Dies hängt wohl damit zusammen, dass der interne SPI-Bootloader den PA6 als Ausgang konfiguriert. Mich wundert es etwas, dass diese Konfiguration nicht rückgängig gemacht wird, wenn der USB-Bootoader erkannt wird. Ist aber praktisch, da man jetzt automatisch eine Statusanzeige für den internen USB-Bootloader hat :-).  Und hier noch das Foto von meinem ersten Prototyp:

    STM32-CAN-FD Prototyp

    Abb.1.4 - Prototyp V1.0

    Funktionstests

    Die Tests wurden mit einer Testsoftware, die mit dem STM32CubeMX für den MDK-Keil erstellt wurde, durchgeführt.
    Als 2. CAN-Device kam ein Raspberry Pi mit meinem Pi-CAN FD - Duo - HAT-Modul zum Einsatz bei dem der CAN0 mit: 

    sudo ip link set can0 up type can bitrate 1000000   dbitrate 2000000 restart-ms 1000 berr-reporting on fd on

    konfiguriert wurde.

    Hier sind meine Testergebnisse:

    • SWD Debug-Schnittstelle funktioniert.
    • USART2 Debug Schnittstelle  inkl. (Retargeting) funktioniert
    • USB-DFU Bootloader funktioniert
    • Die Logik PB8-Boot0 und Jumper J1 muss nochmal überdacht, bzw. überarbeitet werden. Macht diese hier überhaupt Sinn wegen dem CAN-FD1 Treiber?
    • CAN-FD1, CAN-FD2 und CAF-FD3  Rx und Tx mit den Baudraten:
      • nominal 1 MBit/s
      • Datenrate 2 MBit/s 
        getestet
    • Ansteuerung der LEDs in Ordnung (Vorwiderstände wurden angepasst, s. V1.1)
      Hinweis: PA6 (blaue LED) wird vom interne DFU-USB Bootloader ebenfalls angesteuert.
    • to dos:
      • weitere CAN-FD Baudraten testen
      • last, but not least,  die Firmware schreiben :-)



    Für den ersten Test bei der alle 3 FDCANs verwendet werden, habe ich über die Debug-USART Schnittstelle die empfangenen Botschaften ausgegeben. Dabei wird von FDCAN2 die 0x111 Botschaft gesendet, die von FDCAN3 empfangen wird.  Und  der FDCAN1 empfängt die Botschaften die mein Raspberry Pi sendet:

    #####################################
    # Startup:
    # HW: STM32-CANFD    
    # SW: SW 1.0.0  (23:23:28 - Feb 19 2021)
    #######################
    # STM32G4:
    # STM32 Device-ID: 0469  Revision: 2001
    # Flash-Size: 128 kBytes
    # Package = 00 (LQFP64)
    # SN: 4500264752501820393855
    #######################
    
    
    [FDCAN3]         111  (BRS)  16   50 34 03 00 45 46 47 48 6E 65 77 4D 65 73 73 61
                                     
    [FDCAN1]         7AF  (___)  64   60 1A 24 39 91 2B 11 77 60 1A 24 39 91 2B 11 77
                                      60 1A 24 39 91 2B 11 77 60 1A 24 39 91 2B 11 77
                                      60 1A 24 39 91 2B 11 77 60 1A 24 39 91 2B 11 77
                                      60 1A 24 39 91 2B 11 77 60 1A 24 39 91 2B 11 77
                                     
    [FDCAN1]           C  (___)   5   BA E0 7C 56 10
    [FDCAN1]         6FC  (___)   8   AA 11 79 04 85 B7 7F 2B
    [FDCAN1]         6AD  (BRS)   2   A3 9B
    [FDCAN3]         111  (BRS)  16   38 38 03 00 45 46 47 48 6E 65 77 4D 65 73 73 61
                                     
    [FDCAN1]         47B  (___)   0  
    [FDCAN1]   x12F2D3A3  (___)  20   61 C8 9F 53 40 C3 33 77 61 C8 9F 53 40 C3 33 77
                                      61 C8 9F 53
    [FDCAN1]   x1192058C  (___)   0  
    [FDCAN1]   x0057A18E  (___)   8   06 FD BF 1F 48 82 D4 36
    [FDCAN1]         4E2  (___)   4   B8 7B F1 4A
    [FDCAN3]         111  (BRS)  16   20 3C 03 00 45 46 47 48 6E 65 77 4D 65 73 73 61
                                     
    [FDCAN1]          26  (___)   1   86
    [FDCAN1]         4DF  (___)   4   40 52 B6 7A
    [FDCAN1]   x19FFBCB3  (___)   8   D1 7F 14 0E 15 85 9F 4D
    [FDCAN1]         3DE  (___)   1   2A
    [FDCAN1]   x084209AB  (___)   8   85 1A 5A 45 B1 06 02 68
    [FDCAN3]         111  (BRS)  16   08 40 03 00 45 46 47 48 6E 65 77 4D 65 73 73 61
                                     
    [FDCAN1]         28E  (___)   3   E5 05 05
    [FDCAN1]   x06F173B9  (BRS)  24   88 87 01 21 40 01 BD 27 88 87 01 21 40 01 BD 27
                                      88 87 01 21 40 01 BD 27
    [FDCAN1]   x16C7A3C8  (___)   8   79 82 29 7A 09 F6 7D 31
    [FDCAN1]   x118C8C6E  (___)   8   6F AC E0 2D 3F 0C A1 3F
    [FDCAN1]   x010E04AA  (___)   8   72 C2 4E 38 D4 1F 3D 53
    [FDCAN3]         111  (BRS)  16   F0 43 03 00 45 46 47 48 6E 65 77 4D 65 73 73 61
                                     
    [FDCAN1]   x02366CFF  (BRS)   0  
    [FDCAN3]         111  (BRS)  16   D8 47 03 00 45 46 47 48 6E 65 77 4D 65 73 73 61
                                     
    [FDCAN3]         111  (BRS)  16   C0 4B 03 00 45 46 47 48 6E 65 77 4D 65 73 73 61
                                     
    [FDCAN3]         111  (BRS)  16   A8 4F 03 00 45 46 47 48 6E 65 77 4D 65 73 73 61
    

    Das ganze schaut mal sehr gut aus, somit müsste das mit dem CAN fürs Senden / Empfangen in Ordnung sein.
    Zumal keine Botschaften verloren gehen.

     

    Und hier noch ein kurzes Video von einem weiteren Test:

    (https://youtu.be/Ao3T23NJt5g )


    Hier noch das CubeMX Konfigurationsfile für den Protoypen. Das Keil-Projekt wurde noch nicht auf Github veröffentlicht (to do).
    FD_Test.ioc - Variante ohne USB und externen 24 MHz Quarz

    CubeMX Pin Konfiguration 3x CAN-FD
    Abb.1.5 CubeMX-Konfiguration Pins für 3x CAN-FD ohne USB und externen Quarz

     

    Die geplante Konfiguration für alle 3 CAN-FDs, USB und Quarz sollte dann so aussehen:

    CubeMX Pins für 3xCAN-FD
    Abb.1.6 CubeMX Pins für 3x CAN-FD, USB und Quarz

    Software

    Wie oben schon erwähnt, wurde die Testsoftware mithilfe von STM32CubeMX  konfiguriert und als Keil-Projekt exportiert (s. o.  FD_Test.ioc )

    CAN-FD Baudraten

    Um günstige Werte für die CAN-Baudraten Berechnungen zu erhalten wurde der Systemtakt des Prozessors auf 160 MHz festgelegt (168 MHz wären auch gut :-) ).

    Die Konfiguration im CubeMX erfolgt dann hier:

     

    CubeMX - CAN-FD Baudraten Konfiguration
    Abb. 1.7 CubeMX CAN FD1 Baudraten Konfiguration

    Obiges stellt die Baudrate auf  1 MBit/s (nominal) und 8 MBit/s Datenbaudrate ein. Der jeweilige Sampling-Point liegt bei 75%

    Mithilfe meines Excels-Sheets habe ich mal folgende Einstellungen für die diversen Baudraten ermittelt und mit einem  PCAN-FD Interface getestet. Diese Werte gelten für einen Systemtakt von 160 MHz 
    Ebenso wurden die Werte für einen Sampling-Point von 75% festgelegt:

    • 250 kBit/s - Normale Baudrate (Es kommt zu Errors in Pcan-View)
      • Init.NominalPrescaler = 8;
      • Init.NominalSyncJumpWidth = 1;
      • Init.NominalTimeSeg1 = 59;
      • Init.NominalTimeSeg2 = 20;
    • 500 kBit/s - Normale Baudrate
      • Init.NominalPrescaler = 4;
      • Init.NominalSyncJumpWidth = 1;
      • Init.NominalTimeSeg1 = 59;
      • Init.NominalTimeSeg2 = 20;
    • 1 MBit - Normale Baudrate
      • Init.NominalPrescaler = 4;
      • Init.NominalSyncJumpWidth = 1;
      • Init.NominalTimeSeg1 = 29;
      • Init.NominalTimeSeg2 = 10;
    • 2 MBit/s - Datenrate
      • Init.DataPrescaler = 4;
      • Init.DataSyncJumpWidth = 1;
      • Init.DataTimeSeg1 = 14;
      • Init.DataTimeSeg2 = 5;
    • 4 MBit/s
      • Init.DataPrescaler = 1;
      • Init.DataSyncJumpWidth = 1;
      • Init.DataTimeSeg1 = 29;
      • Init.DataTimeSeg2 = 10;
    • 8 MBit/s - (vereinzelte Stuffbit Fehler in PCAN-View)
      • Init.DataPrescaler = 1;
      • Init.DataSyncJumpWidth = 1;
      • Init.DataTimeSeg1 = 14;
      • Init.DataTimeSeg2 = 5;

    Da es jeweils nur ein kurzer Test war, sind diese Werte erstmal unter Vorbehalt zu sehen. Weitere Tests werden noch folgen.