Tutorial sobre cómo utilizar el Bus CAN en la placa de evaluación con el W55RP20 de Wiznet

Back To Blog
BusCAN_Wiznet

Tutorial sobre cómo utilizar el Bus CAN en la placa de evaluación con el W55RP20 de Wiznet

En este tutorial, veremos cómo utilizar el Bus CAN en la placa de evaluación W55RP20-EVB-Pico, que incluye el W55RP20, un chip que combina W5500, un controlador TCP/IP de Wiznet, y el RP2040 de Raspberry Pi. Por lo tanto, se dispone tanto de las funciones de Raspberry Pi Pico como de las de W5500.

 

1. Introducción

El chip W55RP20 de ioNIC de Wiznet, que cambia las reglas del juego en el ámbito de la tecnología IoT. Este potente chip combina funciones de seguridad avanzadas con un bajo consumo de energía, lo que lo hace perfecto para una amplia gama de aplicaciones, desde dispositivos domésticos inteligentes hasta automatización industrial. Con capacidades de procesamiento de datos de alta velocidad y conectividad sin fisuras, el W55RP20 garantiza que sus dispositivos estén siempre conectados y funcionen con eficiencia. Experimente el futuro del IoT con la fiabilidad y el rendimiento del chip W55RP20.

2. Placa de Evaluación W55RP20-EVB-PICO

2.1 W55RP20

El chip W55RP20 es una solución System-in-Package (SiP) que integra el controlador Ethernet W5500 de WIZnet con el microcontrolador RP2040 de Raspberry Pi, proporcionando capacidades de red y procesamiento para dispositivos IoT y aplicaciones inteligentes. El W5500 es compatible con una pila TCP/IP de hardware, lo que simplifica la conectividad de red y la gestión de las comunicaciones, y ofrece una solución eficiente sin necesidad de memoria externa. El RP2040 incorpora un procesador ARM Cortex-M0+ de doble núcleo, que permite un rápido procesamiento de datos y capacidades multitarea para gestionar múltiples tareas simultáneamente.

Este chip está diseñado para ser compatible con diversos entornos de programación, ya que admite lenguajes como Python y C/C++, lo que facilita a los desarrolladores la implementación de aplicaciones. Además, soporta varias interfaces externas y GPIO, ADC, UART, SPI e I2C, facilitando las conexiones con sensores, actuadores y otros dispositivos periféricos.

 

Puede consultar el datasheet del W55RP20 en el siguiente enlace.

 

2.2 Características de la W55RP20-EVB-PICO

  • Microcontrolador W55RP20
    • Flash interna de 2 MB
    • Cortex M0+ de doble núcleo hasta 133 MHz
    • SRAM multibanco de alto rendimiento de 264kByte
    • Flash externa Quad-SPI con eXecute In Place (XIP)
    • Estructura de bus de barras cruzadas de alto rendimiento
    • 22 E/S multifunción de propósito general (4 pueden utilizarse para ADC)
      • Voltaje de E/S de 1,8-3,3 V (NOTA: el voltaje de E/S de Pico está fijado en 3,3 V)
    • Convertidor analógico-digital (ADC) de 12 bits y 500 k/s
    • Varios periféricos digitales
      • 2 × UART, 2 × I2C, 2 × I2C, 2 × SPI, 16 × canales PWM
      • 1 × temporizador con 4 alarmas, 1 × contador en tiempo real
    • 2 bloques de E/S programables (PIO), 8 máquinas de estado en total
    • E/S de alta velocidad flexible y programable por el usuario
    • Puede emular interfaces como tarjetas SD y VGA
    • Admite protocolos de Internet cableados: TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE
    • Soporta 8 SOCKETs de hardware independientes simultáneamente
    • Memoria interna de 32 Kbytes para TX/ RX Buffers
    • Soporta interfaz periférica serie de alta velocidad (SPI MODE 0, 3)
  • Puerto USB C para alimentación y datos (y para reprogramar la Flash)
  • Puerto ARM Serial Wire Debug (SWD) de 3 pines
  • 10 / 100 Ethernet PHY integrado
  • Soporta Auto Negociación
    • Full / Half Duplex
    • Basado en 10 / 100
  • RJ45 integrado (POE)
  • DCDC integrado (PWM/PFM)
  • Se instalan módulos adicionales para habilitar POE

2.3 Especificación Hardware de la W55RP20-EVB-PICO

El pinout de W55RP20-EVB-Pico se conecta directamente al GPIO de RP2040 como se muestra en la imagen de arriba. Tiene el mismo pinout que la placa Raspberry Pi Pico. Sin embargo, GPIO17, GPIO20, GPIO21, GPIO22, GPIO23, GPIO24, y GPIO25 no están disponibles debido a la conexión dentro de la placa.

El GPIO W55RP20 utilizado dentro de W55RP20-EVB-Pico es el siguiente.

Puede consultar el esquemático, la lista de componentes y los archivos Gerber en siguiente enlace al Github de Wiznet.

3. Ejemplo de uso de Bus CAN

El código del controlador CAN de referencia se basa en el proyecto can2040 link-can_driver.

El proyecto can2040 es una implementación de bus CAN por software para los microcontroladores Raspberry Pi rp2040 y rp2350. Permite a estos chips implementar el bus CAN utilizando un chip transceiver CAN estándar. El código soporta la lectura y escritura de frames de datos CAN 2.0B a velocidades de hasta 1Mbit por segundo.

Esta implementación del Bus CAN tiene las siguientes características principales:

  • Admite el envío y la recepción de frames de datos CAN 2.0B. Compatible con cabeceras estándar (id de 11 bits) y cabeceras ampliadas (id de 29 bits).
  • Admite velocidades de bus de hasta 1Mbit/s.
  • Interopera con otras implementaciones de bus CAN. Un bus puede constar de uno o más nodos can2040 junto con nodos no can2040.
  • La implementación utiliza pines  Programmable Input Output o PIO del rp2040/rp2350. Un único chip rp2040 puede tener dos interfaces de bus CAN independientes utilizando sus dos bloques PIO. Un único chip rp2350 puede tener tres interfaces de bus CAN independientes.
  • Funciona con transceivers de bus CAN estándar. En el rp2040, se pueden utilizar dos pines gpio cualesquiera para los cables «can rx» y «can tx». En el rp2350, se pueden utilizar dos pines gpio cualesquiera de GPIO0 a GPIO31 o dos pines cualesquiera de GPIO16 a GPIO47.

3.1 Preparación del software

Los siguientes programas de terminal serie son necesarios para la prueba del código de ejemplo CAN:

 

 

3.2 Preparación del hardware

Para esta implementación, podemos hacer uso del kit de evaluación W55RP20-EVB-Pico, así como de una Raspberry Pi Pico por ejemplo. Para conseguir los voltajes adecuados para el Bus CAN, haremos uso de un transceiver CAN.

La conexión que debe realizarse se explica en los siguientes pasos:

  1. Conecte el cable ethernet al puerto ethernet WIZnet Ethernet HAT, W5100S-EVB-Pico, W5500-EVB-Pico, W55RP20-EVB-Pico, W5100S-EVB-Pico2 o W5500-EVB-Pico2.
  2. Conecta Raspberry Pi Pico, W5100S-EVB-Pico o W5500-EVB-Pico a un ordenador de sobremesa o portátil mediante un cable micro USB de 5 clavijas. W55RP20-EVB-Pico, W5100S-EVB-Pico2 o W5500-EVB-Pico2 requieren un cable USB Type-C.
  3. Conecte como se muestra en el siguiente diagrama, para probar el ejemplo CAN.

 

3.3 Configuración del software

Instalando las siguientes herramientas, puedes probar y depurar el código de ejemplo CAN. (Esta herramienta es para Linux)

  1. Descargar Klipper
    # Linux
    $ git clone https://github.com/Klipper3d/klipper
    $ sudo apt-get update && sudo apt-get install build-essential libncurses-dev libusb-dev libnewlib-arm-none-eabi gcc-arm-none-eabi binutils-arm-none-eabi libusb-1.0 pkg-config
  2. Compilar código USB a bus CAN flashear la placa
    # Linux
    $ make menuconfig

    # Linux
    $ make
    $ make flash FLASH_DEVICE=2e8a:0003
  3. Instalar herramientas can-utils
    # Linux
    $ sudo apt-get install can-utils
    $ sudo ip link set can0 up type can bitrate 1000000

 

Si las herramientas para la placa de pruebas están instaladas correctamente, el resultado aparecerá como se muestra en el siguiente diagrama.

 

3.4 Configuración del Ejemplo de CAN

Para probar el ejemplo con el Bus CAN, se deben realizar ajustes menores en el código. Hay que configurar los pines a utilizar y el bitrate en el archivo en la ubicación ‘WIZnet-PICO-C/examples/can/’.

/* Can */
#define CAN_PIO_INDEX 0     // !! do not use PIO1 (using in w5x00) !!
#define CAN_BITRATE 100000  // 100kbps
#define CAN_RX_PIN 4
#define CAN_TX_PIN 5

 

 

3.5 Build

  1. Una vez completada la configuración del ejemplo CAN, haz clic en «compilar» en la barra de estado de la parte inferior de Visual Studio Code o pulsa el botón «F7» del teclado para compilar.
  2. Una vez finalizada la compilación, se genera ‘{example_name}.uf2’ en el directorio ‘WIZnet-PICO-C/build/examples/can/{example_folder}’.

 

3.6 Cargar y ejecutar

  1. Mientras se pulsa el botón BOOTSEL de Raspberry Pi Pico, W5100S-EVB-Pico, W5500-EVB-Pico, W55RP20-EVB-Pico, W5100S-EVB-Pico2 o W5500-EVB-Pico2 se enciende la placa, el almacenamiento masivo USB ‘RPI-RP2’ se monta automáticamente.
  2. Arrastre y suelte ‘{example_name}.uf2’ en el dispositivo de almacenamiento masivo USB ‘RPI-RP2’.
  3. Conectar al puerto serie COM de Raspberry Pi Pico, W5100S-EVB-Pico, W5500-EVB-Pico, W55RP20-EVB-Pico, W5100S-EVB-Pico2 o W5500-EVB-Pico2 con Tera Term.
  4. Puede verificar si funciona de la siguiente manera.
    # Linux
    $ candump can0
    $ cansend can0 123#1234567887654321

Utilizando un analizador lógico para medir la señal de GPIO4, GPIO5 se obtienen los siguientes resultados.

4. Otros ejemplos

Este ejemplo de uso del Bus CAN está basado en el ejemplo oficial del fabricante que puede encontrar en el siguiente enlace. Gracias a la versatilidad que nos proporciona el chip W55RP20, que combina el controlador TCP/IP W5500, y el microcontrolador RP2040, podemos implementar otra serie de ejemplos para múltiples aplicaciones, como:

 

    Contacta con nosotros:


    Madrid: +34 91 366 01 59
    Barcelona: +34 93 224 02 83

    Bilbao: +34 94 463 60 66
    Portugal: +351 219 376 267