A maioria dos que conhecem o comando vcgencmd o utilizam para pegar a temperatura do Raspberry, mas ele tem diversos outros recursos importantes para obter informações da placa. No post anterior mostrei como detectar subtensão e subcorrente, agora vamos ver outros recursos interessantes.
Table of Contents
vcgencmd
O vcgencmd é um utilitário de linha de comando que pode obter informação de diversos componentes de hardware, como vídeo, memória, núcleo e alimentação. O código está disponível no github e pode ser acessado aqui. No código podemos encontrar referências que sequer estão na documentação, como o help do próprio programa e comandos usados exclusivamente pelos engenheiros. Vejamos alguns dos recursos:
show_usage
Essa função deveria ser chamada quando usamos a flag -h, mas não a vi funcionar.
Pelo código atual disponível no github, deveríamos ter acesso ao help também ao chamar o comando sem parâmetros:
if ( argc == 1 ) { // no arguments passed, so show basic usage show_usage(); return 0; }
O código contido no git é sucinto, não contendo tudo o que o binário faz. Mas já escrevi algo sobre ele e nem me lembrava, achei o artigo por acaso. Mas no artigo não citei muita coisa, por isso resolvi incrementar; a começar pela consulta dos comandos.
vcgencmd commands
Isso mostrará todos os comandos, e é coisa pra caramba!
É um ótimo ponto de partida para quem gosta de experimentações. A documentação mostra alguns, os quais também citarei.
vcgencmd vcos <version | log status>
É um comando aplicável para desenvolvedores. Devolve a versão de firmware do núcleo de vídeo ou logs de status de erros de diversas áreas de software que acessam o núcleo de vídeo.
vcgencmd version
Mostra o hash da versão do programa.
vcgencmd get_camera
Mostra se tem suporte (precisa ser habilitado através do menu do programa raspi-config ou no /boot/config.txt) e se foi detectado. É bom para diagnóstico durante a instalação da câmera, caso algum problema ocorra.
vcgencmd get_throttled
Esse comando mostra eventos de energia como subtensão, subcorrente, aquecimento, degradação de frequência e também se em algum momento do boot ocorreu um desses eventos. É fundamental para saber se a fonte utilizada no Raspberry é adequada, se está suprindo as necessidades e se tem qualidade. Detalhei o uso e forneci um código shell para interpretar a saída, disponível nesse outro artigo.
vcgencmd measure_temp
Quer saber como está a temperatura do SoC de seu Raspberry? Vale lembrar que o limite é de 80 graus, para ter uma referência. No Brasil é comum que ela trabalhe em seus 50 graus. Temperatura alta reduz a vida útil de qualquer aparelho e um dissipador simples já é bastante válido.
Fiz alguns testes de temperatura com um case especial de alumínio para Raspberry Pi 3 (sem fan) e para Raspberry Pi 4 (com fan), que pode ser visto nesse artigo. Inclusive fiz o app de medição, com código disponível no github Do bit Ao Byte. Dê uma lida.
No momento desse artigo a temperatura estava 12 graus; o Raspberry com o case de alumínio sem fan marcava 36,5 graus. Não tão bom, nem tão mal, mas esse RPi é meu servidor DNS e fica ligado 24×7.
vcgencmd measure_clock [clock]
Tem uma série de clocks que podem ser medidos:
- arm
- core
- h264
- isp
- v3d
- uart
- pwm
- emmc
- pixel
- vec
- hdmi
- dpi
Não tenho monitor ligado a esse RPi e o PWM está desabilitado.
vcgencmd measure_volts [block]
Esse comando mostra as tensões usadas pelo bloco específico. É um dos comandos que utilizei para gerar gráficos no dashboard do Grafana com MQTT.
Os blocos são:
- core – para VC4
- sdram_c – para core da SDRAM
- sdram_i – para tensão de I/O da SDRAM
- sdram_p – para tensão Phy da SDRAM
vcgencmd otp_dump
Já escrevi sobre o OTP, particularmente para modificação permanente para boot pela USB ou SD selecionado por GPIO e também para habilitar o boot permanente pela USB.
Para saber como está sua OTP (principalmente se comprou a RPi usada), esse comando pode ser bastante útil. Mas ele retorna uma lista enorme de bits e as referências precisam ser lidas na documentação (em inglês). Desculpe, mas não vou ter paciência para reescrever.
Uma coisa legal é o serial, que está no setor 28 e 29. Ele pode ser utilizado para identificar se uma aplicação proprietária está rodando no hardware de origem, inibindo (dentro do possível) a utilização indevida de um programa licenciado.
Também tem o código de revisão, que é único por Raspberry. Essas informações podem ser pegas também em /proc/cpuinfo:
cat /proc/cpuinfo
Aproveitando, repare que no arquivo cpuinfo temos também o modelo exato da Raspberry, servindo para tirar dúvidas quanto à versão correta da sua.
O modo de boot está no registro 17, com a lista de bits tendo os seguintes valores:
Bit 1: sets the oscillator frequency to 19.2MHz
Bit 3: enables pull ups on the SDIO pins
Bit 19: enables GPIO bootmode
Bit 20: sets the bank to check for GPIO bootmode
Bit 21: enables booting from SD card
Bit 22: sets the bank to boot from
Bit 28: enables USB device booting
Bit 29: enables USB host booting (ethernet and mass storage)
Tem outras coisas interessantes, mas que oferecem risco ao serem realmente manipuladas, então paremos por aqui nesse comando.
vcgencmd get_mem type
Esse comando informa a quantidade de memória alocada para os núcleos ARM e GPU:
Uma nota da documentação é que no Raspberry Pi 4 com mais de 1GB de RAM a opção arm é imprecisa (pasmem). Conforme explicado, a razão é que o firmware da GPU que implementa esse comando só vai até o primeiro GB, então o retorno será sempre 1GB menos a memória de GPU disponível. Daí a recomendação é usar os recursos padrão do sistema free ou cat /proc/meminfo, ou seja, por enquanto é um comando inútil na RPi 4.
vcgencmd codec_enabled [type]
Informa se um determinado coded está ativo. As opções são AGIF, FLAC, H263, H264, MJPA, MJPB, MJPG, MPG2, MPG4, MVC0, PCM, THRA, VORB, VP6, VP8, WMV9, WVC1, sendo que em negrito requerem licença paga.
vcgencmd get_config type | name
Esse comando retorna toda a configuração de itens especificados em /boot/config.txt. Os valores de parâmetros possíveis são int ou str, ou simplesmente use o nome do item de configuração.
Talvez pegar os parâmetros com egrep seja até mais útil, sei lá.
vcgencmd get_lcd_info
Mostra a resolução e profundidade de cores de um dispositivo de vídeo conectado. Como não tenho nenhum conectado a ele, não vou exemplificar.
vcgencmd mem_oom
Mostra estatísticas de qualquer evento Out Of Memory ocorrendo na memória VC4.
vcgencmd mem_reloc_stats
Confesso que já estou cheio de escrever sobre o tema; tem comandos demais. Mas esse comando mostra estatísticas da memória realocável pelo alocador na VC4.
vcgencmd read_ring_osc
Esse comando é bacana. Ele retorna clock, tensão e temperatura. Bastante informação de uma só vez.
vcgencmd hdmi_timings
Esse é outro caroço que depende da leitura da documentação.
vcgencmd display_power [0|1|-1] [display]
Esse é bacana. Com ele podemos ver o status de energia do display ou configurar o estado de energia. Com vcgencmd display_power 0 desligamos o display corrente. Com 1 o ligamos. Sem parâmetros, vemos o status atual.
O parâmetro final display é opcional e podemos pegá-lo através do comando tvservice -l ou seguindo a tabela abaixo:
Display | ID |
---|---|
Main LCD | 0 |
Secondary LCD | 1 |
HDMI 0 | 2 |
Composite | 3 |
HDMI 1 | 7 |
vcgencmd display_power 0 7 desligará o display de ID 7, que é o HDMI 1 no RPi 4.
Esse artigo foi um teste de paciência, mas é bom ter isso relacionado para facilitar consultas posteriores, afinal, ninguém quer decorar comandos de uso ocasional, certo?
Onde comprar Raspberry Pi?
Se precisa comprar um Raspberry Pi 4, a MASUGUX tem por um ótimo preço. Na Saravati tem a Raspberry Pi 3B+, assim como na CurtoCircuito que tem a Raspberry Pi 3.
Onde comprar fonte para Raspberry Pi?
O artigo anterior é justamente sobre uma excelente fonte confiável para Raspberry. Confira o artigo anterior ou vá direto ao site para conferir a fonte.
Espero que tenha gostado da leitura!
Revisão: Ricardo Amaral de Andrade
Artigos relacionados
Stone HMI – Adeus, Nextion!
Expansor de IO PCF8575 e bitwise
Factory defaults na RPi Pico