Mais uma placa da WeAct Studio chamou a minha atenção. Desta vez foi uma placa com o mesmo formato e pinagem que a (mais ou menos) conhecida Bluepill, porém com um microcontrolador RISC-V ao invés de um STM32 (ARM).
Neste post vou falar das características da placa e da minhas desventuras até o momento.
Bluepill?
Embora já façam 2 anos e meio que eu comprei essa placa (e sua irmã maior, a Blackpill), reparei agora que não fiz nenhum post a respeito dela. Vai aqui um resumo rápido.
A Bluepill é um projeto cuja origem não conheço, mas que é produzido por várias empresas chinesas. Basicamente é uma plaquinha (normalmente azul) com um formato de Arduino Nano alongado, contendo um microcontrolador STM32F103C8T6. Em muitos casos, ao invés de um STM32F original temos um clone. O chip no meu exemplar é oficialmente falso, tem um documento da ST afirmando que nunca fez um chip com estas marcações!
Problemas com chips não originais à parte, a Bluepill é uma placa bem poderosa. O STM32F103 é um ARM Cortex M3, rodando a 72MHz, possui 64K Flash, 20K de RAM, uma boa quantidade dos periféricos tracionais (2 ADCs de 12 bits, 2 I2Cs, 3 UARTs 2 SPI) e USB 2.0.
A BluePillPlus
Como dito, a BluePillPlus segue o formato e a pinagem da Bluepill original. A placa inclui um LED ligado a um GPIO e três botões (Reset, Boot e User). O conector USB é USB-C.
O microcontrolador é o CH32V203C8T6 da WCH. A WCH é mais conhecida pelo chips de interface serial USB, como o CH340, porém também fabrica uma linha de chips compatíveis com a linha STM32 (os microcontroladores CH32F). Ao partir para o RISC-V, a WCH adotou para os chips as pinagens e características dos STM / CH32F.
Do ponto de vista de hardware, não tem muito o que falar. Além do núcleo ser RISC-V, o clock é o dobro: 144 MHz (já veremos que isso não implica no dobro do desempenho). As memórias e os periféricos são equivalentes. A placa em si é bem feita e junto com ela vieram os pinos (inclusive para conexão do programador).
O preço é excelente. No momento está em torno de R$8,50 na AliExpress (não contando o frete e a parte do Haddad).
Programando a BluePillPlus - Testes
Aqui as coisas complicam um pouco. A referência básica é o github da WeActStudio. O ambiente oficial de desenvolvimento da WCH é o MounRiverStudio (MRS). Nas brincadeiras com o CH32V003 eu evitei ele, usando o CH32V003fun. Aqui não teve jeito, eu instalei o MRS em um Linux num máquina virtualizada.
A carga de software nos CH32V usada pelo MRS se baseia no programador WCHLink. Após diversas tentativas, acabei "bricando" o WCHLink (parece que não sou o único a conseguir esta façanha)*. Felizmente o CH32V203 tem também um bootloader via USB. Inicialmente eu usei um software "aberto" de programação no Linux (wch-isp), mas deu algo errado quando fui gravar um programa maior. O jeito foi usar a ferramenta oficial da WCH no Windows.
A ferramenta oficial é meio chatinha de usar para gravar. Primeiro você entra no modo bootloader (aperta o botão boot e mantém apertado enquanto aperta e solta o reset), aí você aciona o "deprotect" para permitir a gravação. Aí você entra de novo no bootloader e faz o "download".
O primeiro teste foi rodar o exemplo "01-template" que rodou ok (inclusive com o wch-isp). A propósito, o wch-isp quer um arquivo .bin e a saída do MRS é um .hex. A conversão pode ser feita com o objcopy:
objcopy -I ihex -O binary xxx.hex xxx.bin
O segundo teste foi o meu programa de cálculo do Pi. Aqui alguns pontos curiosos:
- O wch-isp dá erro ao verificar a gravação*
- Com o "STM32", os tempos para calcular 500 dígitos foram 41 ms (otimizando por tamanho) e 36 ms (otimizando para velocidade). Aqui eu usei a IDE do Arduino e o pacote stm32duino.
- Com o CH32V, a primeira medida de tempo foi 72ms. Aí eu descobri (meio que acidentalmente) que a escrita (printf) dos dígitos à medida que são calculados estava gastando bastante tempo. Tirando esta escrita, o tempo caiu para 23ms.
- Você deve estar pensando: "e se tirar o print no STM32?". Bem eu testei e o resultado foi surpeendente: o tempo aumentou para 39 ms.
- No código do exemplo no CH32V, o print envia os dados pela UART sem usar interrupção, portanto fica aguardando cada caracter ser enviado. Não ajuda também que a rotina é o printf, com todos os recursos e overheads de formatação. Já no stm32duino eu uso o Serial.Print que é bem mais "leve", usa interrupção e envia os dados pela USB nativa.
Veredito
Do ponto de vista de hardware, A BluePill Plus é uma opção barata para quem quer brincar ou estudar o CH32V203. O problema é que ainda falta muita trabalho na parte de ferramentas e software.
Se você tem espírito de pioneiro é quer ajudar a desbravar este novo terreno, esta placa é para você. Se você que é usar a placa em um projeto, será muito mais suave usar um Bluepill normal.
* Atualização 09/12/23: O problema é a falta da operação "deprotect". Depois de fazer o "deprotect" com o aplicativo da WCH dá para usar o wch-isp sem problema (até que você grave um programa com um dos aplicativos da WCH que liga de novo a proteção). Preciso achar uma explicação desta proteção e ver se tem como desligá-la através do wch-isp.
Nenhum comentário:
Postar um comentário