Buscar

SM-10 -I2C

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

Continue navegando