Manual
do
Maker
.
com
No artigo anterior introduzi algumas das mais variadas formas de fazer uma comunicação serial a partir do Linux, não apenas pela USB, mas também pelo GPIO. Dê uma conferida no artigo porque tem bastante informação interessante, por mais simples que pareça o processo de comunicação serial. Certamente poderá tirar algum proveito. Nesse artigo veremos como usar SWD na Raspberry; claro, tem que ser em ambas as placas, tanto a Raspberry Pi 400 (disponível na Saravati) como na Raspberry Pi Pico (se for montar esse ambiente, pode pegar ela também na Saravati). Para aquisições, deixo o link direto para a placa.
Parafraseando a própria documentação da Raspberry Pi Pico, SWD é uma interface padrão das MCU Cortex-M, cuja interface pode receber interação a partir do host (no nosso caso, a Raspberry Pi 400) para reinício, gravação do firmware e depuração com ponto de parada. Veremos em detalhes, não se preocupe.
O host pode usar a porta SWD a qualquer momento, sem a necessidade de uso do botão BOOTSEL. A interface SWD fica do lado oposto da USB:
Como citado há 2 artigos, normalmente se utiliza um JTAG para comunicação com essa interface, mas fazendo-o entre Raspberry Pi e Raspberry Pi Pico, podemos utilizar os GPIOs.
Precisaremos de um programa para comunicação entre os disposiitivos. No caso, um que entenda o protocolo SWD. Além disso, ele precisa saber como controlar o processador dual core do Cortex-M0, que é o processador da Raspberry Pi Pico. Se for usar um probe, também será necessário que o dispositivo seja suportado pelo sistema operacional e tenha a capacidade de interfacear com o Cortex-M0. Mas como vamos usar a Raspberry Pi 400 para essa comunicação, simplificamos o processo e garantimos o sucesso da operação.
Primeiro de tudo, instale esse pacote:
apt install gnutls-bin
Na Raspberry Pi 400 podemos pular diversas etapas de processo manual, executando esse script facilitador, a seguir:
wget https://raw.githubusercontent.com/raspberrypi/pico-setup/master/pico_setup.sh
chmod 700 pico_setup.sh
./pico_setup.sh
Esse script criará o diretório pico em sua Raspberry, instalará as dependências requeridas, baixará o SDK e repositórios co-relatos, definirá paths, compilará exemplos, baixará programas de interação, compilará o OpenOCD, instalará o VS Code e extensões requeridas, configurarará a UART (descrita no artigo anterior) para usar com a Pico. Esse script economizará muito tempo nosso, sendo você expert em Linux ou recém chegado no mundo do Pinguim.
Feita a instalação, reinicie o Raspberry para que todas as configurações possam ser assumidas na carga do sistema:
sudo shutdown -r now
Atente-se a um detalhe: É presumido que esteja usando (preferencialmente) o sistema Raspberry Pi OS ou alternativamente (mas fundamental), uma variante de Debian para ARM.
Vamos alinhar alguns pontos. O SDK oferece suporte total a C/C++ e existe também um porte oficial do MicroPython, do qual já escrevi diversos artigos, que você encontra na seção Raspberry.
Se inglês não é um obstáculo, recomendo algumas documentações. Elas são mais elaboradas que tutoriais e em contrapartida, é mais lenta a execução de testes. Seguindo os tutoriais aqui cortamos caminho, mas em contrapartida as informações são expostas a cada período.
Programação em C/C++ (arquivo PDF)
Programação em Python (arquivo PDF a ser baixado no segundo link)
Se não instalou as dependências através do script recomendado (deveria, mas se não o fez) terá que fazer o processo manual de instalação do OpenOCD. Nesse caso:
mkdir -p ~/pico
cd ~/pico
sudo apt install automake autoconf build-essential texinfo libtool libftdi-dev libusb-1.0-0-
dev
git clone https://github.com/raspberrypi/openocd.git --recursive --branch rp2040 --depth=1
cd openocd
./bootstrap
./configure --enable-ftdi --enable-sysfsgpio --enable-bcm2835gpio
make -j3 #gosto de deixar uma CPU livre
sudo make install
Como visto, executar o script que instalará todas as dependências é a melhor opção.
Aqui vemos o Wiring do SWD e da serial. É fácil e simples:
Se pretende usar a serial do Raspberry pela GPIO, você pode seguir o procedimento do artigo anterior.
O wiring do SWD na Raspberry é esse:
Raspberry Pi | Raspberry Pi Pico |
GND - Pino 20 | SWD GND |
GPIO24 - Pino 18 | SWDIO |
GPIO25 - Pino 22 | SWCLK |
Pela integridade do sinal, a documentação recomenda algo que talvez seja até óbvio; faça o wiring diretamente entre as placas, sem utilizar breadboards. Também é importante que o GND do SWD seja conectado à Raspberry Pi, não use outro GND para esse propósito. Na conexão serial também tem um GND e, sim, ele deve ser conectado conforme descrito no artigo anterior.
O Raspberry Pi Pico deve ser alimentado via USB para ser depurado.
Não instale pacotes pré-compilados do OpenOCD, siga o procedimento descrito aqui para ter o suporte multidrop do SWD funcional, senão vai dar erro.
Essa é a parte do setup. Na terceira parte desse artigo vamos fazer carga do programa e depuração. Prepare-se!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.