sábado, julho 12, 2025

PY32F003 Blues: As Dificuldades em Usar uma Placa com o Microcontrolador PY32F003

Pouco tempo atrás eu fiz um post e um vídeo falando nos microcontroladores de baixo custo (menos de US$0,10) da Puya. Como continuação, eu resolvi preparar um vídeo (e em seguida um post aqui no blog) do tipo "primeiros passos", usando uma placa com o PY32F003 (que é o mais fácil de encontrar na AliExpress). Parecia algo tranquilo, a parte mais difícil seria pensar um exemplo prático.

É claro que  as coisas deram errado...

A "mardita"


Eu estava tão certo que as coisas iam ser tranquilas que gravei a parte mais teórica do vídeo antes de começar a parte prática.

Para o exemplo, me veio a ideia de implementar o Jogo da Vida de Conway usando um display OLED (detalhe: em um dos repositórios que vou citar tem uma implementação disso mais compacta que a minha; não sei se tinha visto ela antes).

Aí veio um "side quest": implementar primeiro o Jogo da Vida usando uma Raspberry Pi Pico, para acertar o algoritmo e depois brigar somente com a comunicação com o display. Acabei testando primeiro o algoritmo no PC, funcionou fácil. Quando fui fazer com a Pico, não consegui fazer o display funcionar corretamente. Troquei o display, a Pico e até a protoboard e nada. Após quase dois dias, eu descobri que o culpado era um fiozinho (eu juro que troquei os fios pelo menos uma vez, mas neste ponto já estava tão confuso que devo ter colocado de volta o fio defeituoso). Minha melhor explicação é que este fio era o fio de terra e o display conseguia "dar retorno" à alimentação pelos sinais de SDA e SCL, fazendo o display funcionar às vezes e de forma errática. Aí foi-se uma semana.

O vilão dos primeiros testes

Agora era a hora do Puya. Usei duas fontes principais para montar o ambiente de programação no WSL2 do Windows:

https://github.com/wagiminator/MCU-Templates/tree/main/PY32F002A

https://github.com/wagiminator/Development-Boards/tree/main/PY32F002AF15P_DevBoard

Primeiro problema é que o makefile no primeiro link não funcionou, ele faz uso de opções que não estão disponíveis nas versões do toolchain que eu usei. Se usar o makefile do exemplo oled_conway do segundo link roda ok (detalhe o runtime em system.h e system.c também é ligeiramente diferente nos dois repositórios). Conseguindo gerar o programa, era hora de gravar no microcontrolador, o que eu pretendia fazer usando o bootloader serial e um aplicativo Python. Deu erro na gravação.

Vamos tentar outra placa? A segunda nem ligou. A terceira deu o mesmo resultado que a primeira. Será algum bug do aplicativo Python? Vamos nos arriscar e baixar e rodar o aplicativo do fabricante (testei duas versões). Continua dando o mesmo erro.

Num certo momento, resolvi tentar mudar a velocidade de comunicação com o bootloader. Primeiro mais lento - mesmo resultado. Vamos arriscar mais rápido? Funcionou... Detalhe: o aplicativo Python trabalha com baudrate fixo, algum dia vou alterá-lo para ter uma opção de configuração da velocidade.

Bem, agora vai, certo? Não... coisas estranhas ocorrem no software, parece que as chamadas de rotina não estão ok. Mexe aqui, mexe alí, nada. O blink roda legal. Aí eu achei o exemplo do jogo da vida e experimentei gravar o hex que está no repositório, mesmo tendo sido gerado para um outro modelo - rodou direito.

Resumindo dois dias de briga, algo de errado acontece no final da memória RAM, onde é colocada a pilha. O modelo que estou usando PY32F00318P tem 8k de RAM. Se eu gero o programa especificando isso, ele não roda. Se eu falo que tem 8100 bytes de RAM (ao invés de 8*1024 = 8192 bytes), roda legal. Outra coisa que não funcionou foi selecionar clock gerado pelo cristal externo.

Conclusão: consigo fazer programas para o PY32F003, mas o processo é tão confuso e cheio de mistérios, que o vídeo seria inútil como um roteiro de primeiros passos.

Vai ser preciso investir mais tempo para

  • Colocar uma opção de seleção de velocidade no puyaisp
  • Fazer o clock por cristal externo funcionar
  • Entender o que se passa com o final da memória
Uma outra linha seria experimentar comprar placas de outro fabricante e ver se algo muda.


Atulização após escrever tudo isso:

  1. Não resisti e comprei mais umas placas de outro vendedor.
  2. Fui capturar o erro quando tenta gravar com o aplicativo Python e... funcionou !?? E com duas placas diferentes. Devia ser a fase da Lua.

Nenhum comentário: