rp2040-lwip-ethernet-ping-6.ino

Olimex UEXT-CH390: Módulo Ethernet SPI 10/100 Mbps para microcontroladores · Archivo : rp2040-lwip-ethernet-ping-6.ino · Lenguaje : C/C++ (Raspberry Pi Pico SDK) · Uso : Initialiser le stack réseau lwIP sur RP2040 et tester la connectivité Ethernet du CH390 via un ping.

Utiliza el SDK de Raspberry Pi Pico y la pila lwIP para habilitar la conectividad TCP/IP sobre el módulo Ethernet CH390.

Este código requiere el SDK de Raspberry Pi Pico y el controlador específico de CH390. Configura la interfaz SPI0 para comunicarse con el módulo UEXT-CH390. La ejecución muestra registros de inicio de la pila de red a través de UART USB. Asegúrese de que los pines CS, RST e INT estén correctamente mapeados al conector 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;
}

← Volver a la ficha