Por que prefiro o RP2040
(dgroshev.com)- O RP2040 da Raspberry Pi é um microcontrolador para uso em eletrônicos de consumo; é barato e fácil de encontrar em estoque em grande volume, reduzindo o peso da escolha no início do desenvolvimento
- Em vez de oferecer várias variantes, a Raspberry Pi se concentrou em um único componente, reduzindo a otimização fina de especificações, mas fazendo com que perguntas, exemplos, bibliotecas e ferramentas se concentrassem em um só lugar
- O preço de cerca de 70 centavos pode ser desvantajoso para otimizar o custo de componentes na produção em massa, mas em projetos como o Late Mate a redução do custo de desenvolvimento pode trazer um ganho maior
- A configuração com dois núcleos, 30 GPIOs, USB, UART/SPI/I2C/PWM, mais RAM interna e ausência de flash embutido se aproxima de um compromisso suficiente e flexível
- PIO, o bootloader somente leitura e um projeto que evita proteção excessiva de firmware fazem o RP2040 parecer um componente prático, ajustado a usos específicos
Um ecossistema criado pela estratégia de componente único
- O RP2040 é um microcontrolador criado pela Raspberry Pi e, diferentemente das placas Raspberry Pi mais conhecidas, é destinado a ser integrado em eletrônicos de consumo
- Na Mouser, há estoque disponível para envio imediato na casa das dezenas de milhares de unidades, e o preço fica em torno de 70 centavos
- Fabricantes comuns de microcontroladores oferecem muitos produtos parecidos, mas com pequenas diferenças
- Como produtos físicos têm custo de fabricação, em produção em massa até economizar 1 centavo por componente impacta a margem
- Por isso surge o incentivo de dimensionar corretamente as especificações, escolhendo um microcontrolador com desempenho exatamente adequado ao produto
- Com o RP2040, a Raspberry Pi se concentra, na prática, em um único componente
- As opções e a margem para ajustes finos de especificação diminuem
- Em contrapartida, perguntas no StackExchange, posts de blog, experiências, issues no GitHub, bibliotecas e ferramentas se acumulam em torno do mesmo componente
- Projetos como o Late Mate podem economizar mais em custo de desenvolvimento do que em custo de componentes, tornando a estratégia de componente único um bom compromisso
- O suporte a Rust é bom, como mostram os exemplos do Embassy, e também há exemplos de firmware para teclado, drone e robô de futebol
Hardware suficiente e a flexibilidade do PIO
- O design do RP2040 se aproxima de um compromisso generalista que escolhe uma configuração suficiente e flexível, em vez de “especificações máximas”
- Ele oferece dois núcleos razoáveis, e o segundo núcleo pode ser usado quando necessário
- Há 30 GPIOs, um número dentro da média
- Não há flash onboard, e o orçamento foi mais direcionado à RAM interna, que é mais difícil de conectar externamente
- O ADC é decente, e ele oferece periféricos comuns como USB e UART/SPI/I2C/PWM
- Entre os recursos menos tradicionais está o PIO
- PIO é a sigla de Programmable Input/Output; ele é parecido com dois pequenos coprocessadores que executam IO rápido com temporização precisa sem consumir tempo de CPU
- É usado para implementar protocolos de comunicação como DShot ESC
- O Pico-PIO-USB implementa uma pilha USB completa sobre PIO, oferecendo um segundo controlador USB ao RP2040
- Usado com DMA, um driver de display consegue descarregar completamente da CPU a comunicação com o display e o toque
Bootloader e compromissos de segurança para evitar “brick”
- O RP2040 tem uma arquitetura que não pode ser brickada
- Ele inclui um bootloader somente leitura
- É possível atualizá-lo montando-o como um dispositivo de armazenamento em massa USB e copiando o firmware para o “dispositivo de armazenamento”
- Seu protocolo USB simples próprio é usado pelo picotool
- Partindo do julgamento de que proteger o firmware contra um atacante dedicado é quase impossível, e que a própria tentativa traz custos de complexidade e de experiência do desenvolvedor, ele não faz teatro de segurança excessivo
- Essas escolhas podem ser vistas como o resultado de um equilíbrio prático do RP2040, considerando o nicho ocupado por esse pequeno componente de silício
1 comentários
Opiniões do Hacker News
O verdadeiro protagonista do RP2040 é o PIO, que oferece capacidades difíceis de igualar por chips concorrentes como o ESP32.
Por isso ele vem sendo usado em vários lugares na área de hacking de consoles. Mas, para usos alimentados por bateria, seria bom se no V2 o consumo de energia em modo de economia profunda fosse menor.
A lógica digital que pode ser verificada em FPGA costuma ficar em boa forma, mas os elementos analógicos são muito mais difíceis de ajustar finamente, o que aparece como consumo de energia ruim, ADC fraco e ausência de DAC interno ou amplificador operacional. O chip sem fio do Pico W também se aproxima disso: ele não é totalmente integrado como no ESP32, mas sim um componente pronto separado.
É excelente para implementar periféricos bem básicos, mas várias vezes comecei a criar algo um pouco mais complexo e percebi que era lento demais e que o espaço também era insuficiente. Se fosse só um pouco mais reforçado, acho que poderia substituir com bastante facilidade usos triviais de FPGA.
Se você precisa de muita E/S, normalmente não olha para o ESP32. O ponto forte do ESP32 é ser barato e ter WiFi integrado. Há muitas outras opções de microcontroladores que levam vantagem mesmo em comparação com o RP2040, mas a maioria não é voltada ao mercado hobbyista.
Nos últimos anos usamos o RP2040 nos crachás eletrônicos[1] da conferência de segurança RVASec, e a experiência de escrever software para ele foi bem boa.
O repositório GitHub do crachá deste ano está aqui. Há um simulador do crachá apenas em software que permite brincar um pouco mesmo sem o hardware, embora os recursos multiplayer que dependem da comunicação infravermelha entre crachás talvez sejam menos divertidos: https://github.com/HackRVA/badge2024
[1] Vídeo do crachá de 2023: https://www.youtube.com/watch?v=KWZriUMNpLc
[2] https://rvasec.com/
A afirmação de que “é o mesmo microcontrolador e há apenas duas revisões de correção de bugs” não é precisa.
Na verdade, é exatamente o mesmo microcontrolador, com apenas duas opções de embalagem. Uma é um carretel de 7 polegadas com 500 unidades, e a outra é um carretel de 13 polegadas com 3.400 unidades. Basta ver o “Ordering code” no datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.p...
Se você usa o SDK oficial, geralmente não precisa se preocupar muito com qual versão é. A biblioteca padrão de alto nível detecta a revisão do hardware em tempo de execução e ativa ou desativa os workarounds necessários.
O RP2040 praticamente ressuscitou sozinho o mercado bastante de nicho de controles customizados.
Graças ao gp2040[1], um firmware open source para gamepads, as pessoas conseguem comprar fight sticks e controles leverless de qualidade decente por muito menos do que produtos de empresas como Victrix ou Razer. Por ser open source, a comunidade hobbyista de controles também vem criando PCBs com RP2040 para todo tipo de projeto e ideia peculiar de controle.
[1] https://gp2040-ce.info
Fico curioso sobre quanto disso pode ser atribuído diretamente ao RP2040. Projetos como o QMK0 já usavam há muito tempo uma base de código tecnicamente bem parecida para teclados DIY.
À primeira vista, não parece haver no GP2040 nada que outro microcontrolador razoavelmente moderno não pudesse fazer. O RP2040 certamente foi um catalisador para a ampla adoção do GP2040, mas parece que algo semelhante também teria sido possível com o Pro Micro.
Também não dá para deixar de fora o PhobGCC. Eu sou o desenvolvedor principal, e há sucessores menos específicos para GameCube, como ProGCC V3, GC Ultimate e Phizard.
A expressão “sozinho” parece subestimar o que já existia antes, como as placas Brook, por exemplo a Zero-Pi[1]. Historicamente, acho que não é uma afirmação totalmente correta.
[1] https://www.brookaccessory.com/detail/53169470/
Se você tem eletrônica como hobby, mas não quer projetar nem montar suas próprias placas de montagem em superfície, há muitas placas RP2040 baratas e acessíveis.
Usei o Raspberry Pi Pico (US$ 5), que vem em uma placa decente com bastante E/S. Pagando um pouco mais, há também a versão W com WiFi.
Se não houver problema em ter um pouco menos de E/S, você pode encomendar a RP-2040 Zero. Comprei 6 unidades no AliExpress por cerca de US$ 12. Ela tem apenas 23 pinos de E/S, mas conta com botão de reset, USB-C e é bem pequena (1,5 cm x 2,5 cm).
O bom dessas placas é que as ferramentas de desenvolvimento padrão do Raspberry Pi, MicroPython e C++ funcionam perfeitamente nelas, e é fácil enviar firmware por USB
Também quero recomendar a pico ice. A maior parte do preço de US$ 30 vem do UP5K acoplado, mas para projetos embarcados que precisam de operação na casa de submicrossegundos, é uma opção relativamente barata que permite usar ferramentas open source
Recomendo fortemente procurar placas de desenvolvimento alternativas baseadas no RP2040 em vários lugares. A Pi Pico oficial é surpreendentemente fraca, e quase todas as placas alternativas são melhores em algum aspecto
Sem reset, formato grande, apenas 2 Mbit de flash, micro USB — em 2024 isso é meio complicado. Praticamente a única vantagem é ser amplamente disponível
Gosto das placas RP2040 pequenas. Fiz alguns projetinhos com base na adafruit QT Py
Seria bom se houvesse uma versão sem fio. Existe se você usar a ESP32 QT, mas com RP2040, pelo que vejo, parece que não há
Se a restrição de espaço não for extremamente severa, não entendo muito bem a vantagem da 2040 Zero. Tem menos recursos e é mais cara. A Pico já é bem pequena
Ainda assim, a Pico tem uma compatibilidade de pinos realmente boa. No lado do ESP, mesmo que pareça haver muitos pinos de E/S, por causa dos pinos ligados à flash interna, bootloader etc., no fim eles se reduzem a algo que, com sorte, é apenas suficiente. Também fico me perguntando por que expõem esses pinos para fora. A ESP32-CAM tem 10 pinos de dados, mas na prática só 4 são normalmente utilizáveis
O motivo de eu ter saído do ESP32 para o RP2040 foi que ele era um dispositivo mais estável e bem documentado
Minha única preocupação agora com o RP2040 é que há muitos modelos ESP32 com SPIRAM, mas não é tão fácil encontrar placas RP2040 equipadas com SPIRAM. Para ser sincero, o ambiente de desenvolvimento em C do RP2040 é tão bom que dá para aproveitar bem a memória, mas para criar projetos grandes em MicroPython, SPIRAM é um recurso enorme. Fora isso, tudo no RP2040 é excelente
Dario Nieuwenhuis, uma das figuras centrais do Embassy, fez uma ótima apresentação geral na RustNL: https://www.youtube.com/watch?v=H7NtzyP9q8E
A JLC monta placas RP2040 por menos de US$ 3 cada em lotes de 5 unidades
A comparação em si é como comparar maçãs com pêssegos. O RP2040 é apenas um chip, enquanto no lado do ESP32 há muitas opções com vários periféricos desejáveis acoplados
Dá para escolher entre antena WiFi/Bluetooth, controlador de bateria de íons de lítio, Ethernet, conectores para display ou câmera etc.
As opções de CPU também são variadas, e quando se opera com uma bateria tipo moeda, faz diferença gastar energia com um segundo núcleo desnecessário ou com WiFi
Na variante C6, a Espressif mudou novamente a ISA, indo do 8266 ao ESP32 e depois para uma ISA baseada em RISC-V
No fim, é como comparar um SoC de primeira geração com uma linhagem de SBCs de 10 anos
Parece que você está confundindo o ESP32 devkit com o ESP32 em si. O que tem antena, controlador de bateria ou qualquer conector é um devkit, ou pelo menos um módulo. O ESP32 em si é um CI pequeno, como o RP2040
Por exemplo, parece que você está pensando em um devkit como este: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s...
Essa própria placa também é baseada em um módulo como o ESP32-S3-WROOM-1, e esse módulo agrupa o CI ESP32-S3 com conveniências como antena WiFi ou conector
O equivalente no RP2040 é o Raspberry Pi Pico, que também tem pequenas conveniências, como uma variante com WiFi. Também há produtos empacotados com outros periféricos
Nem o RP2040 nem a série ESP32 são SBCs, e nenhum dos dois tem linhagem de SBC. Todos os SBCs Raspberry Pi eram baseados em Broadcom; o RP2040 é um CI novo desenvolvido pela Raspberry Pi e, até onde sei, não tem IP licenciado da Broadcom
Tecnicamente está correto, mas o ponto central é mais próximo do uso. O RP2040 é realmente um caso único e, de repente, tornou-se uma excelente opção para muitos projetos não só de hobby e educação, mas também de dispositivos embarcados profissionais
Considerando o potencial pelo preço, uma única versão do chip cobre uma quantidade enorme de áreas. Para mim, isso é o que significa avanço tecnológico
É mais seguro considerar que os dois lados estão falando dos chips em si. Ambos podem ser conectados a carregadores de bateria, câmeras e reatores nucleares, mas esses periféricos são completamente irrelevantes para esta comparação
Fico curioso se há alguma alternativa não chinesa comparável ao ESP em termos de integração de módulos, como WiFi. Tudo bem se custar mais
Tenho sentimentos mistos em relação ao RP2040
Por um lado, é um ótimo chip para desenvolvedores hobbyistas. É barato, fácil de encontrar, facilita o projeto de placas e oferece o suficiente para as necessidades de uma aplicação média
Por outro lado, do ponto de vista profissional, ele claramente deixa um pouco a desejar. Os periféricos são bons, mas, ao entrar nos detalhes, você bate facilmente em limitações. A interface XIP é excelente, mas não oferece suporte a escrita, então não dá para anexar um chip FRAM para expandir a memória. A interface PIO é incrível, mas, quando se tenta implementar interfaces mais complexas, o limite de 2x32 instruções pesa bastante. Cadê o Timer/Counter? Não tem touch capacitivo? Só quatro pinos analógicos? Não há entradas tolerantes a 5 V? Por que não há uma entrada de clock de alta velocidade para o módulo PIO? Por que não é possível executar o bootloader com o oscilador em anel interno? Também seria bom se tivesse um PHY USB-C
O desempenho de ESD ruim também me surpreendeu. Atmega ou STM32 costumam ficar bem mesmo levando um choque eletrostático ocasional, e a proteção ESD em portas expostas externamente é algo mais do tipo bom de ter. No RP2040, se você não adicionar proteção externa em todos os pinos, acaba praticamente vendo alguns deles morrerem durante o uso cotidiano
Em resumo, é um chip bacana e excelente para hobby, mas provavelmente não seria minha primeira escolha em um ambiente profissional.
Fico curioso sobre o que exatamente querem dizer com PHY USB-C. USB-C é o conector, e por cima dele é possível rodar USB 1.1/2.0/3.0/3.1. Na prática, o RP2040 nem consegue alimentar direito um PHY USB 2.0
Mesmo desenvolvedores amadores acabam fazendo projetos mais complexos e esbarram justamente nesses limites
Fico curioso em saber em que tipos de aplicação a FRAM foi mais útil. A tecnologia em si parece muito legal, mas o preço é alto demais, então é difícil entender bem quando usá-la em vez de uma combinação de SRAM ou PSRAM com NAND
O macro Synopsys DesignWare SSI dentro do RP2040 parece que, na prática, poderia ser usado com PSRAM ou FRAM legível/gravável. Só que a documentação resumida do datasheet do RP2040 não parece suficiente para configurá-lo assim
A Raspberry Pi começou originalmente como uma organização sem fins lucrativos voltada à educação
O RP2040 é bem legal, e eu já usei em meia dúzia de projetos até agora
Mas a abordagem de “um só serve para tudo” não funciona para mim. Prefiro usar o menor microcontrolador capaz de fazer o que preciso
O motivo de eu tentar usar o microcontrolador mais fraco possível não é dinheiro, e sim o orçamento de energia. A maioria dos meus projetos roda a bateria, então usar o mínimo de energia possível é uma grande vantagem
Ainda assim, por que usar um microcontrolador de US$ 1 se dá para fazer a mesma coisa com um de 20 centavos?
Usar um controlador menos potente para fazer a bateria durar mais é um motivo totalmente válido. Ser barato é bom em teoria, mas na prática, em um projeto único, quase não importa. Nem lembro quando foi a última vez que fiz uma compra em que algumas dezenas de centavos fizeram diferença; não é algo perceptível
Gosto do RP2040, mas quero explicar por que o abandonei no projeto atual
Primeiro, a polêmica envolvendo o PlatformIO me pegou muito mal. Quero ficar do lado dos desenvolvedores prejudicados pela confusão nas ferramentas
Segundo, o ESP32-S3 topo de linha vem em formato de módulo e, na prática, pode ser colocado na PCB com apenas alguns capacitores de desacoplamento. O RP2040 exige posicionar cuidadosamente cerca de uma dezena de componentes, incluindo o cristal. Módulos não só reduzem bastante a complexidade de implementação, como também, por meio da padronização, reduzem a chance de cada engenheiro cometer erros bobos no posicionamento de componentes
Terceiro, o ESP32-S3 tem 14 pinos GPIO que podem ser configurados como toque capacitivo, enquanto o RP2040 não tem isso. A maioria dos projetos que usa RP2040 com toque capacitivo depende do MPR121, mas esse CI está descontinuado e provavelmente vai causar muitas reengenharias urgentes nos próximos meses
Um dia, é bem provável que o RP2040 também ganhe versões mais fortes ou mais fracas, além de versões em formato de módulo. Eles não vão deixar chegar ao ponto de virar algo como STM ou PIC, mas a família ESP32 também não parece tão estranha depois que você se acostuma
A Espressif também parece estar na mesma situação da Pi em relação ao PlatformIO[1]. Visto de fora, parece que o PlatformIO tentou cobrar custos anuais muito altos da RPi e da Espressif, e isso depois que o suporte inicial foi adicionado e parte da comunidade começou a adotá-lo
É uma situação estranha, mas parece que o PlatformIO construiu uma posição dominante ao oferecer suporte a várias plataformas e aceitar contribuições da comunidade, para depois tentar extrair valor diretamente dos fabricantes. Eles também bloquearam PRs da comunidade que adicionavam novas revisões de placas ou corrigiam bugs. Conteúdo relacionado: [2]
[1] https://github.com/platformio/platform-espressif32/issues/12...
[2] https://github.com/platformio/platform-raspberrypi/pull/36
Para ser justo, o RP2040 foi projetado para tornar muito fácil posicionar esses componentes. Há praticamente apenas um arranjo que faz sentido, e todos os pinos desejados ficam facilmente acessíveis
Somando isso à excelente documentação, ele fica próximo de um projeto drop-in com vários componentes que você coloca uma vez e não precisa pensar de novo. No começo pareceu um pouco intimidador, mas a implementação real foi muito agradável
Uso o RP2040 desde o lançamento e nunca usei PlatformIO, então fico curioso sobre como ele foi usado e o que havia de tão ruim
Desenvolver localmente com cmake e pico sdk ou micropython parece muito fácil, então não entendo bem por que misturar PlatformIO nisso
Não acho que transformar isso em um módulo agregue tanto valor assim. Todo mundo quer um formato ligeiramente diferente, e o projeto do circuito periférico é tão simples que fica difícil um módulo gerar um ganho claro
Toque é quase um recurso único de nicho, e é melhor que não tenham colocado. O certo é usar outro CI para essa função, e o fato de as pessoas serem preguiçosas e ficarem presas a componentes descontinuados não é problema da RPi. Ou então dá para implementar por software
Nesse ponto concordo com o texto original e acho que a fundação definiu o produto muito bem
Venho colocando chips da Atmel, STM, TI, Ambiq, Nordic e outras em projetos há décadas, e não é como se não houvesse jeito de resolver esse tipo de problema. O estagiário a 2 jardas de mim também está quebrando a cabeça, em seu primeiro projeto de PCB, para posicionar os componentes corretos ao redor de um STM. Para qualquer pessoa que já tenha feito um pouco disso, não é um problema difícil
De todo modo, essa dezena de componentes são circuito de oscilador/cristal, retenção de reset, alimentação de 3,3 V e um monte de capacitores de desacoplamento. O ajuste de antena certamente pode ser difícil, mas, se você puder usar uma antena em chip, também não é tão complicado
Tudo é tão padronizado que, quando olhei o esquemático do adafruit RP2040 Feather, fiquei até surpreso ao ver que muitas partes pareciam ter sido trazidas quase diretamente dos Feathers anteriores. As diferenças entre o RP2040 Feather e o nRF52840 Feather são o próprio microcontrolador, os 5 componentes de todo o circuito de temporização do RP2040 e o circuito de antena da placa Nordic
Módulos são muito convenientes para vender ao mercado hobby, mas, se você for vender um produto real, ainda precisará passar pelo processo de certificação de RF. O custo pode cair, mas você precisa avaliar por conta própria se o custo inicial mais alto de usar um módulo é compensado pelo custo menor de certificação. Ainda assim, no fim, o que se economiza é basicamente a etapa de ajuste da antena, e normalmente isso é tratado como uma variação de BOM, não como uma grande alteração de roteamento
A TI está na mesma situação que a STM e a PIC, com dezenas de chips. Os clientes querem pagar só pelo que precisam, e os fabricantes têm capacidade de produção para atender essa demanda. Se as diferenças importam, isso não é um problema. É muito parecido com reclamar que a Home Depot vende tipos demais de madeira.