Pular para o conteúdo principal

Hardware do Robotics J501 e Introdução

O reComputer Robotics J501 é uma placa carrier de IA de borda de alto desempenho projetada para aplicações avançadas de robótica e industriais. Compatível com módulos NVIDIA Jetson AGX Orin (32GB/64GB) em modo MAXN, oferece até 275 TOPS de desempenho de IA.

Equipado com amplas opções de conectividade — incluindo 1x 10GbE e 4x 1GbE Ethernet, slots duplos M.2 Key M para SSDs NVMe, slots M.2 para módulos 5G e Wi-Fi/BT, múltiplas portas USB 3.0, quatro interfaces CAN (2 nativas + 2 SPI-para-CAN), expansão de câmera GMSL2 e E/S abrangente incluindo DI/DO, I2S, UART e RS485 — ele atua como um poderoso cérebro robótico para fusão de múltiplos sensores complexos e processamento de IA em tempo real.

Pré-instalado com JetPack 6.2.1 e Linux BSP, garante uma implantação perfeita. Com suporte a frameworks como NVIDIA Isaac ROS, Hugging Face, PyTorch e ROS 2/1, o J501 conecta a tomada de decisão orientada por modelos de linguagem de grande porte ao controle físico de robôs, acelerando o desenvolvimento de robôs autônomos com interfaces prontas para uso e frameworks de IA otimizados.

Principais Recursos​

  • IA de alto desempenho: Até 275 TOPS com módulos Jetson AGX Orin 32/64GB, GPU Ampere e mecanismos DLA
  • Conectividade rica: Duplo M.2 Key M (NVMe); Key E (WiFi/BT) + Key B (5G); 1x 10GbE + 4x 1GbE; 3x USB 3.0; 2x USB-C
  • Quad CAN-FD: 2x nativo + 2x interfaces SPI-para-CAN com isolamento elétrico
  • Visão GMSL2: Interface GMSL2 única (1x) para conexão de câmera em alta velocidade
  • Design industrial: Entrada DC de 19-48V; operação de -10~60°C; interfaces isoladas; JetPack 6.2.1 pré-instalado
  • Pronto para robótica: Suporte a ROS 2/1, Isaac ROS; DI/DO, I2S, UART, RS485; otimizado para AMR e automação

Especificações​

Módulo de Sistema Jetson AGX Orin
EspecificaçõesreComputer Robotics J5011reComputer Robotics J5012
MóduloNVIDIA Jetson AGX Orin 32GBNVIDIA Jetson AGX Orin 64GB
Desempenho de IA200 TOPS275 TOPS
GPU1792 núcleos NVIDIA Ampere @ 930 MHz2048 núcleos NVIDIA Ampere @ 1.3 GHz
CPU8 núcleos Arm Cortex-A78AE @ 2.0 GHz12 núcleos Arm Cortex-A78AE @ 2.2 GHz
Memória32GB 256-bit LPDDR5 @ 204.8 GB/s64GB 256-bit LPDDR5 @ 204.8 GB/s
Codificador de Vídeo1x 4K60 / 3x 4K30 / 6x 1080p60 / 12x 1080p30 (H.265)2x 4K60 / 6x 4K30 / 8x 1080p60 / 16x 1080p30 (H.265)
Decodificador de Vídeo1x 8K30 / 2x 4K60 / 4x 4K30 / 9x 1080p60 / 18x 1080p30 (H.265)1x 8K30 / 3x 4K60 / 7x 4K30 / 11x 1080p60 / 22x 1080p30 (H.265)
Câmera CSIAté 6 câmeras (16 via canais virtuais)
16 pistas MIPI CSI-2
D-PHY 2.1 (até 40Gbps) / C-PHY 2.0 (até 164Gbps)
Mecânico100mm x 87mm
Conector Molex Mirror Mezz de 699 pinos
Placa de Transferência Térmica Integrada
Placa Carrier
Armazenamento2x M.2 Key-M (NVMe 2280 SSD)
1x M.2 Key-B (para módulos 4G/5G)
Rede1x M.2 Key-E (WiFi/BT)
1x RJ45 10GbE + 4x RJ45 1GbE
USB3x USB 3.0 Tipo-A
1x USB 3.0 Tipo-C (Recovery)
1x USB 2.0 Tipo-C (Debug UART)
DI/DO/CAN1x bloco de terminais 2x10P 3,81mm - 4x DI @12V + 4x DO @40V + 4x CAN (suporta CAN-FD, eletricamente isolado)
GMSL2x Conector Mini-Fakra (Para 8x Câmeras GMSL2) (opcional)
Serial2x DB9 (RS232/422/485)
Display1x HDMI 2.1
Ventoinha1×12 V (2,54 mm), 1×5 V (1,25 mm JST)
Botão1x Recovery + 1x Reset
LED3x LED (PWR, SSD e LED de Usuário)
RTC1x suporte para bateria CR1220, 1x header RTC de 2 pinos
Entrada de Energia19-48V DC via bloco de terminais 5,08mm (adaptador de energia não incluído)
Consumo de EnergiaMódulo Jetson AGX Orin: Até 60W (modo MAXN)
Pico total do sistema: 75W (incluindo periféricos)
SoftwareJetpack 6.2.1
Mecânico

Dimensões: 210mm x 180mm x 87mm (com suportes)
Peso: 200g
Montagem: Mesa / Parede / Trilho DIN (suporte DIN incluído nos acessórios)
Temperatura de Operação: -10℃~60℃ (25W) / -10℃~55℃ (MAXN)

Garantia2 anos
CertificaçãoRoHS, REACH, CE, FCC, UKCA, KC

Especificações da Placa de Extensão GMSL (Opcional)

DesserializadorMAX96712
Interface GMSL2x Conector Robotics-Fakra macho
Entrada GMSLAté 8x Câmeras GMSL2
Método de ConexãoCabo GMSL2 Fakra 1-para-4 M-M
Recurso da Interface POCSuporta transmissão simultânea de energia e dados

Visão Geral do Hardware​

📦 Gravar o Sistema Operacional JetPack​

Módulo Suportado​

Pré-requisitos​

  • PC host com Ubuntu
  • reComputer Robotics J501
  • Cabo de transmissão de dados USB Tipo-C
info

Recomendamos que você use dispositivos host físicos com Ubuntu em vez de máquinas virtuais. Consulte a tabela abaixo para preparar a máquina host.

Versão do JetPack Versão do Ubuntu (Computador Host)
18.04 20.04 22.04 24.04
JetPack 6.x ✅ ✅
JetPack 7.2 ✅ ✅ ✅

Nota: Para o JetPack 7.2, o Ubuntu 24.04 é suportado apenas para gravação e instalação de componentes no lado do alvo. Use Ubuntu 20.04 ou 22.04 se você precisar de componentes de desenvolvimento no host.

Preparar a Imagem do JetPack​

Aqui, precisamos baixar a imagem do sistema para o nosso PC com Ubuntu correspondente ao módulo Jetson que estamos usando:

Versão do JetPackMódulo Jetson GMSL Link de Download1SHA256
7.2 AGX Orin 64GB✅Downloaddddee915df6dcd939dc05743c6e5e9df
6c2b2b6836a969ce4ae4bc02d3078d50
AGX Orin 32GB✅Download6da5c7cd6c143460958a460a5f9d663
91cb49bb4da8f0e158ecbd34c0a6336f1
6.2.1 AGX Orin 64GB✅Download46167c63566fa07d9882be338becd44
7021c8fc0a73da18d0291c414cf5c6f4a
AGX Orin 32GB✅Downloade868fd8c7ad05d3acc8c9808f42e1835
28f11df14f48cb6ae16464adb4f23d1f
perigo

Os arquivos de imagem do JetPack são grandes e podem levar cerca de 60 minutos para serem baixados. Aguarde até que o download seja concluído.

info

Para verificar a integridade do firmware baixado, você pode comparar o valor de hash SHA256.

Em uma máquina host Ubuntu, abra o terminal e execute o comando sha256sum <File> para obter o valor de hash SHA256 do arquivo baixado. Se o hash resultante corresponder ao hash SHA256 fornecido no wiki, isso confirma que o firmware que você baixou está completo e intacto.

⚙️ Todos os arquivos .dts e outros códigos-fonte das placas carrier Jetson da SEEED podem ser baixados em Linux_for_Tegra

Entrar no modo Force Recovery​

info

Antes de prosseguirmos para as etapas de instalação, precisamos garantir que a placa esteja em modo force recovery.

Passo a passo

Passo 1. Conecte um cabo de transmissão de dados USB Type-C entre a porta USB2.0 DEVICE e o PC host com Ubuntu.

Passo 2. Use um pino e insira no orifício RECOVERY para pressionar o botão de recuperação e mantenha-o pressionado.

Passo 3. Conecte a fonte de alimentação.

Passo 4. Solte o botão de recuperação.

Passo 5. No PC host Linux, abra uma janela do Terminal e insira o comando lsusb. Se o conteúdo retornado tiver uma das seguintes saídas de acordo com o Jetson SoM que você usa, então a placa está em modo force recovery.

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

A imagem abaixo é para AGX Orin 32GB:

Gravar no Jetson​

Passo 1: Extraia o arquivo de imagem baixado:

cd <path-to-image>
sudo tar xpf mfi_xxxx.tar.gz
# For JetPack 7.2 example: sudo tar xpf mfi_recomputer-robo-agx-orin-32g-j501-7.2.0-39.2.0-2026-06-26.tar.gz
# For JetPack 6.2.1 example: sudo tar xpf mfi_recomputer-robo-agx-orin-32g-j501-6.2.1-36.4.4-2026-02-11.tar.gz

Passo 2: Execute o seguinte comando para gravar o sistema JetPack no 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

Você verá a seguinte saída se o processo de gravação for bem-sucedido

nota

O comando de gravação pode levar de 2 a 10 minutos.

Passo 3: Conecte o Robotics J501 a um monitor usando o adaptador PD para HDMI para conectar a um monitor que suporte entrada HDMI, ou conecte diretamente a um monitor que suporte entrada PD usando o cabo PD, e conclua a configuração inicial:

info

Conclua a Configuração do Sistema de acordo com suas necessidades.

🔌 Uso das interfaces​

A seguir serão apresentadas as várias interfaces da placa Robotics J501 e como usá-las.

M.2 Key M​

A J501 inclui dois slots M.2 Key M que suportam SSDs NVMe PCIe Gen4x4 para expansão de armazenamento em alta velocidade.

Os SSDs compatíveis são os seguintes​

Conexão de hardware​

Instruções de uso​

Abra o terminal no dispositivo Jetson e insira o seguinte comando para testar a velocidade de leitura e gravação do SSD.

Passo 1. Crie o diretório e o arquivo de teste:

mkdir ssd
touch ~/ssd/test

Passo 2. Teste o desempenho de gravação:

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

Passo 3. Verifique as informações do SSD:

nvme list
perigo

Execute o comando sudo rm /home/$USER/ssd/test para excluir os arquivos de cache após a conclusão do teste.

M.2 Key E (WiFi/BT)​

O slot M.2 Key E suporta módulos Wi-Fi 6 e Bluetooth 5.x para conectividade sem fio.

Conexão de hardware​

dica

Observação: Antes de usar a interface, você deve remover os parafusos da carcaça e instalar o módulo correspondente conforme mostrado na figura abaixo.

Instruções de uso​

Teste de desempenho: Para testar o desempenho do Wi-Fi, use o seguinte comando (substitua o endereço IP pelo do seu servidor de teste):

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

A funcionalidade Bluetooth está disponível por meio do slot M.2 Key E. Teste de Bluetooth:

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

O slot M.2 Key B suporta módulos celulares 4G/5G com suporte a Nano SIM.

Conexão de hardware​

dica

Observação: Antes de usar a interface, você deve remover os parafusos da carcaça e instalar o módulo correspondente conforme mostrado na figura abaixo.

Instruções de uso​

Passo 1. Verificar reconhecimento de hardware

lsusb 

Este comando exibe uma lista de todos os dispositivos USB conectados ao sistema, juntamente com seu fabricante (ID), tipo e outras informações. Por exemplo, a saída pode mostrar um dispositivo da Quectel Wireless Solutions Co., Ltd. EM12-G, indicando que o módulo 5G está presente.

Passo 2. Confirmar carregamento do driver É essencial garantir que o driver option, que é necessário para o módulo 5G, esteja carregado. Podemos usar o comando lsmod para verificar.

lsmod | grep option 

Se o driver option for carregado com sucesso, informações relevantes sobre o driver serão exibidas na saída.

Passo 3. Configurar o ModemManager ModemManager é uma ferramenta para gerenciar dispositivos modem, e precisa ser instalado e reiniciado.

sudo apt install modemmanager 
sudo systemctl restart ModemManager

O comando apt install é usado para instalar o pacote ModemManager, enquanto systemctl restart reinicia o serviço ModemManager para garantir que as novas configurações entrem em vigor.

Passo 4. Verificar identificação do módulo Podemos usar o comando mmcli -L para verificar se o ModemManager consegue identificar corretamente o módulo 5G.

mmcli -L 

Se o módulo 5G for reconhecido, será exibida uma saída semelhante a /org/freedesktop/ModemManager1/Modem/0, indicando o caminho para o dispositivo modem detectado.

Passo 5. Definir o APN APN (Access Point Name) é crucial para conectar um dispositivo móvel à rede. Usaremos o comando nmcli para criar um perfil de portadora. Tomando a China Mobile como exemplo, podemos criar um arquivo de configuração com os seguintes comandos:

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

Este comando adiciona uma nova conexão do tipo GSM (Global System for Mobile Communications), especificando o APN como "CMNET" e usando configuração IPv4 automática.

Passo 6. Ativar a conexão Após criar o perfil de portadora, precisamos ativar a conexão.

sudo nmcli con up "gsm" 

Este comando ativa a conexão GSM e, se for bem-sucedido, uma mensagem de confirmação será exibida.

Passo 7. Verificar novamente a identificação do módulo Execute novamente o comando mmcli -L para garantir que o módulo continue sendo reconhecido após configurar o APN.

mmcli -L 

Passo 8. Verificar o status do módulo Por fim, podemos usar o comando mmcli -m 0 para visualizar informações detalhadas sobre o módulo, como alocação de IP, operadora e status da conexão de rede.

mmcli -m 0 

Este comando fornece detalhes abrangentes sobre o módulo 5G, incluindo fabricante, modelo, tecnologias de rede suportadas e atuais, status do dispositivo e operadoras de rede conectadas.

Ethernet​

O Robotics J501 oferece 1x 10GbE (nativo) e 4x 1GbE (via switch PCIe) portas RJ45. A porta 10GbE possui PHY TI TQSPH-10G, suportando cinco velocidades: 10/5/2.5/1/0.1 GbE. As portas 1GbE suportam velocidades de 10/100/1000M.

Indicadores LED por porta:

  • LED verde: ACESO para link 10G/5G/2.5G/1000M
  • LED amarelo: Pisca para atividade de rede

Para testar a velocidade da porta Ethernet, use iperf3 da seguinte forma:

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

<server_ip> é o endereço IP do servidor iperf3. O cliente se conectará a esse servidor para realizar um teste de largura de banda. <bind_ip> vincula o endereço IP local especificado como a origem do tráfego de teste.

LED​

O J501 possui vários LEDs de status:

  • LED PWR: Status de energia (verde)
  • LED ACT: Atividade do sistema (amarelo)
  • LED USR: Controle via GPIO

Instruções de uso​

A seguir é demonstrado como controlar os LEDs USER para ficarem verdes, vermelhos ou azuis.

#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

O efeito do controle de LED é mostrado na figura abaixo:

USB​

O Robotics J501 oferece 4x portas USB 3.2 Tipo A (via um hub interno USB 3.1 Gen1, suportando taxas de dados de até 5Gbps para conexão de periféricos de alta velocidade, dispositivos de armazenamento ou câmeras) e 1x porta USB 2.0 Tipo C de depuração (que funciona como um console serial para acessar logs do sistema, depurar problemas de boot e realizar atualizações de firmware).

Teste de velocidade USB-A​

Crie um script para testar a velocidade do dispositivo USB:

vim test_usb.sh

Cole o seguinte conteúdo:

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

Torne o script executável e teste:

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
nota

Primeiro confirme o ponto de montagem real do seu dispositivo USB usando o comando df -h ou lsblk!

Porta USB 2.0 Tipo C​

Usando esta porta serial, por meio do cabo de dados USB-C, você pode monitorar no PC as informações de depuração de entrada e saída.

Passo 1. Abra a ferramenta de porta serial (aqui usamos a ferramenta MobaXterm como exemplo) e crie uma nova sessão.

Passo 2. Selecione a ferramenta Serial.

Passo 3. Selecione a porta serial correspondente, defina a taxa de baud para 115200 e clique em "OK".

Passo 4. Faça login no seu reComputer Super com o nome de usuário e a senha.

Ventoinha​

O Robotics J501 oferece dois conectores de ventoinha PWM de 4 pinos projetados para resfriar tanto o módulo Jetson quanto os componentes da placa carrier:

  • Ventoinha 12V: conector 2,54 mm, máx. 1,5A, adequada para resfriamento de alto desempenho
  • Ventoinha 5V: conector JST 1,25 mm, máx. 1,5A, ideal para resfriamento silencioso de baixo consumo

O controle PWM permite ajuste dinâmico e preciso da velocidade com base na temperatura do sistema, possibilitando resfriamento eficiente enquanto minimiza ruído e consumo de energia.

Pinagem da ventoinha 12V:

O conector da ventoinha de 12V (2,54 mm) possui a seguinte pinagem:

Instruções de uso​

Controle PWM manual:

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

A política térmica padrão é pré-configurada em /etc/nvpmodel.conf. Para perfis personalizados, consulte o NVIDIA Jetson Linux Developer Guide.

Além disso, podemos definir manualmente a velocidade da ventoinha usando a ferramenta jtop.

Você pode inserir o seguinte comando no terminal para instalar o jtop.

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

Em seguida, reinicie seu reComputer Mini:

sudo reboot

Após instalar o jtop, você pode iniciá-lo no terminal:

jtop

CAN​

O reComputer Robotics J501 está equipado com 4 interfaces CAN independentes (CAN 0, CAN 1, CAN 2, CAN 3), que compartilham o conector J25 2x10P com interfaces DI/DO. Essas interfaces suportam os protocolos de comunicação Classic CAN e CAN FD, apresentando alta performance de anti-interferência e transmissão de dados em tempo real, o que as torna adequadas para cenários de controle industrial, como eletrônica automotiva, automação industrial e robótica.

Instruções de uso​

Este é o diagrama esquemático da interface CAN.

Comunicação CAN​

Esta seção demonstra a conexão CAN0↔CAN1 e CAN2↔CAN3 no Jetson e mostra como enviar e receber dados entre esses pares tanto no modo Classic CAN quanto no modo CAN‑FD.

Nome do canalTipo de interfaceNome do pinoChip GPIONúmero GPIOControle do resistor de terminação
CAN0NativoCAN0_120R_ENgpiochip29gpiochip2 line9
CAN1NativoCAN1_120R_ENgpiochip28gpiochip2 line8
CAN2SPI-para-CANCAN2_120R_ENgpiochip210gpiochip2 line10
CAN3SPI-para-CANCAN3_120R_ENgpiochip212gpiochip2 line12

Os resistores de terminação de 120 Ω para os quatro canais CAN são controlados pelas linhas GPIO correspondentes em gpiochip2. Os sinais de controle são ativos em nível baixo: definir uma linha como 0 conecta o resistor de terminação, enquanto definir como 1 desconecta o resistor de terminação.

Digite o seguinte comando para visualizar as linhas GPIO:

gpioinfo gpiochip2

Use os seguintes comandos para conectar os resistores de terminação:

sudo gpioset --mode=wait gpiochip2 9=0  # CAN0
sudo gpioset --mode=wait gpiochip2 8=0 # CAN1
sudo gpioset --mode=wait gpiochip2 10=0 # CAN2
sudo gpioset --mode=wait gpiochip2 12=0 # CAN3

Use os seguintes comandos para desconectar os resistores de terminação:

sudo gpioset --mode=wait gpiochip2 9=1  # CAN0
sudo gpioset --mode=wait gpiochip2 8=1 # CAN1
sudo gpioset --mode=wait gpiochip2 10=1 # CAN2
sudo gpioset --mode=wait gpiochip2 12=1 # CAN3

Modo Classic CAN​

O script a seguir implementa o teste de comunicação em loopback entre CAN0/CAN1 e CAN2/CAN3, incluindo habilitação do resistor de terminação, configuração da taxa de bits e transmissão bidirecional de dados.

O diagrama de fiação é mostrado abaixo:

DePara
CAN0_HCAN1_H
CAN0_LCAN1_L
CAN2_HCAN3_H
CAN2_LCAN3_L

O diagrama de fiação é mostrado abaixo:

Crie test_can.sh para testar a transmissão e recepção de dados entre CAN0↔CAN1 e CAN2↔CAN3 no modo padrão:

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

O código do script para test_can.sh é o seguinte:

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
nota

No script de teste CAN, substitua PW pela sua própria senha do Jetson.

A transmissão e recepção de dados entre CAN0 e CAN1 será concluída:

Modo CAN-FD​

CAN FD suporta taxas de transmissão de dados mais altas e comprimentos de quadro de dados maiores. O script a seguir implementa o teste de loopback CAN FD.

Crie test_canfd.sh para testar a transmissão e recepção de dados entre CAN0↔CAN1 e CAN2↔CAN3 no modo CAN-FD:

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

O código do script para test_canfd.sh é o seguinte:

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
nota

No script de teste CAN, substitua PW pela sua própria senha do Jetson.

A transmissão e recepção de dados entre CAN0↔CAN1 e CAN2↔CAN3 será concluída:

DI/DO​

As interfaces DI/DO do reComputer Robotics J501 são integradas no conector J25 2x10P, compartilhando a interface com as interfaces CAN. Elas suportam 4 canais de entrada digital e 4 canais de saída digital, com transmissão de sinal estável e adaptação de tensão em nível industrial, adequadas para conectar sensores digitais, relés e outros dispositivos periféricos.

Conexão de Hardware​

Canais de Entrada Digital (DI)​

Nome do CanalCaracterísticas de TensãoRótulo GPIONome do PinoChip GPIONúmero GPIO
DI_12V_1Entrada 12V adaptativaDI_1_GPIO17PP.04gpiochip096
DI_12V_2Entrada 12V adaptativaDI_1_GPIO18PQ.04gpiochip0104
DI_12V_3Entrada 12V adaptativaDI_1_GPIO19PN.02gpiochip086
DI_12V_4Entrada 12V adaptativaDI_1_GPIO33PM.07gpiochip083

Canais de Saída Digital (DO)​

Nome do CanalCaracterísticas de TensãoRótulo GPIONome do PinoChip GPIONúmero GPIOInformação Adicional
DO_40V_1Saída dreno aberto; ~0V (baixo) quando não puxado para alto, 12V (alto) quando puxado para altoDO_1_GPIOPAA.04gpiochip14Número correspondente: 320
DO_40V_2Saída dreno aberto; ~0V (baixo) quando não puxado para alto, 12V (alto) quando puxado para altoDO_2_GPIOPAA.07gpiochip17Número correspondente: 323
DO_40V_3Saída dreno aberto; ~0V (baixo) quando não puxado para alto, 12V (alto) quando puxado para altoDO_3_GPIOPBB.01gpiochip19Número correspondente: 325
DO_40V_4Saída dreno aberto; ~0V (baixo) quando não puxado para alto, 12V (alto) quando puxado para altoDO_4_GPIOPBB.00gpiochip18Número correspondente: 324

As principais definições de pinos para as interfaces DI/DO no conector J25 são as seguintes (a numeração dos pinos corresponde ao conector físico):

Número do PinoRótulo de FunçãoDescrição
1DI_12V_1Canal de Entrada Digital 12V 1
3DI_12V_2Canal de Entrada Digital 12V 2
5DI_12V_3Canal de Entrada Digital 12V 3
7DI_12V_4Canal de Entrada Digital 12V 4
9GND_DITerra para Canais de Entrada Digital
2DO_40V_1Canal de Saída Digital 40V 1
4DO_40V_2Canal de Saída Digital 40V 2
6DO_40V_3Canal de Saída Digital 40V 3
8DO_40V_4Canal de Saída Digital 40V 4
10GND_DOTerra para Canais de Saída Digital
nota

Para o pinout completo (incluindo interfaces CAN), consulte a documentação de hardware do reComputer Robotics J501 para evitar conexões incorretas.

Instruções de Uso​

Operação de Saída Digital (DO)

As interfaces DO adotam saída de dreno aberto. Você pode definir o nível de saída (alto/baixo) por meio de comandos para controlar periféricos como relés e LEDs.

Execute o seguinte comando para habilitar o canal DO (saída de 12 V, alimentado pelo resistor de pull-up externo e fonte de alimentação de 12 V):

# 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 puxar para nível alto:

DO depois de puxar para nível alto:

Execute o seguinte comando para desabilitar o canal DO (saída ~0 V):

# 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

Operação de Entrada Digital (DI)

Use o comando gpioget para ler o nível de entrada do canal DI (valor de retorno 1 = nível alto, 0 = nível baixo) e obter o status dos dispositivos periféricos.

O comando para ler o nível do canal DI é o seguinte:

# 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​

Conexão de Hardware​

Instruções de Uso​

Use fios Dupont para conectar os pinos centrais do canal SPI de destino (tomando /dev/spidev2.0 como exemplo): Conecte o pino MOSI do SPI2.0 ao seu pino MISO (realizando transmissão/recepção de dados em loopback).

O diagrama de fiação é o seguinte:

nota

Para usar SPI, remova a tampa lateral do dispositivo com uma chave de fenda, conforme mostrado acima.

Etapa 1: Carregar o Módulo de Kernel SPI (Pré-requisito) Antes de operar a interface SPI, certifique-se de que o módulo de kernel spidev esteja carregado (o sistema padrão pode pré-carregá-lo, mas é recomendável verificar manualmente):

sudo modprobe spidev
nota

Se o comando for executado sem mensagens de erro, significa que o módulo foi carregado com sucesso; se o módulo já estiver carregado, o comando não retornará nenhuma informação, o que é um fenômeno normal.

Etapa 2: Ver os Nós de Dispositivo SPI Digite o seguinte comando no terminal para ver o nome do dispositivo mapeado pela interface SPI do reComputer Robotics J501:

ls /dev/spidev*

Se nenhum nó de dispositivo for exibido, significa que o módulo spidev não foi carregado com sucesso. Execute novamente sudo modprobe spidev e verifique o log do sistema para solução de problemas.

Etapa 3: Obter e Compilar o Código de Teste SPI Obtenha o código de teste spidev-test do GitHub e compile-o:

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

Etapa 4: Executar o Programa de Teste SPI Digite o seguinte comando no terminal para executar o programa de teste SPI (tomando /dev/spidev2.0 como exemplo):

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

Etapa 5: Verificar o Resultado do Teste Após executar o comando de teste, você pode observar o status de transmissão e recepção de dados da interface SPI2.0 no terminal. A saída principal é a seguinte:

Padrão de julgamento principal: Os dados TX (transmitidos) são consistentes com os dados RX (recebidos), indicando que o teste de loopback SPI foi bem-sucedido e que a função da interface SPI está normal.

UART​

O reComputer Robotics J501 é equipado com 2 interfaces UART independentes (UART1 e UART2) que suportam os modos de comunicação RS232, RS422 e RS485, apresentando transmissão de sinal estável e ampla compatibilidade com dispositivos periféricos.

Conexão de Hardware​

Canais de Interface UART​

Nome do CanalNó de DispositivoModos SuportadosTaxa de Baud PadrãoComando de Habilitação GPIOMétodo de Troca de Modo
UART1 (DB9-1)/dev/ttyTHS1RS232, RS422, RS485RS232: 115200 bps; RS422/RS485: 9600 bpsgpioset --mode=wait gpiochip0 2=0Chave DIP SW3 (DIP de 8 pinos)
UART2 (DB9-2)/dev/ttyTHS4RS232 (padrão)115200 bpsgpioset --mode=wait gpiochip2 15=0RS232 fixa (sem chave)

Definição de Pinagem (Conector DB9)

A função de cada pino DB9 varia conforme o modo de comunicação. Consulte a tabela abaixo para uma fiação precisa (a numeração dos pinos segue as especificações padrão do conector DB9 macho):

Número do Pino DB9Função no Modo RS232Função no Modo RS422Função no Modo RS485
1-TXD- (Transmit Data-)Data- (Differential Data-)
2RXD (Receive Data)TXD+ (Transmit Data+)Data+ (Differential Data+)
3TXD (Transmit Data)RXD+ (Receive Data+)-
4-RXD- (Receive Data-)-
5GND (Ground)GND (Ground)GND (Ground)
6---
7RTS (Request to Send)--
8CTS (Clear to Send)--
9---

Configuração de Modo (Chave DIP SW3)

Somente a UART1 (DB9-1) suporta troca de modo por meio da chave DIP SW3 (UART2 é fixa em RS232). A chave é do tipo DIP de 8 pinos, com pinos de configuração principais rotulados como MODE_0, MODE_1 e MODE_2 no esquemático.

A interface é mostrada na figura abaixo:

Regras de Configuração

Modo de OperaçãoCombinação da Chave DIP (MODE_2, MODE_1, MODE_0)Operação do Estado da Chave
RS2320 (OFF), 0 (OFF), 1 (ON)MODE_0: alternar para ON; MODE_1/MODE_2: manter OFF
RS4220 (OFF), 0 (OFF), 0 (OFF) ou 1 (ON), 0 (OFF), 0 (OFF)MODE_0/MODE_1: manter OFF; MODE_2: opcional (ON/OFF)
RS4850 (OFF), 1 (ON), 0 (OFF) ou 1 (ON), 1 (ON), 0 (OFF)MODE_1: alternar para ON; MODE_0/MODE_2: opcionais (ON/OFF)
nota

Após concluir a conexão de hardware, use um software de terminal (por exemplo, CuteCom) para testar a função de comunicação UART. Se o CuteCom não estiver instalado, execute sudo apt-get install cutecom para instalá-lo. Certifique-se de que o canal UART foi habilitado por meio do comando GPIO.

Instruções de Uso​

Comandos de Habilitação GPIO

Antes de conectar, execute o comando de habilitação GPIO no terminal para ativar o canal UART correspondente:

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

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

Teste no Modo RS232​

Aqui você pode usar um adaptador USB para RS232 para testar a interface. Utilizamos o Adaptador UGREEN USB para RS232 em nossos testes.

O diagrama de fiação é mostrado abaixo:

Etapa 1: Iniciar o CuteCom Execute sudo cutecom para iniciar o software de terminal CuteCom.

Etapa 2: Configurar os Parâmetros da Porta Serial Configure a porta serial com os seguintes parâmetros:

  • Dispositivo: /dev/ttyTHS1 (UART1) ou /dev/ttyTHS4 (UART2)
  • Taxa de Baud: 115200 bps
  • Bits de Dados: 8, Paridade: Nenhuma, Bits de Parada: 1, Controle de Fluxo: Nenhum

Etapa 3: Abrir a Porta Serial Clique em "Open Device" para abrir a porta serial.

Etapa 4: Enviar Dados de Teste Envie dados de teste (por exemplo, "232 test from jetson") e verifique a recepção de dados pelo dispositivo periférico.

Teste no Modo RS485​

Aqui você pode usar um adaptador USB para RS485 para testar a interface. Utilizamos o Adaptador DTech USB para RS485 em nossos testes.

O diagrama de fiação é mostrado abaixo:

Etapa 1: Iniciar o CuteCom Execute sudo cutecom para iniciar o software de terminal CuteCom.

Etapa 2: Configurar os Parâmetros da Porta Serial Configure a porta serial com os seguintes parâmetros:

  • Dispositivo: /dev/ttyTHS1
  • Taxa de Baud: 9600 bps
  • Bits de Dados: 8, Paridade: Nenhuma, Bits de Parada: 1, Controle de Fluxo: Nenhum

Etapa 3: Abrir a Porta Serial Clique em "Open Device" para abrir a porta serial.

Etapa 4: Enviar Dados de Teste Envie dados de teste (por exemplo, "485 test from jetson") e verifique a recepção de dados pelo dispositivo periférico.

Teste no Modo RS422​

Aqui você pode usar um adaptador USB para RS422 para testar a interface. Utilizamos o Adaptador DTech USB para RS485 em nossos testes.

O diagrama de fiação é mostrado abaixo:

Passo 1: Iniciar o CuteCom Execute sudo cutecom para iniciar o software de terminal CuteCom.

Passo 2: Configurar os parâmetros da porta serial Configure a porta serial com os seguintes parâmetros:

  • Dispositivo: /dev/ttyTHS1
  • Taxa de transmissão (Baud Rate): 9600 bps
  • Bits de dados: 8, Paridade: Nenhuma, Bits de parada: 1, Controle de fluxo: Nenhum

Passo 3: Abrir a porta serial Clique em "Open Device" para abrir a porta serial.

Passo 4: Enviar dados de teste Envie dados de teste (por exemplo, "422 test from jetson") e verifique o recebimento de dados pelo dispositivo periférico.

RTC​

O reComputer Robotics J501 inclui um RTC de hardware com bateria de backup para manter a hora com precisão. Existem duas maneiras de fornecer energia de backup para o RTC:

  1. Usando o suporte para bateria tipo moeda CR1220 (J14)
  2. Usando o conector RTC 2-Pin Header - J4 para conexão de alimentação externa

Conexão de hardware​

Método 1: Usando o suporte para bateria tipo moeda CR1220

Conecte uma bateria tipo moeda CR1220 de 3 V ao soquete RTC na placa, como mostrado abaixo. Certifique-se de que a extremidade positiva (+) da bateria esteja voltada para cima.

Método 2: Usando o conector RTC 2-Pin Header

O conector RTC 2-Pin Header fornece uma maneira alternativa de conectar alimentação externa ao RTC.

Instruções de uso​

Passo 1. Conecte uma bateria de RTC conforme mencionado acima.

Passo 2. Ligue o reComputer Robotics J501.

Passo 3. Na área de trabalho do Ubuntu, clique no menu suspenso no canto superior direito, navegue até Settings > Date & Time, conecte-se a uma rede via cabo Ethernet e selecione Automatic Date & Time para obter a data/hora automaticamente.

nota

Se você não tiver se conectado à internet via Ethernet, poderá definir a data/hora manualmente aqui.

Passo 4. Abra uma janela de terminal e execute o comando abaixo para verificar a hora do relógio de hardware:

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

Passo 5. Desconecte a conexão de rede e reinicie o dispositivo. Você verá que o sistema perdeu a alimentação, mas o horário ainda funciona normalmente.

Display​

O Robotics J501 está equipado com uma interface HDMI para saída de vídeo em alta resolução.

Porta de extensão​

A placa carrier Robotics J501 possui um conector de expansão de câmera para placa de extensão GMSL. Ela pode conectar e operar simultaneamente quatro câmeras GMSL ao mesmo tempo.

Conexão de hardware​

A seguir estão os slots de conexão da placa de expansão de câmera GMSL da placa carrier Robotics J501 (é necessário preparar uma placa de extensão com antecedência):

A seguir estão os modelos de câmeras GMSL que já suportamos:

Instruções de uso​

nota

Antes de habilitar a funcionalidade GMSL, certifique-se de que você instalou uma versão do JetPack com o driver da placa de expansão GMSL.

Configurar o arquivo Jetson IO​

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

Existem três arquivos de overlay no total, a saber, Seeed GMSL 1X4 3G, Seeed GMSL 1X4 6G, Seeed GMSL 1X4 e Orbbec Gemini 335Lg. Estes correspondem, respectivamente, à câmera 3G do SG3S, à câmera 6G do SG2 e SG8S e à câmera da Orbbec. Como mostrado na Figura 3, configure o arquivo io de acordo com o modelo da sua câmera.

Passo 2. Instale as ferramentas de configuração da interface de vídeo.

sudo apt update
sudo apt install v4l-utils wmctrl

Usar as câmeras da série SGxxx​

Passo 1. Definir o modo de sincronização de quadros (não está habilitado por padrão!).

info

Aqui demonstramos como configurar câmeras de diferentes modelos e resoluções.

#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
nota

trig_mode = 1 habilita a sincronização de quadros, enquanto trig_mode = 0 desabilita a sincronização de quadros. A configuração padrão é desabilitar a sincronização de quadros.

--set-fmt-video segue a resolução que é selecionada com base na câmera conectada. Atualmente, existem três opções de sensor_mode, cada uma correspondendo a uma resolução diferente.

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

Passo 2. Iniciar a câmera.

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​

Suporte técnico e discussão sobre o produto​

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...