Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Documentos relacionados
Roteiro de Laboratório 8 Serial Peripheral Interface (SPI) Prof. Walter Fetter Lages 21 de outubro de 2015

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG04056 Microcontroladores

O protocolo SPI. 1 - Introdução. 2 Ligação física

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Prof. Dr. Rafael Traldi Moura Escola Politécnica da Universidade de São Paulo Departamento de Engenharia Mecatrônica e de Sistemas Mecânicos

Transmitter MISO MOSI SCLK

CAPÍTULO 5. Interfaces I 2 C e SPI. Interface I 2 C. Interfaces e Periféricos 37

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Sistema Digitais. Bacharelado de Informática UEM DIN - Prof. Elvio 2017

Sistemas Embebidos II Semestre de Verão de 2012/2013 Segunda atividade prática

UART vs SPI para comunicação Arduino- Arduino

Introdução aos Sistemas Operacionais. Subsistema de Entrada e Saída

Interfaces Seriais. Disciplina de Microcontroladores. Prof. Rubão

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Galileo Gen2. Walter Fetter Lages

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Intel Galileo: Acesso ao GPIO General Purpose Input/Output

Prática 8: Comunicação SPI. 8.1 Introdução e objetivos. 8.2 Princípios básicos do protocolo SPI

Manual da Pinagem dos Microcontroladores BASIC Step 1 e M8 + Esquema de instalação do cabo

07/06/2015. Outras características importantes em Microprocessadores/Microcontroladores SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Prof. Adilson Gonzaga

High Performance Programmable DMA Controller 8237A, 82237

Sistema Digitais. Bacharelado de Informática UEM DIN - Prof. Elvio 2016

Roteiro de Comunicação Raspberry Arduino/ESP8266 com I2C

Trabalho Prático Nº3 Porta Paralela

Evento: XXV SEMINÁRIO DE INICIAÇÃO CIENTÍFICA

Driver Comunicação p/ Protocolo N2

Anatomia do Arduino Bootloader

Sistemas Operacionais Aula 15: Sistemas de I/O. Ezequiel R. Zorzal

COS Sistemas Operacionais. SystemCalls() [Linux Kernel Development, 2 nd edition] Prof. Vítor Santos Costa

Entrada e Saída. Walter Fetter Lages

Arduino Lab 02 Sensor de luminosidade e display de LCD 16 2

Programação de Periféricos

Bravas shield sample app 2017

Porta de Impressora IEEE Walter Fetter Lages.

Curso Arduino ESP8266. Aula #1 - Introdução

Exercícios de Sistemas Operacionais 3 B (1) Gerência de Dispositivos de Entrada e Saída

Projeto Final de Microcontroladores 2 Alarme de Temperatura

Status avançado Modo Paralelo 1 Aceitar Inic. Modo Paralelo 2 Buffer Trabalhos Comutação p/ PCL Modo NPA Configuração p/ PS. Buffer Paralelo Protocolo

UFRJ IM - DCC. Sistemas Operacionais I. Unidade IV Gerência de Recursos Entrada e Saída. 02/12/2014 Prof. Valeria M. Bastos

Conhecendo o PIC24 e o mikropascal

Sistemas Operacionais. Laboratório 1 (Ambiente de Aprendizado)

GUIA BÁSICO DE UTILIZAÇÃO E INSTALAÇÃO DO LINUX OUT OF THE BOX KIT MERCURIOIV

Comunicação USB com o PIC Vitor Amadeu Souza

Entrada. Saída. Entrada e Saída. Sistemas Operacionais

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Engenharia Elétrica ENG04037 Sistemas de Controle Digitais

Gerência de Dispositivos. Adão de Melo Neto

Microcontrolador 8051

Estudo da placa de prototipagem Intel Galileo Gen2. Apostila de acompanhamento para o aluno.

SISTEMA DIDÁTICO DE EXPANSÃO DE E/S PARA ARDUINO, VIA SPI E COM CPLD

PSI3441 Arquitetura de Sistemas Embarcados

SICILIANO TECNOLOGIA

Arquitetura e Organização de Computadores. Conjunto de Instruções da Arquitetura CompSim

I2C PROTOCOLO DE COMUNICAÇÃO

Sistemas Microcontrolados

Usando display LCD tipo 16x2

Nível da Lógica Digital. Barramentos. (Aula 9) Roberta Lima Gomes - LPRM/DI/UFES Sistemas de Programação I Eng. Elétrica 2007/2

Chips Processadores (2) Nível da Lógica Digital (Aula 9) Barramentos. Chips Processadores (3)

A idéia hardware sugerida é colocar a placa entre o PC e o microcontrolador, conforme mostrado no esquema abaixo.

Capítulo 13: Sistemas de E/S. Operating System Concepts with Java 7th Edition, Nov 15, 2006

Interrupções 8051 Porta Serial

Revisão: Projeto e síntese de Circuitos Digitais em FPGA

Peripheral Component Interconnect PCI

Gerência de Dispositivos. Adão de Melo Neto

Programa Trainee 2012 Módulo 4 Microcontroladores AVR

Sistemas de Operação (2018/2019) Ficha 4

Marcio Marcos Machado Junior. Professor orientador: Sérgio Stringari

Usando Display Gráfico com C18 e C30

Retrofitting de Robôs. Walter Fetter Lages Universidade Federal do Rio Grande do Sul Departamento de Engenharia Elétrica

28. COMUNICAÇÃO WIRELESS

Exercícios de Laboratório 3

AULA 6 - INTRODUÇÃO AO ARDUINO Revisão de Eletrônica Digital e introdução aos Sistemas Computacionais.

ARDUINO. Profº. Engº. Robson Dias Ramalho

Estrutura de Sistemas Operacionais. Capítulo 1: Introdução

NONUS - KIT SLOT READER

Sistemas Operacionais de Tempo Real - Teclados Matriciais

Introdução aos Sistemas Operacionais

Descrição dos pinos de entrada e saída e de funções especiais. Descrição dos modos de acesso: individual e por porto

Entrada-Saída no RPi - GPIO. PSI2653 Meios Eletrônicos Interativos 1 Prof. Sergio Takeo Kofuji 1º. Semestre 2017

Entrada e Saída. Walter Fetter Lages.

Organização e Arquitetura de Computadores

Arduino Básico: As versatilidades desta plataforma na prática

ET53C - SISTEMAS DIGITAIS

Instrumentos Analógicos e Digitais

Cerne Tecnologia e Treinamento

Transcrição:

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores 1 Objetivo Roteiro de Laboratório 8 Serial Peripheral Interface (SPI) Prof. Walter Fetter Lages 10 de outubro de 2018 O objetivo deste laboratório é entender o funcionamento do barramento SPI e as diferenças entre uma implementação por software e uma implementação por hardware. 2 Fundamentação Teórica O SPI é um barramento de comunicação serial síncrono utilizado para pequenas distâncias. Ele opera em full-duplex no modo mestre-escravo. O SPI é baseado em quatro sinais, como mostrado na figura 1: SCLK: clock, saída do mestre MOSI: Saída do mestre, entrada no escravo MISO: Entrada no mestre, saída do escravo #SS: Seleção do escravo, saída do mestre Embora menos comum, o SPI também pode funcionar em uma topologia daisy chain, como mostra a figura 2. 2.1 Polaridade e Fase do Clock O SPI pode operar com duas polaridades e duas fases do sinal de clock. Normalmente estas opções são configuradas por bits com os nomes CPOL e CPHA, respectivamente. 1

Figura 1: Barramento SPI com três escravos. Figura 2: Barramento SPI com três escravos em daisy chain. 2

Para CPOL=0, o estado inativo do clock é em nível lógico baixo. Neste caso, quando CPHA=0, os dados são alterados na borda de descida do clock e amostrados na borda de subida do clock, como mostra a figura 3(a). Quando CPHA=1 os dados são alterados na subida do clock e amostrados na descida do clock, como mostra a figura 3(b). Para CPOL=1, o estado inativo do clock é em nível lógico alto. Neste caso, quandocpha=0, os dados são alterados na borda de subida do clock e amostrados na borda de descida do clock, como mostra a figura 3(c). Quando CPHA=1 os dados são alterados na descida do clock e amostrados na subida do clock, como mostra a figura 3(d). (a) CPOL=0, CPHA=0. (b) CPOL=0, CPHA=1. (c) CPOL=1, CPHA=0. (d) CPOL=1, CPHA=1. Figura 3: Polaridade e Fase do clock. A tabela 1 mostra a configuração da polaridade e fase do clock. Tabela 1: Configuração do clock. Modo CPOL CPHA Estado inativo Alteração Amostragem do clock dos dados dos dados SPI_MODE_0 0 0 baixo descida subida SPI_MODE_1 0 1 baixo subida descida SPI_MODE_2 1 0 alto subida descida SPI_MODE_3 1 1 alto descida subida 3

2.2 SPI na Galileo Gen 2 O protocolo SPI poderia ser implementado por software utilizando 4 portas GPIO quaisquer. No entanto, neste caso, a taxa máxima de transferência seria limitada pela velocidade de execução do software. Maiores taxas de transferência podem ser obtidas por implementações em hardware. O Quark X1000 possui 3 interfaces SPI. Uma é utilizada pela memória flash, outra é utilizada pelo conversor A/D e a terceira está disponível no conector de shield, conforme pinagem na tabela 2. Tabela 2: Pinagem da interface SPI no shield da Galileo Gen 2. Pino Sinal IO10 #SS IO11 MOSI IO12 MISO IO13 SCLK O barramento SPI disponível no conector de shield da Galileo Gen 2 é acessado através do dispositivo/dev/spidev1.0, que suporta as operações open(), close(),read(),write() eioctl(). As operações deread() ewrite() são utilizadas para receber e transmitir dados, respectivamente, no modo halfduplex. A operação ioctl() é usada para configurar a porta SPI e para transmitir e receber dados no modo full-duplex, conforme as operações mostradas na tabela 3, cujas constantes estão definidas no arquivo de cabeçalho linux/spi/ spidev.h. Tabela 3: Operaçõesioctl(). Operação Descrição SPI_IOC_RD_MODE Lê o modo do clock SPI_IOC_WR_MODE Escreve o modo do clock SPI_IOC_RD_LSB_FIRST Lê a justificação dos bits SPI_IOC_WR_LSB_FIRST Escreve a justificação dos bits SPI_IOC_RD_BITS_PER_WORD Lê o tamanho da palavra SPI_IOC_WR_BITS_PER_WORD Escreve o tamanho da palavra SPI_IOC_RD_MAX_SPEED_HZ Lê a taxa de transferência máxima SPI_IOC_WR_MAX_SPEED_HZ Escreve a taxa de transferência máxima SPI_IOC_MESSAGE(N) Envia/recebeNmensagens 4

A tabela 1 mostra as constantes estão definidas para configurar o modo do clock. As constantes SPI_CPOL e SPI_CPHA podem ser usadas como máscara para obter os bits correspondentes do modo do clock. A constante SPI_LSB_FIRST pode ser usada para configurar a justificação dos bits. As mensagens enviadas no modo full-duplex utilizam um buffer com o seguinte formato, definido no arquivo de cabeçalholinux/spi/spidev.h: struct spi_ioc_transfer { u64 tx_buf; u64 rx_buf; u32 u32 u16 u8 u8 u32 len; speed_hz; delay_usecs; bits_per_word; cs_change; pad; }; onde: tx_buf: ponteiro para o buffer de transmissão rx_buf: ponteiro para o buffer de recepção len: tamanho dos buffers speed_hz: taxa de transferência delay_usecs: delay para desativar o#ss após a última transferência bits_per_word: tamanho da palavra cs_change: 1 para desativar o#ss antes da próxima transferência Tipicamente, o driver do Linux para o controlador SPI é responsável por controlar o sinal#ss. Na Galileo Gen 2 o sinalgpio10 (IO10) é usado como chip select. No entanto, a biblioteca do Arduino tem um paradigma diferente para isso. Ao invés de assumir um chip select gerenciado pelo controlador SPI, o Arduino assume que qualquer saída GPIO pode ser usada como chip select e deixa isso para a aplicação. 5

Para evitar o conflito entre o Linux e o Arduino, o driver SPI da Galileo Gen 2 é configurado, por default para não usar o gpio10 como chip select, mantendo a compatibilidade com o paradigma do Arduino. No entanto, este default pode ser alterado para que o driver SPI da Galileo Gen 2 gere o chip select implicitamente. Para isso é necessário passar o seguinte parâmetro na linha de comando do kernel: intel_qrk_plat_galileo_gen2.gpio_cs=1 Isso pode ser feito, por exemplo, adicionando-se este parâmetro na linha correspondente (a que começa com a palavra kernel) no arquivo/media/card/ boot/grub/grub.conf. Note que o arquivo grub.conf default da Galileo Gen2 está configurado com duas imagens de kernel. A primeira é para o kernel armazenado na memória flash e a segunda é para o kernel armazenado no cartão microsd e é esta que deve ser alterada. Pode-se verificar que a gpio10 foi reservada para uso do driver SPI através do comando: echo 10 > /sys/class/gpio/export que se a porta está reservada para o driver SPI, retornará erro pois neste caso ela não pode ser exportada para ser usada como GPIO. A listagem 1 é um programa para mostrar a configuração da interface SPI, ou seja, modo do clock, justificação dos bits, tamanho da palavra e taxa de transferência máxima. Listagem 1: Programa para mostrar a configuração da interface SPI. 1 #include <fcntl.h> 2 #include <stdint.h> 3 #include <stdio.h> 4 #include <unistd.h> 5 #include <sys/ioctl.h> 6 #include <linux/spi/spidev.h> 7 8 int main(int argc,char *argv[]) 9 { 10 int fd; 11 uint8_t mode; 12 uint8_t lsb; 13 uint8_t bpw; 14 uint32_t rate; 15 16 if(argc!= 2) 17 { 6

18 printf("usage: spistat device\n"); 19 return -1; 20 } 21 if((fd=open(argv[1],o_rdwr))==-1) 22 { 23 perror("can t open device"); 24 return -1; 25 } 26 if(ioctl(fd,spi_ioc_rd_mode,&mode)) 27 { 28 perror("can t read clock mode"); 29 return -1; 30 } 31 printf("clock mode: 0x%x CPOL=%d CPHA=%d\n", 32 mode, 33 (mode & SPI_CPOL)? 1:0, 34 (mode & SPI_CPHA)? 1:0); 35 if(ioctl(fd,spi_ioc_rd_lsb_first,&lsb)) 36 { 37 perror("can t read LSB mode"); 38 return -1; 39 } 40 printf("lsb mode: 0x%x\n",lsb); 41 if(ioctl(fd,spi_ioc_rd_bits_per_word,&bpw)) 42 { 43 perror("can t read bits per word"); 44 return -1; 45 } 46 printf("bits per word: %d\n",bpw); 47 if(ioctl(fd,spi_ioc_rd_max_speed_hz,&rate)) 48 { 49 perror("can t read maximal rate"); 50 return -1; 51 } 52 printf("maximal transfer rate: %d Hz\n",rate); 53 close(fd); 54 return 0; 55 } 7

3 Experimentos 1. Modifique a linha de comando do kernel da Galileo para que o o sinal#ss do barramento SPI seja gerado automaticamente. Atente para alterar a linha de comando do kernel que está no microsd e não na flash. 2. Reinicialize a Galileo e verifique se a configuração do sinal#ss está correta. 3. Crie o grupospi e inclua o seu usuário nele. 4. Baixe do Moodle <http://moodle.ece.ufrgs.br> o script de inicialização para configurar a Galileo para uso do barramento SPI e as permissões de leitura e escrita para o grupo spi no dispositivo/dev/spidev1. 0. 5. Instale o script de inicialização e reinicialize a Galileo. 6. Compile e execute o programa mostrado na Listagem 1. 7. Faça um programa para transmitir dados utilizando a interface SPI da Galileo Gen2. 8. Baixe do Moodle <http://moodle.ece.ufrgs.br> o programa que implementa em software um escravo SPI. Este escravo usa os pinos IO4 comosclk,io5 comomosi,io6 comomiso eio9 como#ss. 9. Procure entender em linhas gerais o código fonte do programa e gere o executável. 10. Baixe do Moodle <http://moodle.ece.ufrgs.br> o script de inicialização para configurar os pinos IO4, IO5, IO6 e IO9 pra funcionamento do escravo SPI por software. 11. Conecte os pinos da interface SPI da Galileo Gen 2 nos pinos utilizados pelo programa que implementa o escravo SPI. 12. Teste os programas utilizando uma taxa de transferência de 1 khz. Execute o mestre SPI em uma janela e o escravo em outra. 8