Ative SPI e I2C no Ubuntu 20.04 Raspberry Pi

Sep 09 2020

Usando o Rasbian, existe uma ferramenta conveniente rasi-configpara ativar / desativar SPI e I2C em um pi de framboesa. No entanto, não existe tal ferramenta para o Ubuntu, e nenhuma maneira direta de habilitá-los (até onde posso google). Existem patches como este onde alguns tiveram sucesso, mas não parece funcionar para 20.04. Estou tentando habilitar o SPI para seguir este tutorial . Quando executo o script Python, sempre recebo:

Traceback (most recent call last):
  File "testwind.py", line 8, in <module>
    spi.open(0,0)
PermissionError: [Errno 13] Permission denied

Existe alguma documentação oficial para Ubuntu Server 20.04 para raspberry pi para habilitar SPI e I2C? Desde já, obrigado.

Respostas

1 MvZ Sep 10 2020 at 02:52

Atualização, um guia passo a passo para habilitar I2C:

Na semana passada, minhas últimas peças chegaram, então terminei o hardware e configurei o Ubuntu 20.04. Eu estava prestes a começar a mexer no I2C, quando Thomas comentou minha resposta original, vinculando este artigo escrito por Alexander Rüedlinger . Com essa peça que faltava em mãos, levantar I2C foi uma brisa. O seguinte deve ser adaptável ao SPI também.

  1. Navegue até raspi-config em archive.raspberrypi.org. Escolha a versão mais recente.

  2. Baixe esse arquivo para / tmp e tente instalar usando dpkg.

    wget https://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_*INSERT DATE*_all.deb -P /tmp

    sudo dpkg -i /tmp/raspi-config_*INSERT DATE*_all.deb

  3. Isso resulta em um erro, relatando dependências ausentes. Leia a saída e instale as dependências:

    sudo apt-get install *INSERT DEPENDENCIES*

    Isso prejudicou a instalação de alsa-utilsuma das dependências. Para consertar, execute:

    sudo apt-get -fy

  4. Agora instale o raspi-config:

    sudo dpkg -i /tmp/raspi-config_*INSERT DATE*_all.deb

  5. Execute raspi-config, navegue até 'Opções de interface', habilite I2C.

  6. Instale os pacotes relevantes. Você vai querer i2c-toolspelo menos, mas eu recomendo pegar libi2c-devtambém e python3-smbusse esse for o seu idioma de escolha.

  7. Tente sondar o barramento como usuário e root:

    sudo i2cdetect -y 1(ou 0, o número do barramento I2C depende do hardware)

    Se isso fornecer uma matriz de endereço, I2C está ligado e funcionando.

    i2cdetect -y 1(ou 0)

    Se isso gerar um erro de permissão, execute a próxima etapa. Caso contrário, ignore.

  8. Crie um grupo de usuários I2C, aplique-o ao barramento e adicione seu usuário a este grupo:

    sudo groupadd i2c (o grupo pode já existir)

    sudo chown :i2c /dev/i2c-1(ou i2c-0)

    sudo chmod g+rw /dev/i2c-1

    sudo usermod -aG i2c *INSERT YOUR USERNAME*

    Saia e faça login. Eu estava conectado por meio da extensão SSH do código do VS e precisava reiniciar. Em seguida, tente novamente:

    i2cdetect -y 1

Alguns comentários:

As instruções fornecidas pelo anvoice em esta questão eram essenciais, mas as dependências reais são alguns anos fora da data. Portanto, sugiro que você experimente a etapa # 1 e leia a saída do dpkg para ajustar as dependências à sua versão do raspi-config.

Parece que raspi-config pode não ser necessário, mas você só precisa adicionar o dtparam=i2c_arm=onsinalizador a /boot/config.txt (veja a documentação oficial ). Eu não tentei (ainda). Se você quiser tentar,, sudo nano /boot/config.txtadicione a bandeira em uma nova linha, CTRL-X, confirme com Y e comece na etapa # 6.

Resposta original:

Tenho examinado um problema semelhante nos últimos dias. Parece não haver suporte oficial, os pacotes não oficiais parecem estar desatualizados.

Instalando raspi-config

Dado que o RasPi OS e o Ubuntu são baseados em Debian, pode funcionar facilmente. Formulei a seguinte abordagem para mim, mas posso não conseguir testá-la nas próximas semanas:

  • Vou tentar a abordagem sugerida por uma voz na pergunta que você vinculou.
  • Observe que sua resposta se vincula a este script de EmilGus no Github, ele especifica várias dependências.
  • Conforme sugerido por nc4pk nesta pergunta , pegarei a versão mais recente do raspi-config do repositório RasPi oficial.
  • Acho que está nesta pasta.

Problema de permissões

Isso é tudo quanto ao processo de instalação, que você já deve ter acertado. Pelo erro, suponho que o usuário em execução testwind.pyprecisa de permissões adicionais para acessar essa interface - ou que a interface deve ser acessada de forma diferente no Ubuntu. Espero que alguém possa opinar sobre isso.

Contexto

Estou planejando um projeto que implementa SLAM em um RasPi 4 de 8 GB. Estou usando dois Arduinos como GPIO adicional e para executar loops de controle de HW: ou seja, PID para controlar o PWM , de modo que o RPM seja aproximadamente constante, mesmo se o terreno for diferente. Usando I2C com o RasPi como mestre; não olhou para o SPI ainda.

Dado que os algoritmos SLAM têm algumas implementações com mais memória (mas menos com computação pesada), optei pelo novo RasPi 4 de 8 GB. O limite de memória de 3 GB por processo pode atrapalhar, então executarei o Ubuntu 20.04 LTS Servidor de 64 bits.

Se não conseguir fazer funcionar, testarei o I2C no Raspberry Pi OS. Assim que tiver um script de teste funcionando, voltarei para o Ubuntu.

FaiyazHaider Oct 25 2020 at 12:12

Em minha experiência com o servidor Ubuntu 20.04 em RPI4, I2C e SPI são habilitados por padrão. Verifique o arquivo /boot/firmware/syscfg.txt e veja se você tem as seguintes linhas:

dtparam=i2c_arm=on
dtparam=spi=on

Caso contrário, talvez você possa anexá-los em /boot/firmware/usercfg.txt e reiniciar, e esperançosamente, isso funcionará. Se isso não funcionar, talvez faça sudo apt update && sudo full-upgrade -ye veja se há alguma atualização de distro necessária.