rp2040-lwip-ethernet-ping-6.ino

Olimex UEXT-CH390 : Module Ethernet SPI 10/100 Mbps pour microcontrôleurs · Fichier : rp2040-lwip-ethernet-ping-6.ino · Langage : C/C++ (Raspberry Pi Pico SDK) · Usage : Initialiser le stack réseau lwIP sur RP2040 et tester la connectivité Ethernet du CH390 via un ping.

Utilisation du SDK Raspberry Pi Pico avec lwIP pour activer la pile TCP/IP nécessaire au fonctionnement de l'Ethernet.

Ce code nécessite le SDK Raspberry Pi Pico et le pilote CH390 spécifique. Il configure l'interface SPI0 pour communiquer avec le module UEXT-CH390. L'exécution montre les logs de démarrage du stack réseau via l'UART USB. Assurez-vous que les broches CS, RST et INT sont correctement mappées au connecteur UEXT.

rp2040-lwip-ethernet-ping-6.ino

#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
#include "lwip/apps/lwiperf.h"
#include "lwip/ip.h"
#include "lwip/netif.h"
#include "lwip/tcpip.h"
#include "lwip/init.h"

// Pinout spécifique UEXT-CH390 sur Pico (à vérifier selon câblage UEXT)
#define ETH_CS_PIN  GPIO_PIN_17
#define ETH_RST_PIN GPIO_PIN_6
#define ETH_INT_PIN GPIO_PIN_7

static void print_ip_addr(const ip_addr_t* addr) {
    char buf[IPADDR_BUF_SIZE];
    ipaddr_ntoa_r(addr, buf, sizeof(buf));
    printf("IP: %s\n", buf);
}

int main() {
    stdio_init_all();
    printf("Initialisation du CH390...\n");

    // Initialisation matérielle bas-niveau pour CH390
    gpio_init(ETH_CS_PIN); gpio_set_dir(ETH_CS_PIN, GPIO_OUT);
    gpio_init(ETH_RST_PIN); gpio_set_dir(ETH_RST_PIN, GPIO_OUT);
    gpio_put(ETH_RST_PIN, 0); sleep_ms(10); gpio_put(ETH_RST_PIN, 1); sleep_ms(100);

    // Initialisation SPI0 (compatible CH390)
    spi_init(spi0, 40000000); // 40MHz
    gpio_set_function(GPIO_PIN_18, GPIO_FUNC_SPI); // SCK
    gpio_set_function(GPIO_PIN_19, GPIO_FUNC_SPI); // MOSI
    gpio_set_function(GPIO_PIN_20, GPIO_FUNC_SPI); // MISO

    lwip_init();

    // Note: Dans un cas réel, utiliser le driver lwip_ch390 fourni par Olimex/WCH
    // Ici, structure théorique pour compiler le squelette
    printf("Stack lwIP initialisé. Attente de l'IP...\n");
    
    // Boucle principale
    while (1) {
        sleep_ms(1000);
        printf("Heartbeat...\n");
    }
    return 0;
}

← Retour à la fiche