Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-1 MSP430 – I2C I2C Inter-IC Bus Sistemas Microprocessados / Ricardo Zelenovsky MSP430-2 1. Introdução 2. Conceituação do Barramento I2C 3. Funcionamento 4. I2C no MSP 5. Registradores Sumário MSP430 – Porta Serial Sistemas Microprocessados / Ricardo Zelenovsky MSP430-3 MSP430 – I2C Desafio de fazer um barramento de comunicação síncrona, bidirecional, com arbitragem usando apenas 2 condutores VDD R SCL Dispositivo 1 VDD R SDA SCL SDA . . . Dispositivo 2 SCL SDA Dispositivo 3 SCL SDA Dispositivo n SCL SDA Sistemas Microprocessados / Ricardo Zelenovsky MSP430-4 MSP430 – I2C • Pode operar como mestre ou escravo • Espaçamento de endereço de 7 bits (128 endereços) • Atende à arbitragem multi-mestre • Uma forma simples e poderosa de comunicação • Necessita de apenas dois condutores • Velocidade de até 400 kbits/seg (fast-mode) • Circuito para rejeição de ruído • Possibilidade de programar o endereço quando opera como escravo • Pode despertar o MSP quando reconhece o endereço como escravo Sistemas Microprocessados / Ricardo Zelenovsky MSP430-5 MSP430 – I2C D F P C E B D = Dreno (Drain) F = Fonte (Source) P = Porta (Gate) Transistor Bipolar C = Coletor E = Emissor B = Base MOS Bipolar G = nível alto Conduzindo B = nível alto Conduzindo G = nível baixo Cortado B = nível baixo Cortado Transistor MOSFET Sistemas Microprocessados / Ricardo Zelenovsky MSP430-6 MSP430 – I2C Sit. P1 (B1) P2 (B2) Q1 Q2 S 1 1 0 Cd Ct 0 2 0 1 Ct Cd 1 3 0 0 Ct Cd Hi-Z 4 1 1 Cd Cd Não usar Sistemas Microprocessados / Ricardo Zelenovsky MSP430-7 MSP430 – I2C Sit. P1 (B1) P2 (B2) Q1 Q2 S 1 1 0 Cd Ct 0 2 0 1 Ct Cd 1 3 0 0 Ct Cd Hi-Z 4 1 1 Cd Cd Não usar Sistemas Microprocessados / Ricardo Zelenovsky MSP430-8 MSP430 – I2C Dreno ou coletor aberto Sit. P1 (B1) Q1 S 1 1 Cd 0 2 0 Ct Hi-Z Sistemas Microprocessados / Ricardo Zelenovsky MSP430-9 MSP430 – I2C Pull-up Sit. P1 (B1) Q1 S 1 1 Cd 0 2 0 Ct 1 Sistemas Microprocessados / Ricardo Zelenovsky MSP430-10 MSP430 – I2C Wired-AND Sit. Q1 Q2 S1 S2 S 1 Cd Cd 0 0 0 2 Cd Ct 0 1 0 3 Ct Cd 1 0 0 4 Ct Ct 1 1 1 Sistemas Microprocessados / Ricardo Zelenovsky MSP430-11 MSP430 – I2C - Conexão Sistemas Microprocessados / Ricardo Zelenovsky MSP430-12 MSP430 – I2C – Tempo de Subida Sistemas Microprocessados / Ricardo Zelenovsky MSP430-13 MSP430 – I2C – Velocidades Parâmetros Standard Fast High – Speed High - Speed Velocidade (kbits/seg) 0 a 100 0 a 400 0 a 1700 0 a 3400 Máxima cap. (pF) 400 400 400 100 Tempo de subida (ηs) 1000 300 160 80 Filtro ruído (ηs) - 50 10 10 Sistemas Microprocessados / Ricardo Zelenovsky MSP430-14 MSP430 – I2C – Barramento VDD R SCL Dispositivo 1 VDD R SDA SCL SDA . . . Dispositivo 2 SCL SDA Dispositivo 3 SCL SDA Dispositivo n SCL SDA • A linha (SCL ou SDA) vai para nível baixo quando um dos dispositivos a ela conectado faz sua saída igual a zero. • A linha (SCL ou SDA) só vai para nível alto quando todos os dispositivos a ela conectados estão com suas saídas em um. Sistemas Microprocessados / Ricardo Zelenovsky MSP430-15 MSP430 – I2C – Terminologia VDD R SCL Dispositivo 1 VDD R SDA SCL SDA . . . Dispositivo 2 SCL SDA Dispositivo 3 SCL SDA Dispositivo n SCL SDA Termo Descrição Mestre É o dispositivo que inicia e termina a transmissão. Ele é responsável por gerar o relógio SCL. Escravo Dispositivo endereçado pelo Mestre. Transmissor Dispositivo que coloca dados no barramento. Receptor Dispositivo que lê os dados do barramento. Sistemas Microprocessados / Ricardo Zelenovsky MSP430-16 MSP430 – I2C – Transf. de Dado SDA SCL Dado estável Dado estável Alteração do dado SCL = 0 � pode alterar o dado. SCL = 1 � dado estável. Sistemas Microprocessados / Ricardo Zelenovsky MSP430-17 MSP430 – I2C – Start/Stop SDA SCL START S P STOP START� SCL = 1 e SDA vai de alto para baixo. STOP� SCL = 1 e SDA vai de baixo para alto. Sistemas Microprocessados / Ricardo Zelenovsky MSP430-18 MSP430 – I2C – Start Repetido Start Repetido � Mestre iniciou uma nova transação sem liberar o barramento. Transação 1 P Transação 2 PS Transação 3S S START REPETIDO Usado geralmente para mudar a direção da comunicação com o escravo. Sistemas Microprocessados / Ricardo Zelenovsky MSP430-19 MSP430 – I2C – Endereço • Pacote de endereço tem 7 bits + 1 bit de direção 1 b7 0 b6 0 b5 1 b4 0 b3 1 b2 0 b1 x R/W R/W = 1� Leitura R/W = 0 � Escrita • 27 = 128 endereços possíveis. • O dispositivo acima (1001 010x) tem 2 endereços: • Um para leitura (SLA+R) � 0x95 • Outro para escrita (SLA+W) � 0x94 Sistemas Microprocessados / Ricardo Zelenovsky MSP430-20 MSP430 – I2C – Endereço • Dispositivo endereçado tem obrigação de responder com um acknowledge (ACK). • Caso esteja ocupado, usa o not acknowledge (NAK) Sistemas Microprocessados / Ricardo Zelenovsky MSP430-21 MSP430 – I2C – Endereço • Mestre � Escravo • Escravo � Mestre Sistemas Microprocessados / Ricardo Zelenovsky MSP430-22 MSP430 – I2C – Típica Transmissão • Mestre � Escravo ou Escravo � Mestre. Endereço DadoS R/W ACK ACK n repetições PÚltimo Dado ACK Sistemas Microprocessados / Ricardo Zelenovsky MSP430-23 MSP430 – USCI USCI ���� Universal Serial Communication Interface • No MSP430, portas seriais construídas com USCI • Diferentes USCI atendem a diferentes modos. • Cada USCI diferente é numerada com uma letra. USCI_A, USCI_B, ... • USCI idênticas são numeradas com números. USCI_A0, USCI_A1, ... • USCI� múltiplos modos de comunicação serial. Sistemas Microprocessados / Ricardo Zelenovsky MSP430-24 MSP430 – USCI USCI_A0, USCI_A1: MSP430F5529 • Enhanced UART com detecção de Baudrate. • Codificador e Decodificador IrDA. • SPI síncrono. USCI_B0, USCI_B1: • I2C. • SPI síncrono. Sistemas Microprocessados / Ricardo Zelenovsky MSP430-25 MSP430 – USCI - I2C • Atende a especificação Philips I2C v2.1. • Modos de endereçamento de 7 e 10 bits. • START / RESTART / STOP. • Modo multimestre transmissor/receptor. • Modo escravo transmissor/receptor. • Chamada Geral. • Modo standard (100 kbps) e modo fast (400 kbps). • Frequência do SCL programável no modo mestre. • Projetado para baixo consumo. • Despertar com Slave Start. Sistemas Microprocessados / Ricardo Zelenovsky MSP430-26 0 1 2 3 UC1CLK ACLK SMCLK UCSSELx 2 SMCLK MSP430 – USCI_Bx modo I2C BRCLK Pré- escalonador Divisor 16 UCxBRW UCxSCL Pino – Não disp. 1 UCMST Sistemas Microprocessados / Ricardo Zelenovsky MSP430-27 MSP430 – USCI_Bx modo I2C UCRXBUF UCA10 Máquina Estados I2C UCTXBUF Reg. Desloc. RX Reg. Desloc. TX UCxSCL Próprio Endereço UCBxI2COA Endereço Escravo UCBxI2CSA UCGCEN 1 1 UCSLA10 1 UCxSDA Sistemas Microprocessados / Ricardo Zelenovsky MSP430-28 MSP430 – USCI - I2C - Reset • PUC resseta USCI e faz UCSWRST = 1. • UCSWRST = 1 mantém USCI em ressete. • UCSWRST = 0 libera UCSI para operação. RESET • UCMODEx = 11b seleciona opção I2C. Sistemas Microprocessados / Ricardo Zelenovsky MSP430-29 MSP430 – USCI UART - Inicialização 1) UCSWRST = 1 (BIS.B #UCSWRST,&UCAxCTL1). 2) Inicializar registradores. 3) Configurar as portas. 4) UCSWRST = 0 (BIC.B #UCSWRST,&UCAxCTL1). 5) Se for o caso, habilitar as interrupções. UCSWRST = Reset da UCSI. Sistemas Microprocessados / RicardoZelenovsky MSP430-30 MSP430 – USCI – I2C Mestre Para ser configurada como Mestre: 1) UCMODEx = 11b 2) UCSYNC = 1 3) UCMST = 1 4) Em caso de multimestre, configurar UCBxI2COA Own Address 5) UCA10 = 0 � 7 bits de endereço 6) UCA10 = 1 � 10 bits de endereço 7) UCGCEN = 1 � se for responder ao General Call Sistemas Microprocessados / Ricardo Zelenovsky MSP430-31 MSP430 – USCI – I2C Mestre TX 1) UCBxI2CSA = endereço do escravo 2) UCSLA10 = 0 � para endereço 8 bits 3) UCTR = 1 � Modo Transmissor 4) UCTXSTT = 1� gerar condição de START a) USCI verifica a disponibilidade do barramento b) Gera condição de START e transmite endereço c) UCTXSTT = 0� escravo gerou ACK d) Se UCTXIFG = 1, pronto para transmitir d.1) UCBxTXBUF = recebe dados a transmitir Sistemas Microprocessados / Ricardo Zelenovsky MSP430-32 MSP430 – USCI – I2C Mestre TX UCTXSP = 1 � gerar STOP após ACK do escravo Escrever em UCBxTXBUF, depois fazer UCTXSP = 1 UCTXSTT = 1� permite gerar START repetido Neste caso UCTR (direção) pode mudar de valor UCNACIFG = 1� indica que escravo não gerou ACK i) Mestre gera um STOP ou ii) Mestre gera um START repetido Sistemas Microprocessados / Ricardo Zelenovsky MSP430-33 SLA/WS MSP430 – USCI – I2C Mestre TX A Dado A Dado A P UCBxI2CSA=adr/W UCTR=1(TX) UCTXIFG=1 UCTXSTT=0 UCTXIFG=1 UCBxTXBUF=Dado UCTXSTP=1 UCTXIFG=0 UCTXSTP=0 n vezes UCTXIFG=1 � pode escrever dado no UCBxTXBUF Só fazer UCTXSTP=1 após UCTXIFG=1 UCTXSTT=1 Terminou a transação! Sistemas Microprocessados / Ricardo Zelenovsky MSP430-34 SLA/WS MSP430 – USCI – I2C Mestre TX A P UCBxI2CSA=adr/W UCTR=1(TX) UCTXIFG=1 UCBxTXBUF=Dado UCTXSTP=0 UCTXSTT=1 SLA/WSA SLA/RSA UCTXSTP=1 UCTXIFG=0 Escravo respondeu com um NACK! E agora? Parou ou desisitiu Pode tentar o mesmo endereço ou endereçar um outro escravo. UCNACKIFG=1 Sistemas Microprocessados / Ricardo Zelenovsky MSP430-35 SLA/RS MSP430 – USCI – I2C Mestre RX A Dado A Dado A P UCBxI2CSA=adr/R UCTR=0(RX) UCTXSTT=0 UCRXIFG=1 Ler UCBxRXBUF UCTXSTP=1 UCTXSTP=0 n vezes UCRXIFG=1 � pode ler dado no UCBxRXBUF UCTXSTT=1 Terminou a transação! Sistemas Microprocessados / Ricardo Zelenovsky MSP430-36 MSP430 – USCI – Configurar// Configurar Pinos I2C - UCSB0 // P3.0 --> SDA // P3.1 --> SCL void config_I2C(void){ SDA_SEL |= SDA_BIT; // Use dedicated module SDA_REN |= SDA_BIT; // Resistor enable SDA_OUT |= SDA_BIT; // Pull-up SCL_SEL |= SCL_BIT; // Use dedicated module SCL_REN |= SCL_BIT; // Resistor enable SCL_OUT |= SCL_BIT; // Pull-up UCB0CTL1 |= UCSWRST; // UCSI B0 em ressete UCB0CTL0 = UCSYNC | //Síncrono UCMODE_3 | //Modo I2C UCMST; //Mestre //UCB0BRW = BR100K; //100 kbps //UCB0BRW = BR20K; // 20 kbps UCB0BRW = BR10K; // 10 kbps UCB0CTL1 = UCSSEL_2; //SMCLK e remove ressete } Sistemas Microprocessados / Ricardo Zelenovsky MSP430-37 MSP430 – USCI – Mestre TX // Escrever dado na porta void PCF_write(char dado){ UCB0I2CSA = PCF; //Endereço Escravo UCB0CTL1 |= UCTR | //Mestre TX UCTXSTT; //Gerar START while ( (UCB0IFG & UCTXIFG) == 0) ; //Esperar TXIFG if ( (UCB0IFG & UCNACKIFG) == UCNACKIFG) //NACK? while(1); UCB0TXBUF = dado; while ( (UCB0IFG & UCTXIFG) == 0) ; //Esperar TX UCB0CTL1 |= UCTXSTP; //Gerar STOP while ( (UCB0CTL1 & UCTXSTP) == UCTXSTP) ; //Esperar STOP delay(50); } Sistemas Microprocessados / Ricardo Zelenovsky MSP430-38 MSP430 – USCI – Mestre RX // Ler a porta do PCF int PCF_read(void){ int dado; UCB0CTL1 &= ~UCTR; //Mestre RX UCB0CTL1 |= UCTXSTT; //Gerar START while ( (UCB0CTL1 & UCTXSTT) == UCTXSTT); UCB0CTL1 |= UCTXSTP; //Gerar STOP + NACK while ( (UCB0IFG & UCRXIFG) == 0) ; //Esperar RX dado=UCB0RXBUF; delay(50); return dado; } Sistemas Microprocessados / Ricardo Zelenovsky MSP430-39 MSP430 – USCI – I2C – Sinc. SCL SCL SCL Mestre A Mestre B Linha SCL TAL TAH TBL TBH TAL TBH 1 2 3 Vários mestres acionando a linha SCL Sincronização é automática! mais lento � tempo em baixo mais rápido � tempo em alto Sistemas Microprocessados / Ricardo Zelenovsky MSP430-40 MSP430 – USCI – I2C Arbitragem RX Mestre A - SDA (sincronizada) SCL S Linha SDA Mestre C - SDA Mestre B - SDA 1 2 3 4 Perdeu Arbitragem – sai fora Sistemas Microprocessados / Ricardo Zelenovsky MSP430-41 Seleção do BRCLK (já visto) 0 1 2 3 UC1CLK ACLK SMCLK UCSSELx 2 SMCLK BRCLK Pino? MSP430 – USCI – I2C - CLOCK Sistemas Microprocessados / Ricardo Zelenovsky MSP430-42 UCBRx (Divisor) BRCLK BITCLK = SCL Modo Baixa Frequência: UCOS = 0 BR UCBRx = INT (N) RESUMO N = BRCLK / BR MSP430 – USCI – I2C - CLOCK Sistemas Microprocessados / Ricardo Zelenovsky MSP430-43 MSP430 – Registradores do USCI A seguir estão descritos os registradores da USCI para operação da porta I2C Sistemas Microprocessados / Ricardo Zelenovsky MSP430-44 MSP430 – Registradores do USCI UCBxCTL0 UCBxCTLW0 UCBxCTLW0 ���� Palavra de Controle 0 0 UCBxCTL1 707 015 Sistemas Microprocessados / Ricardo Zelenovsky MSP430-45 MSP430 – Registradores - USCI - I2C 3 UCMODEX- UCMST UCBxCTL0 ���� Controle 0 do USCI_Bx Modo 0 = Escravo 1 = Mestre Multi Master? 0 = Simples 1 = Múltiplo 014 UCMM 5 Modo USCI 00 = SPI 3 pinos 01 = SPI 4 pinos (ver STE) 10 = SPI 4 pinos (ver STE) 11 = I2C 2 UCSYNC Modo Síncrono 0 = Assíncrono 1 = Síncrono 67 UCSLA10UCA10 Modo Endereço Escravo 0 = 7 bits 1 = 8 bits Modo Endereço Próprio 0 = 7 bits 1 = 8 bits Sistemas Microprocessados / Ricardo Zelenovsky MSP430-46 3 UCTXSTTUCTXNACK UCTXSTP UCBxCTL1 ���� Controle 1 do USCI_Bx STOP 0 = Nada 1 = STOP Acknowledge 0 = ACK 1 = NACK TX / RX 0 = RX 1 = TX 014 UCTR 5 START 0 = Nada 1 = START 2 UCSWRST Reset 0 = Operando 1 = Reset 67 -UCSSELx BRCLK 00=UCLKI (pino) 01 = ACLK 10 = SMCLK 11 = SMCLK MSP430 – Registradores - USCI - I2C Sistemas Microprocessados / Ricardo Zelenovsky MSP430-47 UCBxBR0 UCBxBRW UCAxBRW ���� Palavra de Controle de Bit Rate 0 UCBxBR1 707 015 Este registrador (16 bits) é o divisor UCBRx MSP430 – Registradores - USCI - I2C Sistemas Microprocessados / Ricardo Zelenovsky MSP430-48 3 UCBxSTAT ���� Registrador de Status do USCI_Bx Houve General Call? 0 = Não 1 = Sim 04 UCGC 567 UCSCLLOW- SCL Low? 0 = SCL não em Low 1 = SCL em Low UCBBUSY Ocupado 0 = Bus Inativo 1 = Bus Ocupado MSP430 – Registradores - USCI - I2C - Sistemas Microprocessados / Ricardo Zelenovsky MSP430-49 UCBxRXBUF ���� Buffer de Recepção 7 0 7 0 • Contém o último dado recebido. • Leitura faz UCBxRXIFG=0. UCBxTXBUF ���� Buffer de Transmissão • Contém o dado a ser transmitido. • Escrita faz UCTXIFG=0. MSP430 – Registradores - USCI - I2C Sistemas Microprocessados / Ricardo Zelenovsky MSP430-50 UCBxI2COA ���� Próprio Endereço do USCI_Bx Próprio Endereço 7 ou 10 bits de Endereço Justificado pela direita 0 I2COA 14 915 -UCGEN Resposta General Call 0=Não Responda 1=Responda MSP430 – Registradores - USCI - I2C 10 Sistemas Microprocessados / Ricardo Zelenovsky MSP430-51 UCBxI2CSA ���� Endereço do Escravo do USCI_Bx Endereço do Escravo 7 ou 10 bits de Endereço Justificado pela direita 0 I2CSAx 15 915 - MSP430 – Registradores - USCI - I2C 10 Sistemas Microprocessados / Ricardo Zelenovsky MSP430-52 MSP430 – Registradores - USCI - I2C 3 UCTXIEUCSTPIE UCSTTIE UCBxIE ���� Habilitaçãode Interrupções do USCI_Bx START 0 = Desab 1 = Hab Perda Arbitragem 0 = Desab 1 = Hab 014 UCALIE 5 Int TX 0 = Desab 1 = Hab 2 UCRXIE Int RX 0 = Desab 1 = Hab 7 6 UCNACKIE- NACK 0 = Deab 1 = Hab STOP 0 = Desab 1 = Hab Sistemas Microprocessados / Ricardo Zelenovsky MSP430-53 MSP430 – Registradores - USCI - I2C UCTXIFGUCSTPIFG UCSTTIFG UCBxIFG ���� Flags de Interrupções do USCI_Bx START 0 = Nada 1 = Pendente Perda Arbitragem 0 = Nada 1 = Pendente UCALIFG Int TX 0 = Nada 1 = Pendente UCRXIFG Int RX 0 = Nada 1 = Pendente UCNACKIFG- NACK 0 = Nada 1 = Pendente STOP 0 = Nada 1 = Pendente 3 0145 27 6 Sistemas Microprocessados / Ricardo Zelenovsky MSP430-54 01234 UCB Interrupt vector 15 0x0 � Sem Interrupção Pendente 0x2 � Perda de Arbitragem (UCALIFG = 1) 0x4 � Not Acknowledgment (UCNACKIFG = 1) 0x6 � Recebeu Condição de Start (UCSTTIFG = 1) 0x8 � Recebeu Condição de Stop (UCSTPIFG = 1) 0xA � Recebeu Dado (UCRXIFG = 1) 0xC � Transmitiu Dado (UCRXIFG = 1) UCBxIV ���� Vetor de Interrupção do USCI_Bx . . .0 0 Prioridade mais alta Prioridade mais baixa Indicar qual flag provocou a interrupção MSP430 – Registradores - USCI - I2C Sistemas Microprocessados / Ricardo Zelenovsky MSP430-55 FIM MSP430 – USCI - I2C
Compartilhar