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
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.