IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Le pico2 et l'entrée "debug", peut-on directement flasher un elf par cette entrée ?


Sujet :

Raspberry Pi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut Le pico2 et l'entrée "debug", peut-on directement flasher un elf par cette entrée ?
    Bonjour,
    j'ai un pi pico1 avec un rp2040, je lui ai déposer l'uf2 de la sonde prob
    https://github.com/raspberrypi/debug...ugprobe-v2.0.1

    j'ai un pi pico2 avec un rp2350, je compilé avec vscode ce bout de code pour faire un test:


    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    #include <stdio.h>
    #include "pico/stdlib.h"
    #include "hardware/uart.h"
    #include "hardware/gpio.h"
     
    // UART defines
    // By default the stdout UART is `uart0`, so we will use the second one
    #define UART_ID uart1
    #define BAUD_RATE 115200
     
    // Use pins 4 and 5 for UART1
    // Pins can be changed, see the GPIO function select table in the datasheet for information on GPIO assignments
    #define UART_TX_PIN 4
    #define UART_RX_PIN 5
     
    #define FIRST_GPIO 2
    #define BUTTON_GPIO (FIRST_GPIO + 7)
     
    // This array converts a number 0-9 to a bit pattern to send to the GPIOs
    int bits[10] = {
        0x3f, // 0
        0x06, // 1
        0x5b, // 2
        0x4f, // 3
        0x66, // 4
        0x6d, // 5
        0x7d, // 6
        0x07, // 7
        0x7f, // 8
        0x67  // 9
    };
     
    /// \tag::hello_gpio[]
    int main()
    {
        stdio_init_all();
        printf("Hello, 7segment - press button to count down!\n");
     
        // We could use gpio_set_dir_out_masked() here
        for (int gpio = FIRST_GPIO; gpio < FIRST_GPIO + 7; gpio++)
        {
            gpio_init(gpio);
            gpio_set_dir(gpio, GPIO_OUT);
            // Our bitmap above has a bit set where we need an LED on, BUT, we are pulling low to light
            // so invert our output
            gpio_set_outover(gpio, GPIO_OVERRIDE_INVERT);
        }
     
        gpio_init(BUTTON_GPIO);
        gpio_set_dir(BUTTON_GPIO, GPIO_IN);
        // We are using the button to pull down to 0v when pressed, so ensure that when
        // unpressed, it uses internal pull ups. Otherwise when unpressed, the input will
        // be floating.
        gpio_pull_up(BUTTON_GPIO);
     
        int val = 0;
        while (true)
        {
            // Count upwards or downwards depending on button input
            // We are pulling down on switch active, so invert the get to make
            // a press count downwards
            if (!gpio_get(BUTTON_GPIO))
            {
                if (val == 9)
                {
                    val = 0;
                }
                else
                {
                    val++;
                }
            }
            else if (val == 0)
            {
                val = 9;
            }
            else
            {
                val--;
            }
     
            // We are starting with GPIO 2, our bitmap starts at bit 0 so shift to start at 2.
            int32_t mask = bits[val] << FIRST_GPIO;
     
            // Set all our GPIOs in one go!
            // If something else is using GPIO, we might want to use gpio_put_masked()
            gpio_set_mask(mask);
            sleep_ms(250);
            gpio_clr_mask(mask);
     
            uart_init(UART_ID, BAUD_RATE);
            // Set the TX and RX pins by using the function select on the GPIO
            // Set datasheet for more information on function select
            gpio_set_function(UART_TX_PIN, GPIO_FUNC_UART);
            gpio_set_function(UART_RX_PIN, GPIO_FUNC_UART);
     
            // Use some the various UART functions to send out data
            // In a default system, printf will also output via the default UART
     
            // Send out a string, with CR/LF conversions
            uart_puts(UART_ID, "*** UART!\n");
            printf("===Hello, world!\n");
            sleep_ms(2000);
        }
     
        // For more examples of UART use see https://github.com/raspberrypi/pico-examples/tree/master/uart
    }
    /// \end::hello_gpio[]

    j'ai soudé entre les carte ce branchement comme sur l'image:


    par contre à gauche c'est un pico1 et à droite le pico2

    dans vscode il y a plugin openocd que j'ai installé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ---- Opened the serial port COM7 ----
    14:50:29:078 -> ===Hello, world!
    14:50:31:329 -> ===Hello, world!
    avec vscode sous windows j'ai regarder le serial monitor en COM7
    on voit que toutes les 2 secondes j'ai le message hello, par contre j'ai déplacer le cable 1 et 2 fil jaune et orange en
    4 et 5 pour essayer d'obtenir le message dans serial monitor de vscode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            // Send out a string, with CR/LF conversions
            uart_puts(UART_ID, "*** UART!\n");
    [/CODE]

    les pin ayant été configurer en 4 et 5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define UART_TX_PIN 4
    #define UART_RX_PIN 5
    Par contre est t'il normal que si je débranche la 1 et la 2 du pico2 le message hello ne s'affiche plus ?
    les broche débug branché sur le pico1 ne permet pas de récupérer les messages qu'il va envoyé en sortie du pico 2 ?

    Sinon une autre question avec vscode seul et les plugins installer openocd est t'il possible de flasher mon programme du pico directement sans passer par la case "débrancher le port usb" et appuyer sur le bouton shell ?

    ou pour pouvoir le faire le plugin openocd ne serte pas dans vscode et qu'il faut passer par la case ligne de commande ? ou outil extérieur

    merci d'avance de vos réponses.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Salut,

    Citation Envoyé par keokaz Voir le message
    Par contre est t'il normal que si je débranche la 1 et la 2 du pico2 le message hello ne s'affiche plus ?
    Oui, c'est normal. La sortie standard (par printf()) est dirigée vers UART0 TX (broche 1 du pico 2) que tu as câblé à UART1 RX de ta sonde (la pico 1). La sonde se charge de faire remonter par le port USB.

    Citation Envoyé par keokaz Voir le message
    les broche débug branché sur le pico1 ne permet pas de récupérer les messages qu'il va envoyé en sortie du pico 2 ?
    Ce n'est pas un port UART, mais un port SWD (Serial Wire Debug) donc un autre protocole.

    Citation Envoyé par keokaz Voir le message
    Sinon une autre question avec vscode seul et les plugins installer openocd est t'il possible de flasher mon programme du pico directement sans passer par la case "débrancher le port usb" et appuyer sur le bouton shell ?
    C'est même le but.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    merci de la précision, j'avais une penser trop simple que mon pico1 récupérer toutes les informations de ce qu'il se passe sur tout les ports et le transmet via son USB.
    pour essayer de raccourcir peut t'on changer de port sur la transmission du "hello word" ou que c'est prédéfinie par défaut en gpio0 et gpio1?
    le protocole Serial Wire Debug est t'il tous différent entre un rp2040/rp2530 , un arduino et un nucléo par exemple ?
    ce "protocole" est juste la pour consulter les registres , et ecrire le programme dans l'eeprom de la puce et rien d'autre ?
    si par exemple j'ai un .elf, je doit l'écrire dans la "sonde" en mémoire du pico1, qui li va se charger de le transférer via son port debut pour flasher le .elf sur le pico2 ?

    j'ai vu rapidement que le .elf c'est pour du linux et l'uf2 c'est pour du windows ?
    si je n'avais pas de port usb mais un pc doté d'un port rs232 je pourrais directement flasher mon pico à travers ce port debug(et ne pas avoir le pico1 qui serais là que pour le port USB), mais il faut obligatoirement la librairie openocd ?
    Il faut dire que c'est encore obscure, j'en suis encore à l'ancienne méthode retirer des eeproms (mais la on peut pas ..)et flasher avec un programmateur (openocd serais ce programmateur mais à la place d'être physique c'est une librairie mais en plus il serait la aussi de compiler du C, python .... en table d'adresse ).

    dans vscode quand je demande openocd il propose d'installer un plugin dont le logo de texas instrument,
    mais la je sèche un peut pour trouver comment l'utiliser ... et je vois openocd rapsberry pi mais pour mac et je n'ai de MAC ..

    Nom : texas_instruement.png
Affichages : 87
Taille : 51,9 Ko

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    Je viens de comprendre que en appuyant sur le bouton run and débug de visualstudio(ce que je ne faisais jamais),
    vscode était capable directement de flasher le programme via le pico1 et d'exécuter le programme sur le pico2.

    Au début je pensais que j'était obligé d'appuyer sur le bootsell ensuite de déposer le uf2.
    En fait cela permet de ne pas abimer et appuyer X fois le boutsell (qui me ruine mes doigts et à chaque modification c'est fastidieux)

    du coups plus besoin de déposer un seul fichier, c'est tout automatique sans avoir à lancer une ligne de commande
    pour transférer dans le pico2.

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Hola, trop de questions, je ne répondrai pas à tout ce soir...

    Citation Envoyé par keokaz Voir le message
    merci de la précision, j'avais une penser trop simple que mon pico1 récupérer toutes les informations de ce qu'il se passe sur tout les ports et le transmet via son USB.
    pour essayer de raccourcir peut t'on changer de port sur la transmission du "hello word" ou que c'est prédéfinie par défaut en gpio0 et gpio1
    La sortie standard stdout est en effet dirigée vers UART0 par défaut (broche 1).
    On peut la diriger vers l'autre port UART1 si on veut (même si je ne vois pas l'intérêt), voir pico_stdio_uart, Support for stdin/stdout using UART.


    Citation Envoyé par keokaz Voir le message
    le protocole Serial Wire Debug est t'il tous différent entre un rp2040/rp2530 , un arduino et un nucléo par exemple ?
    ce "protocole" est juste la pour consulter les registres , et ecrire le programme dans l'eeprom de la puce et rien d'autre ?
    Ce n'est pas une eeprom. Et oui, le port SWD est utilisé pour flasher le firmware et déboguer (exécution pas à pas, accès aux registres et à la mémoire). C'est déjà pas mal.


    Citation Envoyé par keokaz Voir le message
    si par exemple j'ai un .elf, je doit l'écrire dans la "sonde" en mémoire du pico1, qui li va se charger de le transférer via son port debut pour flasher le .elf sur le pico2 ?
    C'est ça.

    Citation Envoyé par keokaz Voir le message
    j'ai vu rapidement que le .elf c'est pour du linux et l'uf2 c'est pour du windows ?
    non, uf2 c'est pour flasher facilement le programme par l'interface USB. Cela fonctionne pour Windows, Linux, mac....
    Le .elf contient le programme mais aussi des infos utilisées pour le débogage, c'est le format utilisé quand tu passes par la sonde.

    Concernant vscode et openocd, soit tu passes par l'extension officielle pour vscode et ça marche tout seul, soit tu fais en ligne de commande.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/01/2009, 12h32
  2. Réponses: 11
    Dernier message: 12/12/2006, 15h47
  3. Comment peut on attaquer une BD MYSQL par un fichier C
    Par adilovic2000 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 11/05/2006, 11h04
  4. Quel SGBD peut gérer plus de 2000 champs par table?
    Par colorid dans le forum Bases de données
    Réponses: 9
    Dernier message: 23/11/2005, 20h58
  5. DB2 Peut-on remplacer le FETCH FIRST par plus performant?
    Par souellet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/09/2005, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo