2 pontos por GN⁺ 2024-06-04 | 1 comentários | Compartilhar no WhatsApp

Guia de desenvolvimento de dispositivos USB

Índice

  • Contexto
  • O que é USB?
  • Fios USB
    • Observações sobre USB-C
    • Transmissão de dados por par diferencial
  • USB na PCB
  • As diferentes velocidades do USB
    • Observação rápida sobre velocidade na PCB
  • Camadas de protocolo e software
    • Classes de dispositivos USB e como o host as utiliza
  • Criando um dispositivo de porta serial
    • Microcontroladores STM32 e placas Nucleo
    • Configuração da porta USB real
    • Escrita do software
    • Gravação e execução
  • Conclusão

Contexto

  • Dispositivos USB são úteis para expandir as funcionalidades de um computador.
  • O objetivo deste texto é orientar o processo de criação de um dispositivo USB do início ao fim.

O que é USB?

  • USB é um padrão industrial para troca de dados e fornecimento de energia.
  • USB é um barramento serial, no qual os bits são transmitidos um por um.
  • USB vai além de uma simples especificação de conexão e também inclui um protocolo de comunicação.

Fios USB

  • Uma conexão USB 2.0 tem 4 fios principais:
    • Fio de +5V: fornece energia do host para o dispositivo.
    • Fios D- e D+: transmitem 1 bit como um par diferencial.
    • Fio GND: faz o papel de aterramento.

Observações sobre USB-C

  • USB-C pode ser conectado em ambos os sentidos.
  • USB-C não indica velocidade nem versão.

Transmissão de dados por par diferencial

  • Um par diferencial usa dois fios para transmitir um único bit.
  • O par diferencial é vantajoso para eliminar ruído de tensão.

USB na PCB

  • Ao adicionar um conector USB à PCB, é preciso manter o mesmo comprimento no par diferencial.
  • As trilhas do par diferencial devem ficar próximas entre si.
  • Também é necessário manter uma impedância específica.

As diferentes velocidades do USB

  • USB 2.0 pode operar em full speed (12 Mbit/s) e high speed (480 Mbit/s).
  • Host e dispositivo negociam a velocidade durante a conexão.

Observação rápida sobre velocidade na PCB

  • Em full speed, os requisitos de impedância e comprimento de trilha são menos rigorosos.

Camadas de protocolo e software

  • USB funciona como uma rede, com vários endpoints e configurações.
  • O host reconhece e usa dispositivos USB por meio de drivers.

Classes de dispositivos USB e como o host as utiliza

  • O sistema operacional reconhece várias classes de dispositivos USB.
  • Por exemplo, há dispositivos de armazenamento em massa e dispositivos seriais.

Criando um dispositivo de porta serial

  • Vamos criar um dispositivo USB simples de porta serial.
  • Serão usados um microcontrolador STM32 e uma placa Nucleo.

Microcontroladores STM32 e placas Nucleo

  • É usada a placa NUCLEO-F103RB.
  • A placa é composta por um programador e um microcontrolador.

Configuração da porta USB real

  • Configure a porta USB e ajuste o jumper para usar alimentação externa de 5V.
  • Defina os pinos PA12 e PA11 como USB_DP e USB_DM.
  • Conecte um resistor de 1.5 kΩ ao pino PA12 para fazer o pull-up.

Escrita do software

  • Configure o modo de dispositivo USB no STM32CubeIDE.
  • Defina-o como um dispositivo de porta serial para que o host o reconheça.
  • Escreva o código para acender o LED na rotina CDC_Receive_FS.

Gravação e execução

  • Compile o código e grave-o na placa usando o STM32CubeProgrammer.
  • Conecte a placa a uma fonte externa de 5V e controle o LED pela porta serial.

Conclusão

  • Foi criado um dispositivo USB de porta serial do início ao fim.
  • A grande quantidade de código boilerplate e a configuração baseada em UI do STM32CubeIDE podem ser incômodas.
  • Usar um SoC baseado em Linux pode ser uma abordagem mais limpa.

Opinião do GN⁺

  • Código boilerplate do STM32CubeIDE: muito código boilerplate pode ser gerado, o que pode dificultar a revisão de código.
  • Abordagem baseada em Linux: usar um SoC Linux permite APIs mais padronizadas e uma separação de código mais limpa.
  • Impedância e comprimento de trilha: para conexões USB de alta velocidade, é preciso atenção à impedância e ao comprimento das trilhas.
  • Vantagens do par diferencial: o par diferencial é vantajoso para eliminar ruído de tensão, permitindo transmissão de dados estável.
  • Escolha do microcontrolador: é importante escolher o microcontrolador adequado conforme o projeto. Além do STM32, há várias outras opções.

1 comentários

 
GN⁺ 2024-06-04
Comentários do Hacker News
  • Opinião sobre o uso de microcontroladores ST: Bom artigo sobre uso de USB, mas muito focado em microcontroladores ST. Recentemente, o ecossistema ESP32 tem oferecido uma abordagem plug and play mais fácil. Para iniciantes, usar um IC controlador USB básico pode ser mais adequado do que trabalhar em alta velocidade.

  • Experiência com testes de conformidade USB: Há muito tempo, quando fiz testes de conformidade USB, houve muitos problemas no teste de corrente de inrush. É fácil focar no projeto digital de alta velocidade, mas nos testes de conformidade os pequenos detalhes importam.

  • Dicas sobre USB-C: É preciso conectar o pino CC ao resistor adequado. No USB 2.0, roteamento diferencial e impedância não são um grande problema. Basta conectar de forma direta com comprimentos parecidos.

  • Sugestão de alternativa ao STM32: Se soldar processadores ARM for difícil, também vale considerar usar um controlador pequeno ou a biblioteca VUSB. Se você prefere programação no estilo Arduino, muitas placas podem ser usadas facilmente como dispositivos USB.

  • ESP32 e métodos baratos de hacking: Uso principalmente ESP32, mas também é possível aproveitar a placa controladora de um teclado USB descartado para criar um controlador customizado barato e robusto.

  • Suporte a recepção acima de 64 bytes no STM32: Pergunta sobre como receber frames com mais de 64 bytes. A configuração descrita no manual de referência não usa registradores comuns, o que torna isso difícil.

  • Experiência escrevendo código USB bare metal: Escrever código USB bare metal em um MCU é mais complexo do que SPI ou I2C. É melhor aproveitar ao máximo o software fornecido pelo fabricante. Para transferência em alta velocidade, use bulk transfer e verifique os problemas no lado do host.

  • Criação de dispositivo USB virtual: Uso um Raspberry Pi para criar um dispositivo USB virtual e conectá-lo ao PC. Estou usando isso para emular uma câmera MTP e enganar o software.

  • Pergunta sobre placa de desenvolvimento com suporte a USB 3: Estou tentando prototipar um monitor USB-C sink, mas está difícil encontrar uma placa com potência suficiente para receber DisplayPort.

  • Custo de usar USB: USB não é gratuito. É preciso pagar uma taxa única de US$ 6.000 para obter um Vendor ID.