Skip to main content

Hardware Robotics J501 y Primeros Pasos

El reComputer Robotics J501 es una placa portadora de IA de borde de alto rendimiento diseñada para aplicaciones avanzadas de robótica e industriales. Compatible con módulos NVIDIA Jetson AGX Orin (32GB/64GB) en modo MAXN, ofrece hasta 275 TOPS de rendimiento de IA.

Equipado con amplias opciones de conectividad—incluyendo 1x 10GbE y 4x 1GbE puertos Ethernet, ranuras duales M.2 Key M para SSDs NVMe, ranuras M.2 para módulos 5G y Wi-Fi/BT, múltiples puertos USB 3.0, cuatro interfaces CAN (2 nativas + 2 SPI-to-CAN), expansión de cámara GMSL2, y E/S integral incluyendo DI/DO, I2S, UART y RS485—sirve como un cerebro robótico poderoso para fusión compleja de múltiples sensores y procesamiento de IA en tiempo real.

Preinstalado con JetPack 6.2.1 y Linux BSP, asegura un despliegue sin problemas. Compatible con frameworks como NVIDIA Isaac ROS, Hugging Face, PyTorch y ROS 2/1, el J501 conecta la toma de decisiones impulsada por modelos de lenguaje grandes con el control físico de robótica, acelerando el desarrollo de robots autónomos con interfaces listas para usar y frameworks de IA optimizados.

Características Clave

  • IA de alto rendimiento: Hasta 275 TOPS con módulos Jetson AGX Orin 32/64GB, GPU Ampere y motores DLA
  • Conectividad rica: M.2 Key M dual (NVMe); Key E (WiFi/BT) + Key B (5G); 1x 10GbE + 4x 1GbE; 3x USB 3.0; 2x USB-C
  • CAN-FD cuádruple: 2x nativas + 2x interfaces SPI-to-CAN con aislamiento eléctrico
  • Visión GMSL2: Interfaz GMSL2 única (1x) para conexión de cámara de alta velocidad
  • Diseño industrial: Entrada DC 19-48V; operación -10~60°C; interfaces aisladas; JetPack 6.2.1 preinstalado
  • Listo para robótica: Soporte ROS 2/1, Isaac ROS; DI/DO, I2S, UART, RS485; optimizado para AMR y automatización

Especificaciones

Módulo Sistema en Chip Jetson AGX Orin
EspecificacionesreComputer Robotics J5011reComputer Robotics J5012
MóduloNVIDIA Jetson AGX Orin 32GBNVIDIA Jetson AGX Orin 64GB
Rendimiento IA200 TOPS275 TOPS
GPU1792-core NVIDIA Ampere @ 930 MHz2048-core NVIDIA Ampere @ 1.3 GHz
CPU8-core Arm Cortex-A78AE @ 2.0 GHz12-core Arm Cortex-A78AE @ 2.2 GHz
Memoria32GB 256-bit LPDDR5 @ 204.8 GB/s64GB 256-bit LPDDR5 @ 204.8 GB/s
Codificador de Video1x 4K60 / 3x 4K30 / 6x 1080p60 / 12x 1080p30 (H.265)2x 4K60 / 6x 4K30 / 8x 1080p60 / 16x 1080p30 (H.265)
Decodificador de Video1x 8K30 / 2x 4K60 / 4x 4K30 / 9x 1080p60 / 18x 1080p30 (H.265)1x 8K30 / 3x 4K60 / 7x 4K30 / 11x 1080p60 / 22x 1080p30 (H.265)
Cámara CSIHasta 6 cámaras (16 vía canales virtuales)
16 carriles MIPI CSI-2
D-PHY 2.1 (hasta 40Gbps) / C-PHY 2.0 (hasta 164Gbps)
Mecánico100mm x 87mm
Conector Molex Mirror Mezz de 699 pines
Placa de Transferencia Térmica Integrada
Placa Portadora
Almacenamiento2x M.2 Key-M (NVMe 2280 SSD)
1x M.2 Key-B (para módulos 4G/5G)
Red1x M.2 Key-E (WiFi/BT)
1x RJ45 10GbE + 4x RJ45 1GbE
USB3x USB 3.0 Type-A
1x USB 3.0 Type-C (Recovery)
1x USB 2.0 Type-C (Debug UART)
DI/DO/CAN1x 2x10P 3.81mm Bloque Terminal - 4x DI @12V + 4x DO @40V + 4x CAN (CAN-FD compatible, eléctricamente aislado)
GMSL2x Conector Mini-Fakra (Para 8x Cámaras GMSL2) (opcional)
Serie2x DB9 (RS232/422/485)
Pantalla1x HDMI 2.1
Ventilador1×12 V (2.54 mm), 1×5 V (1.25 mm JST)
Botón1x Recovery + 1x Reset
LED3x LED (PWR, SSD, y LED de Usuario)
RTC1x Soporte de Batería CR1220, 1x Header RTC de 2 Pines
Entrada de Alimentación19-48V DC vía Bloque Terminal de 5.08mm (Adaptador de corriente no incluido)
Consumo de EnergíaMódulo Jetson AGX Orin: Hasta 60W (modo MAXN)
Pico total del sistema: 75W (incluyendo periféricos)
SoftwareJetpack 6.2.1
Mecánico

Dimensiones: 210mm x 180mm x 87mm (con soportes)
Peso: 200g
Montaje: Escritorio / Pared / Riel DIN (soporte DIN incluido en accesorios)
Temperatura de Operación: -10℃~60℃ (25W) / -10℃~55℃ (MAXN)

Garantía2 Años
CertificaciónRoHS, REACH, CE, FCC, UKCA, KC

Especificaciones de la Placa de Extensión GMSL (Opcional)

DeserializadorMAX96712
Interfaz GMSL2x Conector Robotics-Fakra Macho
Entrada GMSLHasta 8x Cámaras GMSL2
Método de ConexiónCable GMSL2 Fakra 1-a-4 M-M
Característica de Interfaz POCSoporta transmisión simultánea de energía y datos

Visión General del Hardware

📦 Flash JetPack OS

Módulo Compatible

Prerrequisitos

  • PC host Ubuntu
  • reComputer Robotics J501
  • Cable de transmisión de datos USB Type-C
info

Recomendamos que uses dispositivos host Ubuntu físicos en lugar de máquinas virtuales. Por favor consulta la tabla a continuación para preparar la máquina host.

Versión JetPack Versión Ubuntu (Computadora Host)
18.04 20.04 22.04
JetPack 6.x

Preparar la Imagen Jetpack

Aquí, necesitamos descargar la imagen del sistema a nuestro PC Ubuntu correspondiente al módulo Jetson que estamos usando:

Versión JetpackMódulo Jetson GMSL Enlace de Descarga1SHA256
6.2.1 AGX Orin 64GBDescargared82745decdf554d82bd93441f1f4ad
149f395a4ba5719664ce2351be8201522
AGX Orin 32GBDescargar58fa8b76754449b0a49ad7d5f273edd
f3e1d1f458cdb34994f6d8643da7a1249
danger

El archivo de imagen Jetpack6 tiene aproximadamente 14.2GB de tamaño y debería tomar alrededor de 60 minutos para descargar. Por favor espera pacientemente a que se complete la descarga.

info

Para verificar la integridad del firmware descargado, puedes comparar el valor hash SHA256.

En una máquina host Ubuntu, abre la terminal y ejecuta el comando sha256sum <File> para obtener el valor hash SHA256 del archivo descargado. Si el hash resultante coincide con el hash SHA256 proporcionado en la wiki, confirma que el firmware que descargaste está completo e intacto.

⚙️ Todos los archivos .dts y otro código fuente para las placas portadoras Jetson de SEEED se pueden descargar desde Linux_for_Tegra

Entrar en Modo de Recuperación Forzada

info

Antes de poder continuar con los pasos de instalación, necesitamos asegurarnos de que la placa esté en modo de recuperación forzada.

Paso a Paso

Paso 1. Conecta un cable de transmisión de datos USB Type-C entre el puerto USB2.0 DEVICE y la PC host Ubuntu.

Paso 2. Usa un alfiler e insértalo en el orificio RECOVERY para presionar el botón de recuperación y mantenerlo presionado.

Paso 3. Conecta la fuente de alimentación.

Paso 4. Suelta el botón de recuperación.

Paso 5. En la PC host Linux, abre una ventana de Terminal e ingresa el comando lsusb. Si el contenido devuelto tiene una de las siguientes salidas según el Jetson SoM que uses, entonces la placa está en modo de recuperación forzada.

  • Para AGX Orin 32GB: 0955:7223 NVidia Corp
  • Para AGX Orin 64GB: 0955:7023 NVidia Corp

La imagen de abajo es para AGX Orin 32GB:

Flashear a Jetson

Paso 1: Extrae el archivo de imagen descargado:

cd <path-to-image>
sudo tar xpf mfi_xxxx.tar.gz
# For example: sudo tar xpf mfi_recomputer-robo-agx-orin-32g-j501-6.2.1-36.4.4-2025-11-01.tar.gz

Paso 2: Ejecuta el siguiente comando para flashear el sistema jetpack al SSD NVMe:

cd mfi_xxxx
# For example: cd mfi_recomputer-robo-agx-orin-j501x
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --flash-only --massflash 1 --network usb0 --showlogs

Verás la siguiente salida si el proceso de flasheo es exitoso

note

El comando de flasheo puede ejecutarse durante 2-10 minutos.

Paso 3: Conecta el Robotics J501 a una pantalla usando el adaptador PD a HDMI para conectar a una pantalla que soporte entrada HDMI, o conecta directamente a una pantalla que soporte entrada PD usando el cable PD, y completa la configuración inicial:

info

Por favor completa la Configuración del Sistema según tus necesidades.

🔌 Uso de Interfaces

Lo siguiente introducirá las diversas interfaces de la placa Robotics J501 y cómo usarlas.

M.2 Key M

El J501 incluye ranuras duales M.2 Key M que soportan SSD NVMe PCIe Gen4x4 para expansión de almacenamiento de alta velocidad.

Los SSD soportados son los siguientes

Conexión de Hardware

Instrucciones de Uso

Abre la terminal en el dispositivo Jetson e ingresa el siguiente comando para probar la velocidad de lectura y escritura del SSD.

Paso 1. Crear directorio y archivo de prueba:

mkdir ssd
touch ~/ssd/test

Paso 2. Probar rendimiento de escritura:

dd if=/dev/zero of=/home/$USER/ssd/test bs=1024M count=5 conv=fdatasync

Paso 3. Verificar información del SSD:

nvme list
danger

Por favor ejecuta el comando sudo rm /home/$USER/ssd/test para eliminar los archivos de caché después de que la prueba esté completa.

M.2 Key E (WiFi/BT)

La ranura M.2 Key E soporta módulos Wi-Fi 6 y Bluetooth 5.x para conectividad inalámbrica.

Conexión de Hardware

tip

Nota: Antes de usar la interfaz, debes quitar los tornillos de la carcasa e instalar el módulo correspondiente como se muestra en la figura de abajo.

Instrucciones de Uso

Prueba de Rendimiento: Para probar el rendimiento de Wi-Fi, usa el siguiente comando (reemplaza la dirección IP con tu servidor de prueba):

# On server: iperf3 -s
# On client:
iperf3 -c 192.168.7.157

La funcionalidad Bluetooth está disponible a través de la ranura M.2 Key E. Prueba de Bluetooth:

M.2 Key B (Módulo 4G/5G)

La ranura M.2 Key B soporta módulos celulares 4G/5G con soporte para tarjeta Nano SIM.

Conexión de Hardware

tip

Nota: Antes de usar la interfaz, debes quitar los tornillos de la carcasa e instalar el módulo correspondiente como se muestra en la figura de abajo.

Instrucciones de Uso

Paso 1. Verificar Reconocimiento de Hardware

lsusb 

Este comando muestra una lista de todos los dispositivos USB conectados al sistema, junto con su fabricante (ID), tipo y otra información. Por ejemplo, la salida podría mostrar un dispositivo de Quectel Wireless Solutions Co., Ltd. EM12-G, indicando que el módulo 5G está presente.

Paso 2. Confirmar Carga del Controlador Es esencial asegurarse de que el controlador option, que es requerido para el módulo 5G, esté cargado. Podemos usar el comando lsmod para verificar.

lsmod | grep option 

Si el controlador option se carga exitosamente, se mostrará información relevante sobre el controlador en la salida.

Paso 3. Configurar ModemManager ModemManager es una herramienta para gestionar dispositivos módem, y necesita ser instalado y reiniciado.

sudo apt install modemmanager 
sudo systemctl restart ModemManager

El comando apt install se usa para instalar el paquete ModemManager, mientras que systemctl restart reinicia el servicio ModemManager para asegurar que las nuevas configuraciones tomen efecto.

Paso 4. Verificar Identificación del Módulo Podemos usar el comando mmcli -L para verificar si el ModemManager puede identificar correctamente el módulo 5G.

mmcli -L 

Si el módulo 5G es reconocido, se mostrará una salida similar a /org/freedesktop/ModemManager1/Modem/0, indicando la ruta al dispositivo módem detectado.

Paso 5. Configurar el APN APN (Access Point Name) es crucial para conectar un dispositivo móvil a la red. Usaremos el comando nmcli para crear un perfil de portador. Tomando China Mobile como ejemplo, podemos crear un archivo de configuración con los siguientes comandos:

sudo nmcli con add type gsm ifname "*" apn "CMNET" ipv4.method  auto 

Este comando agrega una nueva conexión tipo GSM (Global System for Mobile Communications), especificando el APN como "CMNET" y usando configuración automática IPv4.

Paso 6. Activar la Conexión Después de crear el perfil de portador, necesitamos activar la conexión.

sudo nmcli con up "gsm" 

Este comando activa la conexión GSM, y si es exitoso, se mostrará un mensaje de confirmación.

Paso 7. Re-verificar Identificación del Módulo Ejecuta el comando mmcli -L nuevamente para asegurar que el módulo permanezca reconocido después de configurar el APN.

mmcli -L 

Paso 8. Verificar Estado del Módulo Finalmente, podemos usar el comando mmcli -m 0 para ver información detallada sobre el módulo, como asignación de IP, operador y estado de conexión de red.

mmcli -m 0 

Este comando proporciona detalles completos sobre el módulo 5G, incluyendo su fabricante, modelo, tecnologías de red soportadas y actuales, estado del dispositivo y operadores de red conectados.

Ethernet

El Robotics J501 proporciona 1x 10GbE (nativo) y 4x 1GbE (vía switch PCIe) puertos RJ45. El puerto 10GbE cuenta con TI TQSPH-10G PHY, soportando cinco velocidades: 10/5/2.5/1/0.1 GbE. Los puertos 1GbE soportan velocidades 10/100/1000M.

Indicadores LED por puerto:

  • LED Verde: ENCENDIDO para enlace 10G/5G/2.5G/1000M
  • LED Amarillo: Parpadea para actividad de red

Para probar la velocidad del puerto Ethernet, usa iperf3 como sigue:

iperf3 -c <server_ip> -B <bind_ip>
info

<server_ip> es la dirección IP del servidor iperf3. El cliente se conectará a este servidor para realizar una prueba de ancho de banda. <bind_ip> vincula la dirección IP local especificada como origen del tráfico de prueba.

LED

El J501 cuenta con múltiples LEDs de estado:

  • LED PWR: Estado de alimentación (verde)
  • LED ACT: Actividad del sistema (amarillo)
  • LED USR: Vía control GPIO

Instrucciones de Uso

Lo siguiente demuestra cómo controlar los LEDs USER para que sean verde, rojo o azul.

#change to red
echo 1 | sudo tee /sys/class/leds/on-board:red/brightness
echo 0 | sudo tee /sys/class/leds/on-board:red/brightness
#change to green
echo 1 | sudo tee /sys/class/leds/on-board:green/brightness
echo 0 | sudo tee /sys/class/leds/on-board:green/brightness

#change to blue
echo 1 | sudo tee /sys/class/leds/on-board:blue/brightness
echo 0 | sudo tee /sys/class/leds/on-board:blue/brightness

El efecto de control del LED se muestra en la figura a continuación:

USB

El Robotics J501 proporciona 4x puertos USB 3.2 Tipo-A (a través de un hub USB 3.1 Gen1 interno, soportando hasta 5Gbps de velocidad de datos para conectar periféricos de alta velocidad, dispositivos de almacenamiento o cámaras) y 1x puerto de depuración USB 2.0 Tipo-C (que funciona como consola serie para acceder a registros del sistema, depurar problemas de arranque y realizar actualizaciones de firmware).

Prueba de Velocidad USB-A

Crea un script para probar la velocidad del dispositivo USB:

vim test_usb.sh

Pega el siguiente contenido:

test_usb.sh
cat <<'EOF' | sudo tee test_usb.sh >/dev/null
#!/bin/bash
set -e

MOUNT_POINT="$1"
TEST_FILE="$MOUNT_POINT/test_usb_speed.bin"

if [ -z "$MOUNT_POINT" ]; then
echo "Usage: $0 <mount_point>"
echo "Example: $0 /media/seeed/USB"
exit 1
fi

if [ ! -d "$MOUNT_POINT" ]; then
echo "Error: $MOUNT_POINT is not a directory"
exit 1
fi

echo "Write test..."
dd if=/dev/zero of="$TEST_FILE" bs=1M count=2048 conv=fdatasync status=progress

echo
echo "Drop caches..."
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

echo "Read test..."
dd if="$TEST_FILE" of=/dev/null bs=1M count=2048 status=progress

echo
echo "Cleaning up..."
rm -f "$TEST_FILE"
EOF

Haz el script ejecutable y prueba:

sudo chmod +x test_usb.sh
./test_usb.sh /mnt # If your USB drive is mounted at /mnt
# Or
./test_usb.sh /media/usb # If your USB drive is mounted at /media/usb
# Or
./test_usb.sh /path/to/your/usb/mount_point
note

¡Por favor confirma primero el punto de montaje real de tu dispositivo USB usando el comando df -h o lsblk!

Puerto USB 2.0 Tipo-C

Usando este puerto serie, a través del cable de datos USB-C, puedes monitorear la información de depuración de entrada y salida en el lado del PC.

Paso 1. Abre la herramienta de puerto serie (Aquí, usamos la herramienta MobaXterm como ejemplo), crea una nueva sesión.

Paso 2. Selecciona la herramienta Serial.

Paso 3. Selecciona el puerto serie correspondiente, establece la velocidad de baudios a 115200 y haz clic en "OK".

Paso 4. Inicia sesión en tu reComputer Super con el nombre de usuario y contraseña.

Ventilador

El Robotics J501 proporciona dos conectores de ventilador PWM de 4 pines diseñados para enfriar tanto el módulo Jetson como los componentes de la placa base:

  • Ventilador 12V: Conector de 2.54 mm, máx. 1.5A, adecuado para refrigeración de alto rendimiento
  • Ventilador 5V: Conector JST de 1.25 mm, máx. 1.5A, ideal para refrigeración silenciosa de bajo consumo

El control PWM permite ajuste dinámico y preciso de la velocidad basado en la temperatura del sistema, habilitando refrigeración eficiente mientras minimiza el ruido y el consumo de energía.

Pinout del Ventilador 12V:

El conector del ventilador de 12V (2.54 mm) tiene el siguiente pinout:

Instrucciones de Uso

Control PWM Manual:

# Set fan speed (0-255)
sudo -i
echo 200 > /sys/bus/platform/devices/pwm-fan/hwmon/hwmon1/pwm1
note

La política térmica predeterminada está preconfigurada en /etc/nvpmodel.conf. Para perfiles personalizados, consulta la Guía del Desarrollador de NVIDIA Jetson Linux.

Adicionalmente, podemos establecer manualmente la velocidad del ventilador usando la herramienta jtop.

Puedes ingresar el siguiente comando en la terminal para instalar jtop.

sudo apt update
sudo apt install python3-pip -y
sudo pip3 install jetson-stats

Luego reinicia tu reComputer Mini:

sudo reboot

Después de instalar jtop, puedes ejecutarlo en la terminal:

jtop

CAN

El reComputer Robotics J501 está equipado con 4 interfaces CAN independientes (CAN 0, CAN 1, CAN 2, CAN 3), que comparten el conector J25 2x10P con las interfaces DI/DO. Estas interfaces soportan tanto protocolos de comunicación CAN Clásico como CAN FD, presentando alto rendimiento anti-interferencia y transmisión de datos en tiempo real, haciéndolas adecuadas para escenarios de control industrial como electrónica automotriz, automatización industrial y robótica.

Instrucciones de Uso

Este es el diagrama esquemático de la interfaz CAN.

Comunicación CAN

Esta sección demuestra la conexión CAN0↔CAN1 y CAN2↔CAN3 en el Jetson y muestra cómo enviar y recibir datos entre esos pares tanto en modo CAN Clásico como en modo CAN‑FD.

Nombre del CanalTipo de InterfazNombre del PinChip GPIONúmero GPIOControl de Resistor de Terminación
CAN0NativoPAA.04gpiochip14gpiochip1 line4 (PAA.04)
CAN1NativoPAA.07gpiochip17gpiochip1 line7 (PAA.07)
CAN2SPI-a-CAN-gpiochip210gpiochip2 line10
CAN3SPI-a-CAN-gpiochip212gpiochip2 line12

Los resistores de terminación para CAN0 y CAN1 pueden ser controlados a través de dos pines: PAA.04, ubicado en gpiochip1 line4, y PAA.07, ubicado en gpiochip1 line7.

El control del resistor de terminación sigue estas reglas:

When `PAA.04 = 1`, the 120 Ω termination resistor of CAN0 is **disconnected**;  
when `PAA.04 = 0`, the 120 Ω termination resistor of CAN0 is **connected**.

When `PAA.07 = 1`, the 120 Ω termination resistor of CAN1 is **disconnected**;
when `PAA.07 = 0`, the 120 Ω termination resistor of CAN1 is **connected**.

Ingresa el siguiente comando para ver los pines en gpiochip 1:

gpioinfo gpiochip1

Consulta los siguientes comandos para establecer PAA.04 y PAA.07 a 0:

sudo gpioset --mode=wait gpiochip1 4=0
sudo gpioset --mode=wait gpiochip1 7=0

Consulta los siguientes comandos para establecer PAA.04 y PAA.07 a 1:

sudo gpioset --mode=wait gpiochip1 4=1
sudo gpioset --mode=wait gpiochip1 7=1

Modo CAN Clásico

El siguiente script implementa pruebas de comunicación de bucle de retorno entre CAN0/CAN1 y CAN2/CAN3, incluyendo habilitar el resistor terminal, configurar la velocidad de bits y transmisión de datos bidireccional.

El diagrama de cableado se muestra a continuación:

DesdeHacia
CAN0_HCAN1_H
CAN0_LCAN1_L
CAN2_HCAN3_H
CAN2_LCAN3_L

El diagrama de cableado se muestra a continuación:

Crea test_can.sh para probar la transmisión y recepción de datos entre CAN0↔CAN1 y CAN2↔CAN3 en modo estándar:

touch test_can.sh
sudo chmod +x test_can.sh
sudo ./test_can.sh

El código del script para test_can.sh es el siguiente:

test_can.sh
#!/bin/bash
set -e

PW="000000"

echo "$PW" | sudo -S ip link set can0 down || true
echo "$PW" | sudo -S ip link set can1 down || true
echo "$PW" | sudo -S ip link set can2 down || true
echo "$PW" | sudo -S ip link set can3 down || true

# Set socket buffer sizes
echo "$PW" | sudo -S sysctl -w net.core.rmem_max=524288
echo "$PW" | sudo -S sysctl -w net.core.wmem_max=524288
echo "$PW" | sudo -S sysctl -w net.core.rmem_default=524288
echo "$PW" | sudo -S sysctl -w net.core.wmem_default=524288

# Set bitrate, 1 Mbps
BITRATE=1000000
echo "$PW" | sudo -S ip link set can0 type can bitrate ${BITRATE}
echo "$PW" | sudo -S ip link set can1 type can bitrate ${BITRATE}
echo "$PW" | sudo -S ip link set can0 up
echo "$PW" | sudo -S ip link set can1 up

echo "$PW" | sudo -S ip link set can2 type can bitrate ${BITRATE}
echo "$PW" | sudo -S ip link set can3 type can bitrate ${BITRATE}
echo "$PW" | sudo -S ip link set can2 up
echo "$PW" | sudo -S ip link set can3 up

sleep 1

# Enable termination resistors
sudo pkill -f gpioset || true
gpioset --mode=time --sec=200000 gpiochip2 8=0 & # enable CAN1 120R
GPIO1_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 9=0 & # enable CAN0 120R
GPIO2_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 12=0 & # enable CAN3 120R
GPIO3_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 10=0 & # enable CAN2 120R
GPIO4_PID=$!

echo "Start candump on can0 & can1..."
candump can0 &
DUMP0_PID=$!
candump can1 &
DUMP1_PID=$!

echo "Start candump on can2 & can3..."
candump can2 &
DUMP2_PID=$!
candump can3 &
DUMP3_PID=$!

echo "Start cangen on can0 & can1 and can2 & can3 (bi-directional test)..."
# -g 10 sends one frame every 10 ms; adjust as needed
cangen can0 -g 10 &
GEN0_PID=$!
cangen can1 -g 10 &
GEN1_PID=$!
cangen can2 -g 10 &
GEN2_PID=$!
cangen can3 -g 10 &
GEN3_PID=$!

# Cleanup background processes on Ctrl+C
cleanup() {
echo
echo "Stopping CAN test..."
kill $GEN0_PID $GEN1_PID $DUMP0_PID $DUMP1_PID $GPIO1_PID $GPIO2_PID 2>/dev/null || true
kill $GEN2_PID $GEN3_PID $DUMP2_PID $DUMP3_PID $GPIO3_PID $GPIO4_PID 2>/dev/null || true
echo "$PW" | sudo -S ip link set can0 down || true
echo "$PW" | sudo -S ip link set can1 down || true
echo "$PW" | sudo -S ip link set can2 down || true
echo "$PW" | sudo -S ip link set can3 down || true
echo "Done."
}
trap cleanup INT TERM

# Wait for child processes (candump runs until you Ctrl+C)
wait
note

En el script de prueba CAN, reemplaza PW con tu propia contraseña de Jetson.

Se completará la transmisión y recepción de datos entre CAN0 y CAN1:

Modo CAN-FD

CAN FD soporta tasas de transmisión de datos más altas y longitudes de trama de datos más grandes. El siguiente script implementa pruebas de bucle de retorno CAN FD.

Crea test_canfd.sh para probar la transmisión y recepción de datos entre CAN0↔CAN1 y CAN2↔CAN3 en modo CAN-FD:

touch test_canfd.sh
sudo chmod +x test_canfd.sh
sudo ./test_canfd.sh

El código del script para test_canfd.sh es el siguiente:

test_canfd.sh
#!/bin/bash
set -e

PW="000000"

echo "$PW" | sudo -S ip link set can0 down || true
echo "$PW" | sudo -S ip link set can1 down || true
echo "$PW" | sudo -S ip link set can2 down || true
echo "$PW" | sudo -S ip link set can3 down || true

# Set socket buffers
echo "$PW" | sudo -S sysctl -w net.core.rmem_max=524288
echo "$PW" | sudo -S sysctl -w net.core.wmem_max=524288
echo "$PW" | sudo -S sysctl -w net.core.rmem_default=524288
echo "$PW" | sudo -S sysctl -w net.core.wmem_default=524288

# ---- CAN-FD parameters ----
BITRATE=500000 # Arbitration (nominal) bitrate
DBITRATE=5000000 # Data phase bitrate (FD fast mode)

# Configure CAN-FD: arbitration bitrate + data bitrate + FD on + error reporting + auto restart
echo "$PW" | sudo -S ip link set can0 type can bitrate $BITRATE dbitrate $DBITRATE fd on berr-reporting on restart-ms 100
echo "$PW" | sudo -S ip link set can1 type can bitrate $BITRATE dbitrate $DBITRATE fd on berr-reporting on restart-ms 100
echo "$PW" | sudo -S ip link set can2 type can bitrate $BITRATE dbitrate $DBITRATE fd on berr-reporting on restart-ms 100
echo "$PW" | sudo -S ip link set can3 type can bitrate $BITRATE dbitrate $DBITRATE fd on berr-reporting on restart-ms 100

echo "$PW" | sudo -S ip link set can0 up
echo "$PW" | sudo -S ip link set can1 up
echo "$PW" | sudo -S ip link set can2 up
echo "$PW" | sudo -S ip link set can3 up

sleep 1

# Enable termination resistors
sudo pkill -f gpioset || true
gpioset --mode=time --sec=200000 gpiochip2 8=0 & # enable CAN1 120R
GPIO1_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 9=0 & # enable CAN0 120R
GPIO2_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 12=0 & # enable CAN3 120R
GPIO3_PID=$!
gpioset --mode=time --sec=200000 gpiochip2 10=0 & # enable CAN2 120R
GPIO4_PID=$!

echo "Start candump on can0 & can1..."
candump can0 &
DUMP0_PID=$!
candump can1 &
DUMP1_PID=$!

echo "Start candump on can2 & can3..."
candump can2 &
DUMP2_PID=$!
candump can3 &
DUMP3_PID=$!

echo "Start cangen on can0 & can1 and can2 & can3 (bi-directional test)..."
# -g 10 sends one frame every 10 ms; adjust as needed
cangen can0 -g 10 &
GEN0_PID=$!
cangen can1 -g 10 &
GEN1_PID=$!
cangen can2 -g 10 &
GEN2_PID=$!
cangen can3 -g 10 &
GEN3_PID=$!

# Cleanup background processes on Ctrl+C
cleanup() {
echo
echo "Stopping CAN-FD test..."
kill $GEN0_PID $GEN1_PID $DUMP0_PID $DUMP1_PID $GPIO1_PID $GPIO2_PID 2>/dev/null || true
kill $GEN2_PID $GEN3_PID $DUMP2_PID $DUMP3_PID $GPIO3_PID $GPIO4_PID 2>/dev/null || true
echo "$PW" | sudo -S ip link set can0 down || true
echo "$PW" | sudo -S ip link set can1 down || true
echo "$PW" | sudo -S ip link set can2 down || true
echo "$PW" | sudo -S ip link set can3 down || true
echo "Done."
}
trap cleanup INT TERM

# Wait for child processes (candump will run until you Ctrl+C)
wait
note

En el script de prueba CAN, reemplaza PW con tu propia contraseña de Jetson.

Se completará la transmisión y recepción de datos entre CAN0↔CAN1 y CAN2↔CAN3:

DI/DO

Las interfaces DI/DO del reComputer Robotics J501 están integradas en el conector J25 2x10P, compartiendo la interfaz con las interfaces CAN. Soportan 4 canales de entrada digital y 4 canales de salida digital, con transmisión de señal estable y adaptación de voltaje de grado industrial, adecuadas para conectar sensores digitales, relés y otros dispositivos periféricos.

Conexión de Hardware

Canales de Entrada Digital (DI)

Nombre del CanalCaracterísticas de VoltajeEtiqueta GPIONombre del PinChip GPIONúmero GPIO
DI_12V_1Adaptativo a entrada 12VDI_1_GPIO17PP.04gpiochip096
DI_12V_2Adaptativo a entrada 12VDI_1_GPIO18PQ.04gpiochip0104
DI_12V_3Adaptativo a entrada 12VDI_1_GPIO19PN.02gpiochip086
DI_12V_4Adaptativo a entrada 12VDI_1_GPIO33PM.07gpiochip083

Canales de Salida Digital (DO)

Nombre del CanalCaracterísticas de VoltajeEtiqueta GPIONombre del PinChip GPIONúmero GPIOInformación Adicional
DO_40V_1Salida de drenaje abierto; ~0V (bajo) cuando no se eleva, 12V (alto) cuando se elevaDO_1_GPIOPAA.04gpiochip14Número correspondiente: 320
DO_40V_2Salida de drenaje abierto; ~0V (bajo) cuando no se eleva, 12V (alto) cuando se elevaDO_2_GPIOPAA.07gpiochip17Número correspondiente: 323
DO_40V_3Salida de drenaje abierto; ~0V (bajo) cuando no se eleva, 12V (alto) cuando se elevaDO_3_GPIOPBB.01gpiochip19Número correspondiente: 325
DO_40V_4Salida de drenaje abierto; ~0V (bajo) cuando no se eleva, 12V (alto) cuando se elevaDO_4_GPIOPBB.00gpiochip18Número correspondiente: 324

Las definiciones clave de pines para las interfaces DI/DO en el conector J25 son las siguientes (la numeración de pines corresponde al conector físico):

Número de PinEtiqueta de FunciónDescripción
1DI_12V_1Canal 1 de Entrada Digital 12V
3DI_12V_2Canal 2 de Entrada Digital 12V
5DI_12V_3Canal 3 de Entrada Digital 12V
7DI_12V_4Canal 4 de Entrada Digital 12V
9GND_DITierra para Canales de Entrada Digital
2DO_40V_1Canal 1 de Salida Digital 40V
4DO_40V_2Canal 2 de Salida Digital 40V
6DO_40V_3Canal 3 de Salida Digital 40V
8DO_40V_4Canal 4 de Salida Digital 40V
10GND_DOTierra para Canales de Salida Digital
note

Para el pinout completo (incluyendo interfaces CAN), consulta la documentación de hardware del reComputer Robotics J501 para evitar conexiones incorrectas.

Instrucciones de Uso

Operación de Salida Digital (DO)

Las interfaces DO adoptan salida de drenaje abierto. Puedes establecer el nivel de salida (alto/bajo) mediante comandos para controlar periféricos como relés y LEDs.

Ejecuta el siguiente comando para habilitar el canal DO (salida 12V, alimentado por la resistencia pull-up externa y fuente de alimentación de 12V):

# Enable DO_40V_1 (gpiochip1 4)
sudo gpioset --mode=wait 1 4=1

# Enable DO_40V_2 (gpiochip1 7)
sudo gpioset --mode=wait 1 7=1

# Enable DO_40V_3 (gpiochip1 9)
sudo gpioset --mode=wait 1 9=1

# Enable DO_40V_4 (gpiochip1 8)
sudo gpioset --mode=wait 1 8=1

DO Antes de Elevar:

DO Después de Elevar:

Ejecuta el siguiente comando para deshabilitar el canal DO (salida ~0V):

# Disable DO_40V_1 (gpiochip1 4)
sudo gpioset --mode=wait 1 4=0

# Disable DO_40V_2 (gpiochip1 7)
sudo gpioset --mode=wait 1 7=0

# Disable DO_40V_3 (gpiochip1 9)
sudo gpioset --mode=wait 1 9=0

# Disable DO_40V_4 (gpiochip1 8)
sudo gpioset --mode=wait 1 8=0

Operación de Entrada Digital (DI)

Usa el comando gpioget para leer el nivel de entrada del canal DI (valor de retorno 1 = nivel alto, 0 = nivel bajo) y obtener el estado de dispositivos periféricos.

El comando para leer el Nivel del Canal DI es el siguiente:

# Read DI_12V_1 (gpiochip0 96) status
gpioget gpiochip0 96

# Read DI_12V_2 (gpiochip0 104) status
gpioget gpiochip0 104

# Read DI_12V_3 (gpiochip0 86) status
gpioget gpiochip0 86

# Read DI_12V_4 (gpiochip0 83) status
gpioget gpiochip0 83

SPI

Conexión de Hardware

Instrucciones de Uso

Usa cables Dupont para conectar los pines principales del canal SPI objetivo (toma /dev/spidev2.0 como ejemplo): Conecta el pin MOSI de SPI2.0 a su pin MISO (realiza transmisión/recepción de datos en bucle de retorno).

El diagrama de cableado es el siguiente:

note

Para usar SPI, retira la cubierta lateral del dispositivo con un destornillador como se muestra arriba.

Paso 1: Cargar Módulo del Kernel SPI (Prerrequisito) Antes de operar la interfaz SPI, asegúrate de que el módulo del kernel spidev esté cargado (el sistema predeterminado puede precargarlo, pero se recomienda verificar manualmente):

sudo modprobe spidev
note

Si el comando se ejecuta sin mensajes de error, significa que el módulo se cargó exitosamente; si el módulo ya está cargado, el comando no devolverá información, lo cual es un fenómeno normal.

Paso 2: Ver Nodos de Dispositivo SPI Ingresa el siguiente comando en la terminal para ver el nombre del dispositivo mapeado por la interfaz SPI del reComputer Robotics J501:

ls /dev/spidev*

Si no se muestra ningún nodo de dispositivo, significa que el módulo spidev no se cargó correctamente. Vuelve a ejecutar sudo modprobe spidev y verifica el registro del sistema para solucionar problemas.

Paso 3: Obtener y Compilar el Código de Prueba SPI Descarga el código de prueba spidev-test desde GitHub y compílalo:

git clone https://github.com/rm-hull/spidev-test
cd spidev-test
gcc spidev_test.c -o spidev_test

Paso 4: Ejecutar el Programa de Prueba SPI Ingresa el siguiente comando en la terminal para ejecutar el programa de prueba SPI (tomando /dev/spidev2.0 como ejemplo):

sudo ./spidev_test -v -D /dev/spidev2.0 -s 100000

Paso 5: Verificar el Resultado de la Prueba Después de ejecutar el comando de prueba, puedes observar el estado de transmisión y recepción de datos de la interfaz SPI2.0 en la terminal. La salida principal es la siguiente:

Criterio de evaluación clave: Los datos TX (transmitidos) son consistentes con los datos RX (recibidos), indicando que la prueba de bucle de retorno SPI es exitosa, y la función de la interfaz SPI es normal.

UART

El reComputer Robotics J501 está equipado con 2 interfaces UART independientes (UART1 y UART2) que soportan modos de comunicación RS232, RS422 y RS485, con transmisión de señal estable y amplia compatibilidad con dispositivos periféricos.

Conexión de Hardware

Canales de Interfaz UART

Nombre del CanalNodo del DispositivoModos SoportadosVelocidad de Baudios por DefectoComando de Habilitación GPIOMétodo de Cambio de Modo
UART1 (DB9-1)/dev/ttyTHS1RS232, RS422, RS485RS232: 115200 bps; RS422/RS485: 9600 bpsgpioset --mode=wait gpiochip0 2=0Interruptor dip SW3 (DIP de 8 pines)
UART2 (DB9-2)/dev/ttyTHS4RS232 (por defecto)115200 bpsgpioset --mode=wait gpiochip2 15=0RS232 fijo (sin interruptor)

Definición de Pines (Conector DB9)

La función de cada pin DB9 varía según el modo de comunicación. Consulta la tabla a continuación para un cableado preciso (la numeración de pines sigue las especificaciones estándar del conector DB9 macho):

Número de Pin DB9Función Modo RS232Función Modo RS422Función Modo RS485
1-TXD- (Datos de Transmisión-)Data- (Datos Diferenciales-)
2RXD (Datos de Recepción)TXD+ (Datos de Transmisión+)Data+ (Datos Diferenciales+)
3TXD (Datos de Transmisión)RXD+ (Datos de Recepción+)-
4-RXD- (Datos de Recepción-)-
5GND (Tierra)GND (Tierra)GND (Tierra)
6---
7RTS (Solicitud de Envío)--
8CTS (Listo para Enviar)--
9---

Configuración de Modo (Interruptor Dip SW3)

Solo UART1 (DB9-1) soporta cambio de modo a través del interruptor dip SW3 (UART2 está fijo a RS232). El interruptor es de tipo DIP de 8 pines, con pines de configuración principales etiquetados como MODE_0, MODE_1 y MODE_2 en el esquemático.

La interfaz se muestra en la figura a continuación:

Reglas de Configuración

Modo de TrabajoCombinación de Interruptor Dip (MODE_2, MODE_1, MODE_0)Operación de Estado del Interruptor
RS2320 (OFF), 0 (OFF), 1 (ON)MODE_0: Cambiar a ON; MODE_1/MODE_2: Mantener OFF
RS4220 (OFF), 0 (OFF), 0 (OFF) o 1 (ON), 0 (OFF), 0 (OFF)MODE_0/MODE_1: Mantener OFF; MODE_2: Opcional (ON/OFF)
RS4850 (OFF), 1 (ON), 0 (OFF) o 1 (ON), 1 (ON), 0 (OFF)MODE_1: Cambiar a ON; MODE_0/MODE_2: Opcional (ON/OFF)
note

Después de completar la conexión de hardware, usa software de terminal (ej., CuteCom) para probar la función de comunicación UART. Si CuteCom no está instalado, ejecuta sudo apt-get install cutecom para instalarlo. Asegúrate de que el canal UART haya sido habilitado a través del comando GPIO.

Instrucciones de Uso

Comandos de Habilitación GPIO

Antes de conectar, ejecuta el comando de habilitación GPIO en la terminal para activar el canal UART correspondiente:

# Enable UART1 (ttyTHS1)
sudo gpioset --mode=wait gpiochip0 2=0

# Enable UART2 (ttyTHS4)
sudo gpioset --mode=wait gpiochip2 15=0

Prueba de Modo RS232

Aquí puedes usar un adaptador USB a RS232 para probar la interfaz. Hemos usado UGREEN USB to RS232 Adapter para nuestras pruebas.

El diagrama de cableado se muestra a continuación:

Paso 1: Iniciar CuteCom Ejecuta sudo cutecom para iniciar el software de terminal CuteCom.

Paso 2: Configurar Parámetros del Puerto Serie Configura el puerto serie con los siguientes parámetros:

  • Dispositivo: /dev/ttyTHS1 (UART1) o /dev/ttyTHS4 (UART2)
  • Velocidad de Baudios: 115200 bps
  • Bits de Datos: 8, Paridad: Ninguna, Bits de Parada: 1, Control de Flujo: Ninguno

Paso 3: Abrir Puerto Serie Haz clic en "Open Device" para abrir el puerto serie.

Paso 4: Enviar Datos de Prueba Envía datos de prueba (ej., "232 test from jetson") y verifica la recepción de datos desde el dispositivo periférico.

Prueba de Modo RS485

Aquí puedes usar un adaptador USB a RS485 para probar la interfaz. Hemos usado DTech USB to RS485 Adapter para nuestras pruebas.

El diagrama de cableado se muestra a continuación:

Paso 1: Iniciar CuteCom Ejecuta sudo cutecom para iniciar el software de terminal CuteCom.

Paso 2: Configurar Parámetros del Puerto Serie Configura el puerto serie con los siguientes parámetros:

  • Dispositivo: /dev/ttyTHS1
  • Velocidad de Baudios: 9600 bps
  • Bits de Datos: 8, Paridad: Ninguna, Bits de Parada: 1, Control de Flujo: Ninguno

Paso 3: Abrir Puerto Serie Haz clic en "Open Device" para abrir el puerto serie.

Paso 4: Enviar Datos de Prueba Envía datos de prueba (ej., "485 test from jetson") y verifica la recepción de datos desde el dispositivo periférico.

Prueba de Modo RS422

Aquí puedes usar un adaptador USB a RS422 para probar la interfaz. Hemos usado DTech USB to RS485 Adapter para nuestras pruebas.

El diagrama de cableado se muestra a continuación:

Paso 1: Iniciar CuteCom Ejecuta sudo cutecom para iniciar el software de terminal CuteCom.

Paso 2: Configurar Parámetros del Puerto Serie Configura el puerto serie con los siguientes parámetros:

  • Dispositivo: /dev/ttyTHS1
  • Velocidad de Baudios: 9600 bps
  • Bits de Datos: 8, Paridad: Ninguna, Bits de Parada: 1, Control de Flujo: Ninguno

Paso 3: Abrir Puerto Serie Haz clic en "Open Device" para abrir el puerto serie.

Paso 4: Enviar Datos de Prueba Envía datos de prueba (ej., "422 test from jetson") y verifica la recepción de datos desde el dispositivo periférico.

RTC

El reComputer Robotics J501 incluye un RTC de hardware con respaldo de batería para mantener la hora con precisión. Hay dos formas de proporcionar energía de respaldo al RTC:

  1. Usando el soporte de batería de moneda CR1220 (J14)
  2. Usando el Header de 2 Pines RTC - J4 para conexión de energía externa

Conexión de Hardware

Método 1: Usando Soporte de Batería de Moneda CR1220

Conecta una batería de moneda CR1220 de 3V al socket RTC en la placa como se muestra a continuación. Asegúrate de que el extremo positivo (+) de la batería esté mirando hacia arriba.

Método 2: Usando Header de 2 Pines RTC

El Header de 2 Pines RTC proporciona una forma alternativa de conectar energía externa al RTC.

Instrucciones de Uso

Paso 1. Conecta una batería RTC como se mencionó anteriormente.

Paso 2. Enciende el reComputer Robotics J501.

Paso 3. En el Escritorio de Ubuntu, haz clic en el menú desplegable en la esquina superior derecha, navega a Settings > Date & Time, conéctate a una red a través de un cable Ethernet y selecciona Automatic Date & Time para obtener la fecha/hora automáticamente.

note

Si no te has conectado a internet a través de Ethernet, puedes configurar manualmente la fecha/hora aquí.

Paso 4. Abre una ventana de terminal y ejecuta el siguiente comando para verificar la hora del reloj de hardware:

cat /sys/devices/platform/bpmp/bpmp\:i2c/i2c-4/4-003c/nvvrs-pseq-rtc/rtc/rtc0/time

Paso 5. Desconecta la conexión de red y reinicia el dispositivo. Encontrarás que la hora del sistema ha perdido energía pero aún funciona normalmente.

Pantalla

El Robotics J501 está equipado con un HDMI para salida de pantalla de alta resolución.

Puerto de Extensión

La placa portadora Robotics J501 cuenta con un Header de Expansión de Cámara para placa de extensión GMSL. Puede conectar y operar simultáneamente cuatro cámaras GMSL al mismo tiempo.

Conexión de Hardware

Aquí están las ranuras de conexión de la placa de expansión de cámara GMSL de la placa portadora Robotics J501 (necesitas preparar una placa de extensión con anticipación):

Los siguientes son los modelos de cámara GMSL que ya hemos soportado:

Instrucciones de Uso

note

Antes de habilitar la funcionalidad GMSL, por favor asegúrate de haber instalado una versión de JetPack con el controlador de la placa de expansión GMSL.

Configurar el archivo Jetson IO

sudo /opt/nvidia/jetson-io/jetson-io.py
note

Hay tres archivos overlay en total, a saber Seeed GMSL 1X4 3G, Seeed GMSL 1X4 6G, Seeed GMSL 1X4, y Orbbec Gemini 335Lg. Estos corresponden a la cámara 3G de SG3S, la cámara 6G de SG2 y SG8S, y la cámara de Orbbec respectivamente. Como se muestra en la Figura 3, por favor configura el archivo io según el modelo de tu cámara.

paso 2. Instala las herramientas de configuración de interfaz de video.

sudo apt update
sudo apt install v4l-utils wmctrl

Usar las cámaras de la Serie SGxxx

paso 1. Configurar el modo de sincronización de fotogramas (¡No está habilitado por defecto!).

info

Aquí demostramos cómo configurar cámaras de diferentes modelos y resoluciones.

#enables frame synchronization
v4l2-ctl -d /dev/video0 --set-ctrl=trig_mode=1
#Set the frame rate of the camera
v4l2-ctl -V --set-fmt-video=width=1920,height=1536 -c sensor_mode=0 --stream-mmap -d /dev/video0
#Set the camera format
v4l2-ctl -V --set-fmt-video=width=1920,height=1536 -c sensor_mode=0 -d /dev/video0
note

trig_mode = 1 habilita la sincronización de fotogramas, mientras que trig_mode = 0 deshabilita la sincronización de fotogramas. La configuración predeterminada es deshabilitar la sincronización de fotogramas.

--set-fmt-video sigue la resolución que se selecciona basada en la cámara que está conectada. Actualmente, hay tres opciones de sensor_mode, cada una correspondiente a una resolución diferente.

  • sensor_mode=0 -------> YUYV8_1X16/1920x1536
  • sensor_mode=1 -------> YUYV8_1X16/1920x1080
  • sensor_mode=2 -------> YUYV8_1X16/3840x2160

paso 2. Iniciar la cámara.

gst-launch-1.0 \
v4l2src device=/dev/video0 ! \
video/x-raw,format=YUY2,width=1920,height=1080,framerate=30/1 ! \
videoconvert ! \
videoscale ! \
xvimagesink

gst-launch-1.0 \
v4l2src device=/dev/video1 ! \
video/x-raw,format=YUY2,width=1920,height=1080,framerate=30/1 ! \
videoconvert ! \
videoscale ! \
xvimagesink

gst-launch-1.0 \
v4l2src device=/dev/video2 ! \
video/x-raw,format=YUY2,width=1536,height=1080,framerate=30/1 ! \
videoconvert ! \
videoscale ! \
xvimagesink

gst-launch-1.0 \
v4l2src device=/dev/video3 ! \
video/x-raw,format=YUY2,width=3840,height=2160,framerate=30/1 ! \
videoconvert ! \
videoscale ! \
xvimagesink

Recursos

Soporte Técnico y Discusión de Productos

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.

Loading Comments...