Você está na página 1de 40

Traduzido do Inglês para o Português - www.onlinedoctranslator.

com

PIC18 (L) F2X / 4XK22


FIGURA 15-4: CONEXÃO SPI MASTER E MULTIPLE SLAVE

SCLK SCLK
Mestre SPI
SDOx SDIx SPI Slave
SDIx SDOx #1
I / O geral SSx
I / O geral
I / O geral SCLK
SDIx SPI Slave
SDOx #2
SSx

SCLK
SDIx SPI Slave
SDOx #3
SSx

15.2.1 REGISTROS DE MODO SPI 15.2.2 OPERAÇÃO DO MODO SPI

O módulo MSSPx possui cinco registros para operação no Ao inicializar o SPI, várias opções precisam ser especificadas.
modo SPI. Estes são: Isso é feito programando os bits de controle apropriados
(SSPxCON1 <5: 0> e SSPxSTAT <7: 6>). Esses bits de controle
• Registro STATUS MSSPx (SSPxSTAT)
permitem que o seguinte seja especificado:
• Registro de controle MSSPx 1 (SSPxCON1)
• Registro de controle MSSPx 3 (SSPxCON3)
• Modo Master (SCKx é a saída de relógio)
• Modo escravo (SCKx é a entrada do relógio)
• Registro do buffer de dados MSSPx (SSPxBUF)
• Polaridade do relógio (estado ocioso de SCKx)
• Registro de endereço MSSPx (SSPxADD)
• Fase de amostra de entrada de dados (meio ou fim do tempo de
• Registro MSSPx Shift (SSPxSR) (não
saída de dados)
acessível diretamente)
• Clock Edge (dados de saída na borda ascendente / descendente de
SSPxCON1 e SSPxSTAT são os registros de controle e
SCKx)
STATUS na operação no modo SPI. O registro
• Taxa de clock (apenas modo Master)
SSPxCON1 é legível e gravável. Os 6 bits inferiores do
SSPxSTAT são somente leitura. Os dois bits superiores • Modo Slave Select (apenas modo Slave)
do SSPxSTAT são de leitura / gravação. Para habilitar a porta serial, o bit SSPx Enable, SSPxEN do
Em um modo mestre SPI, SSPxADD pode ser carregado com um registro SSPxCON1, deve ser definido. Para redefinir ou
valor usado no gerador de taxa de transmissão. Mais reconfigurar o modo SPI, limpe o bit SSPxEN, reinicialize
informações sobre o Gerador de Baud Rate estão disponíveis em os registros SSPxCONx e defina o SSPxEN
Seção 15.7 “Gerador de taxa de transmissão”. pedaço. Isso configura os pinos SDIx, SDOx, SCKx e SSx como
pinos da porta serial. Para que os pinos se comportem como a
SSPxSR é o registrador de deslocamento usado para inserir e
função da porta serial, alguns devem ter seus bits de direção de
retirar dados. SSPxBUF fornece acesso indireto ao registro
dados (no registro TRIS) devidamente programados da seguinte
SSPxSR. SSPxBUF é o registro de buffer no qual os bytes de
forma:
dados são gravados e a partir do qual os bytes de dados são
lidos. • SDIx deve ter o conjunto de bits TRIS correspondente

Em operações de recepção, SSPxSR e SSPxBUF juntos • SDOx deve ter o bit TRIS correspondente apagado
criam um receptor em buffer. Quando SSPxSR recebe um • SCKx (modo Master) deve ter o bit TRIS
byte completo, ele é transferido para SSPxBUF e a correspondente apagado
interrupção SSPxIF é definida. • SCKx (modo Slave) deve ter
TRIS bit definido
Durante a transmissão, o SSPxBUF não é armazenado em
buffer. Uma gravação em SSPxBUF gravará em SSPxBUF e • SSx deve ter o conjunto de bits TRIS correspondente
SSPxSR.

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 211


PIC18 (L) F2X / 4XK22
Qualquer função de porta serial que não seja desejada pode definir. O software do usuário deve limpar o bit WCOL para permitir
ser substituída pela programação do registro de direção de que as seguintes gravações no registro SSPxBUF sejam concluídas
dados (TRIS) correspondente para o valor oposto. com êxito.

O MSSPx consiste em um registro de deslocamento de Quando o software aplicativo espera receber dados
transmissão / recepção (SSPxSR) e um registro de buffer válidos, o SSPxBUF deve ser lido antes que o próximo
(SSPxBUF). O SSPxSR muda os dados para dentro e para fora do byte de dados a ser transferido seja gravado no
dispositivo, MSb primeiro. O SSPxBUF mantém os dados que SSPxBUF. O bit Buffer Full, BF do registro SSPxSTAT,
foram gravados no SSPxSR até que os dados recebidos estejam indica quando SSPxBUF foi carregado com os dados
prontos. Assim que os 8 bits de dados forem recebidos, esse byte recebidos (a transmissão está completa). Quando o
é movido para o registro SSPxBUF. Em seguida, o bit Buffer Full SSPxBUF é lido, o bit BF é limpo. Esses dados podem ser
Detect, BF do registro SSPxSTAT e o bit de flag de interrupção, irrelevantes se o SPI for apenas um transmissor.
SSPxIF, são definidos. Este buffer duplo dos dados recebidos Geralmente, a interrupção MSSPx é usada para
(SSPxBUF) permite que o próximo byte comece a recepção antes determinar quando a transmissão / recepção foi
de ler os dados que acabaram de ser recebidos. Qualquer concluída. Se o método de interrupção não for usado, o
gravação no registro SSPxBUF durante a transmissão / recepção polling do software pode ser feito para garantir que não
de dados será ignorada e o bit de detecção de colisão de ocorra uma colisão de gravação.
gravação, WCOL do registro SSPxCON1, será

FIGURA 15-5: CONEXÃO SPI MASTER / SLAVE

SPI Master SSPxM <3: 0> = 00xx SPI Slave SSPxM <3: 0> = 010x
= 1010
SDOx SDIx

Buffer de entrada serial Buffer de entrada serial


(BUF) (SSPxBUF)

Registro de deslocamento
SDIx SDOx Registro de deslocamento

(SSPxSR) (SSPxSR)
MSb LSb MSb LSb
Relógio Serial
SCKx SCKx

Seuave Select
I / O geral SSx
Processador 1 (opcional) Processador 2

DS41412B-page 212 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
15.2.3 MODO MASTER SPI A polaridade do relógio é selecionada programando
apropriadamente o bit CKP do registro SSPxCON1 e o bit
O mestre pode iniciar a transferência de dados a qualquer
CKE do registro SSPxSTAT. Isso, então, forneceria formas
momento porque controla a linha SCKx. O mestre determina
de onda para comunicação SPI, conforme mostrado na
quando o escravo (Processador 2, Figura 15-5) deve
Figura 15-6, Figura 15-8 e Figura 15-9, onde o MSB é
transmitir os dados pelo protocolo do software.
transmitido primeiro. No modo Master, a taxa de clock
No modo Master, os dados são transmitidos / recebidos SPI (taxa de bits) é programável pelo usuário para ser
assim que o registro SSPxBUF é escrito. Se o SPI for apenas uma das seguintes:
receber, a saída SDOx pode ser desabilitada (programada
• FOSC/ 4 (ou TCY)
como uma entrada). O registro SSPxSR continuará a mudar
no sinal presente no pino SDIx na taxa de clock programada. • FOSC/ 16 (ou 4 * TCY)
À medida que cada byte é recebido, ele será carregado no • FOSC/ 64 (ou 16 * TCY)
registro SSPxBUF como se fosse um byte recebido normal • Saída Timer2 / 2
(interrupções e bits de status • FOSC/ (4 * (SSPxADD + 1))
definido apropriadamente).
A Figura 15-6 mostra as formas de onda para o modo Master.

Quando o bit CKE é definido, os dados SDOx são válidos antes


que haja uma transição de clock no SCKx. A mudança da amostra
de entrada é mostrada com base no estado do bit SMP. A hora
em que o SSPxBUF é carregado com os dados recebidos é exibida.

FIGURA 15-6: MODO DE FORMA DE ONDA SPI (MODO MASTER)

Escrever para

SSPxBUF

SCKx
(CKP = 0
CKE = 0)

SCKx
(CKP = 1
CKE = 0)
4 relógio
Modos
SCKx
(CKP = 0
CKE = 1)

SCKx
(CKP = 1
CKE = 1)

SDOx bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0


(CKE = 0)

SDOx bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0


(CKE = 1)
SDIx
(SMP = 0) bit 0
bit 7
Entrada
Amostra
(SMP = 0)
SDIx
(SMP = 1)
bit 7 bit 0

Entrada
Amostra
(SMP = 1)
SSPxIF

SSPxSR para
SSPxBUF

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 213


PIC18 (L) F2X / 4XK22
15.2.4 MODO SPI SLAVE 15.2.5 SLAVE SELECT
No modo Slave, os dados são transmitidos e recebidos como pulsos SINCRONIZAÇÃO
de relógio externo aparecem no SCKx. Quando o último bit é travado, O Slave Select também pode ser usado para sincronizar a
o bit do sinalizador de interrupção SSPxIF é definido. comunicação. A linha Slave Select é mantida alta até que o
Antes de habilitar o módulo no modo SPI Slave, a linha do dispositivo mestre esteja pronto para se comunicar. Quando a
relógio deve corresponder ao estado Idle adequado. A linha linha Slave Select é puxada para baixo, o escravo sabe que uma
do relógio pode ser observada lendo o pino SCKx. O estado nova transmissão está começando.
Idle é determinado pelo bit CKP do registro SSPxCON1. Se o escravo não receber a comunicação corretamente,
Enquanto no modo Slave, o relógio externo é fornecido pela ela será zerada no final da transmissão, quando a linha
fonte de relógio externa no pino SCKx. Este relógio externo Slave Select retornar ao estado alto. O escravo está
deve atender aos tempos mínimos de alta e baixa, conforme pronto para receber uma nova transmissão quando a
especificado nas especificações elétricas. linha Slave Select é puxada para baixo novamente. Se a
linha Slave Select não for usada, há o risco de o escravo
Enquanto no modo Sleep, o escravo pode transmitir / receber
ficar fora de sincronia com o mestre. Se o escravo perder
dados. O registro de deslocamento é cronometrado a partir da
um pouco, sempre estará um pouco errado nas
entrada do pino SCKx e quando um byte é recebido, o dispositivo
transmissões futuras. O uso da linha Slave Select permite
irá gerar uma interrupção. Se habilitado, o dispositivo sairá do
que o escravo e o mestre se alinhem no início de cada
modo de espera.
transmissão.
15.2.4.1 Configuração de Daisy-Chain O pino SSx permite um S Síncronolavmodo e. O SPI deve
estar no modo Slave com o controle de pino SSx
O barramento SPI às vezes pode ser conectado em uma
habilitado (SSPxCON1 <3: 0> =0100).
configuração em cadeia. A primeira saída escrava é
conectada à segunda entrada escrava, a segunda saída Quando o pino SSx está baixo, a transmissão e a recepção
escrava é conectada à terceira entrada escrava e assim por são habilitadas e o pino SDOx é acionado.
diante. A saída final do escravo é conectada à entrada do Quando o pino SSx fica alto, o pino SDOx não é mais
mestre. Cada escravo envia, durante um segundo grupo de acionado, mesmo se estiver no meio de um byte transmitido
pulsos de relógio, uma cópia exata do que foi recebido e se torna uma saída flutuante. Resistores externos pull-up /
durante o primeiro grupo de pulsos de relógio. Toda a pull-down podem ser desejáveis dependendo da aplicação.
cadeia atua como um grande registrador de deslocamento
de comunicação. O recurso daisychain requer apenas uma
única linha Slave Select do dispositivo mestre. Nota 1: Quando o SPI está no modo Slave com SSx
controle de pino habilitado (SSPxCON1 <3: 0> =
A Figura 15-7 mostra o diagrama de blocos de uma
0100), o módulo SPI será reiniciado se o pino SSx for
conexão típica em cadeia ao operar no modo SPI.
definido como VDD.
Em uma configuração de ligação em cadeia, apenas o byte
2: Quando o SPI é usado em modo Slavede com
mais recente no barramento é exigido pelo escravo. Definir o
CKE definido; o usuário deve habilitar o controle de
bit BOEN do registro SSPxCON3 permitirá a gravação no
pino SSx.
registro SSPxBUF, mesmo se o byte anterior não tiver sido
lido. Isso permite que o software ignore dados que podem 3: Enquanto operado no modo SPI Slave, o
não se aplicar a ele. O bit SMP do registro SSPxSTAT deve
permanecer limpo.
Quando o módulo SPI é reiniciado, o contador de bits é
forçado a '0 '. Isso pode ser feito forçando o pino SSx a
um nível alto ou limpando o bit SSPxEN.

DS41412B-page 214 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
FIGURA 15-7: CONEXÃO SPI DAISY-CHAIN

SCLK SCLK
Mestre SPI
SDOx SDIx SPI Slave
SDIx SDOx #1
I / O geral SSx

SCLK
SDIx SPI Slave
SDOx #2
SSx

SCLK
SDIx SPI Slave
SDOx #3
SSx

FIGURA 15-8: SLAVE SELECT SYNCHRONOUS WAVEFORM

SSx

SCKx
(CKP = 0
CKE = 0)

SCKx
(CKP = 1
CKE = 0)

Escrever para

SSPxBUF
Registro de deslocamento SSPxSR
e a contagem de bits é zerada
SSPxBUF para
SSPxSR

SDOx bit 7 bit 6 bit 7 bit 6 bit 0

SDIx bit 0
bit 7 bit 7
Entrada
Amostra

SSPxIF
Interromper
Bandeira

SSPxSR para
SSPxBUF

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 215


PIC18 (L) F2X / 4XK22
FIGURA 15-9: MODO DE FORMA DE ONDA SPI (MODO ESCRAVO COM CKE = 0)

SSx
Opcional

SCKx
(CKP = 0
CKE = 0)

SCKx
(CKP = 1
CKE = 0)
Escrever para

SSPxBUF
Válido

SDOx bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

SDIx
bit 7 bit 0

Entrada
Amostra

SSPxIF
Interromper
Bandeira

SSPxSR para
SSPxBUF

Colisão de Gravação

detecção ativa

FIGURA 15-10: MODO DE FORMA DE ONDA SPI (MODO ESCRAVO COM CKE = 1)

SSx
Não Opcional

SCKx
(CKP = 0
CKE = 1)

SCKx
(CKP = 1
CKE = 1)
Escrever para

SSPxBUF
Válido

SDOx bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

SDIx
bit 7 bit 0
Entrada
Amostra

SSPxIF
Interromper
Bandeira

SSPxSR para
SSPxBUF

Colisão de Gravação

detecção ativa

DS41412B-page 216 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
15.2.6 OPERAÇÃO SPI EM MODO DORMIR No modo SPI Master, quando o modo Sleep é selecionado, todos
os relógios do módulo são parados e a transmissão / recepção
No modo SPI Master, os relógios do módulo podem estar
permanecerá nesse estado até o dispositivo despertar. Depois
operando em uma velocidade diferente do que no modo Full-
que o dispositivo retornar ao modo de operação, o módulo
Power; no caso do modo Sleep, todos os relógios são parados.
continuará transmitindo e recebendo dados.
Cuidado especial deve ser tomado pelo usuário quando o relógio do
No modo SPI Slave, o registro SPI Transmit / Receive Shift
MSSPx for muito mais rápido do que o relógio do sistema.
opera de forma assíncrona com o dispositivo. Isso permite
No modo Slave, quando as interrupções do MSSPx são que o dispositivo seja colocado no modo Sleep e os dados
habilitadas, depois que o mestre conclui o envio de dados, uma sejam transferidos para o registro SPI Transmit / Receive
interrupção do MSSPx desperta o controlador do repouso. Shift. Quando todos os 8 bits forem recebidos, o bit do
sinalizador de interrupção do MSSPx será definido e, se
Se uma saída do modo Sleep não for desejada, as interrupções
ativado, despertará o dispositivo.
do MSSPx devem ser desabilitadas.

TABELA 15-1: REGISTROS ASSOCIADOS À OPERAÇÃO SPI


Registro
Nome Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
na página

ANSELA - - ANSA5 - ANSA3 ANSA2 ANSA1 ANSA0 152


ANSELB - - ANSB5 ANSB4 ANSB3(1) ANSB2(1) ANSB1(1) ANSB0(1) 153
ANSELC ANSC7 ANSC6 ANSC5 ANSC4 ANSC3 ANSC2 - - 153
ANSELD ANSD7 ANSD6 ANSD5 ANSD4(2) ANSD3(2) ANSD2 ANSD1(2) ANSD0(2) 153
INTCON GIE / GIEH PEIE / GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 115
IPR1 - UM MERGULHO RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 127
IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP 129
PIE1 - ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 123
PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIE 125
PIR1 - ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 118
PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF 120
PMD1 MSSP2MD MSSP1MD - CCP5MD CCP4MD CCP3MD CCP2MD CCP1MD 57
SSP1BUF Buffer de recepção / registro de transmissão SSP1 -
SSP1CON1 WCOL SSPOV SSPEN CKP SSPM <3: 0> 256
SSP1CON3 ACKTIM PCIE SCIE BOEN SDAHT SBCDE AHEN DHEN 259
SSP1STAT SMP CKE D/A P S R / W UA BF 255
SSP2BUF Buffer de recepção / registro de transmissão SSP2 -
SSP2CON1 WCOL SSPOV SSPEN CKP SSPM <3: 0> 256
SSP2CON3 ACKTIM PCIE SCIE BOEN SDAHT SBCDE AHEN DHEN 259
SSP2STAT SMP CKE D/A P S R/W UA BF 255
TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 154
TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3(1) TRISB2(1) TRISB1(1) TRISB0(1) 154
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 154
TRISD TRISD7 TRISD6 TRISD5 TRISD4(2) TRISD3(2) TRISD2 TRISD1(2) TRISD0(2) 154
Lenda: Os bits sombreados não são usados pelo MSSPx no modo SPI.
Nota 1: Dispositivos PIC18 (L) F2XK22.
2: Dispositivos PIC18 (L) F4XK22.

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 217


PIC18 (L) F2X / 4XK22
15,3 eu2VISÃO GERAL DO MODO C FIGURA 15-11: eu2C ™ MASTER /
CONEXÃO ESCRAVO
O Barramento de Circuito Integrado (I2C) é um barramento de
comunicação de dados serial multimestre. Os dispositivos se
comunicam em um ambiente mestre / escravo, onde os VDD
dispositivos mestres iniciam a comunicação. Um dispositivo
escravo é controlado por meio de endereçamento.
SCLK SCLK
O eu2O barramento C especifica duas conexões de sinal:
VDD
• Relógio serial (SCLx) Mestre Escravo
• Dados seriais (SDAx)
SDIx SDOx
A Figura 15-11 mostra o diagrama de blocos do
módulo MSSPx ao operar em I2Modo C.
Ambas as conexões SCLx e SDAx são linhas de dreno aberto
bidirecionais, cada uma exigindo resistores pull-up para a O bit de reconhecimento (ACK) é um sinal ativo baixo,
tensão de alimentação. Puxar a linha até o solo é que mantém a linha SDAx baixa para indicar ao
considerado um zero lógico e deixar a linha flutuar é transmissor que o dispositivo escravo recebeu os dados
considerado um zero lógico. transmitidos e está pronto para receber mais.
A Figura 15-11 mostra uma conexão típica entre dois A transição dos bits de dados é sempre executada enquanto a
processadores configurados como dispositivos mestre e escravo. linha SCLx é mantida baixa. As transições que ocorrem enquanto
O eu2O barramento C pode operar com um ou mais dispositivos a linha SCLx é mantida alta são usadas para indicar os bits de
mestres e um ou mais dispositivos escravos. início e parada.

Existem quatro modos potenciais de operação para um determinado Se o mestre pretende gravar no escravo, ele envia
dispositivo: repetidamente um byte de dados, sagacidadeh o escravo
respondendo após cada byte com um bit ACK. Neste
• Modo de transmissão mestre
exemplo, o dispositivo mestre está no modo de transmissão
(o mestre está transmitindo dados para um escravo)
mestre e o escravo está no modo de recepção escravo.
• Modo de recepção principal
(o mestre está recebendo dados de um escravo)
Se o mestre pretende ler do escravo, ele recebe
repetidamente um byte de dados do escravo e
• Modo de transmissão escravo
responde a cada byte com um bit ACK. Neste
(o escravo está transmitindo dados para um mestre)
exemplo, o dispositivo master está no modo Master
• Modo de recepção escravo
Receive e o escravo no modo Slave Transmit.
(o escravo está recebendo dados do mestre)
No último byte de dados comunicados, o dispositivo mestre pode
Para iniciar a comunicação, um dispositivo mestre inicia no encerrar a transmissão enviando um bit de parada. Se o
modo de transmissão mestre. O dispositivo mestre envia um dispositivo mestre estiver em Receeu tenho modo, ele envia o bit
bit de início seguido do byte de endereço do escravo com o de parada no lugar do último bit ACK. Um bit de parada é
qual pretende se comunicar. Isso é seguido por um único bit indicado por uma transição de baixo para alto da linha SDAx
de leitura / gravação, que determina se o mestre pretende enquanto a linha SCLx é mantida alta.
transmitir ou receber dados do dispositivo escravo.
Em alguns casos, o mestre pode querer manter o controle do
barramento e reiniciar outra transmissão. Nesse caso, o
Se o escravo solicitado existir no barramento, ele irá reiniciar dispositivo mestre podeseencontre outro bit de início no lugar do
pond com um bit de reconhecimento, também conhecido bit de parada ou último bit ACK quando estiver no modo de
como ACK. O mestre continua no modo de transmissão ou recepção.
no modo de recepção e o escravo continua no complemento,
O eu2O barramento C especifica três protocolos de mensagem;
no modo de recepção ou no modo de transmissão,
respectivamente. • Mensagem única em que um mestre grava dados em um
escravo.
Um bit de início é indicado por uma transição de alto para baixo
da linha SDAx enquanto a linha SCLx é mantida alta. O endereço • Mensagem única onde um mestre lê dados de um
e os bytes de dados são enviados, primeiro o bit mais escravo.
significativo (MSb). O bit Read / Write é enviado como lógico • Mensagem combinada em que um mestre inicia um mínimo de
quando o mestre pretende ler dados do escravo, e é enviado duas gravações, ou duas leituras, ou uma combinação de
como um zero lógico quando se pretende escrever dados no gravações e leituras, para um ou mais escravos.
escravo.

DS41412B-page 218 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
Quando um dispositivo está transmitindo um lógico, ou deixando 15.3.2 ARBITRAGEM
a linha flutuar, e um segundo dispositivo está transmitindo um
Cada dispositivo mestre deve monitorar o barramento para bits de partida e
zero lógico, ou mantendo a linha baixa, o primeiro dispositivo
parada. Se o dispositivo detectar que o barramento está ocupado, ele não
pode detectar que a linha não é lógica. Essa detecção, quando
poderá iniciar uma nova mensagem até que o barramento retorne ao
usada na linha SCLx, é chamada de alongamento do relógio. O
estado Ocioso.
alongamento do relógio fornece aos dispositivos escravos um
mecanismo para controlar o fluxo de dados. Quando essa No entanto, dois dispositivos mestres podem tentar
detecção é usada na linha SDAx, é chamada de arbitragem. A iniciar uma transmissão ou quase ao mesmo tempo.
arbitragem garante que haja apenas um dispositivo mestre se Quando isso ocorre, o processo de arbitragem é iniciado.
comunicando por vez. Cada transmissor verifica o nível da linha de dados SDAx
e o compara ao nível que espera encontrar. O primeiro
15.3.1 ALONGAMENTO DO RELÓGIO transmissor a observar que os dois níveis não combinam,
perde a arbitragem e deve parar de transmitir na linha
Quando um dispositivo escravo não concluiu o
SDAx.
processamento de dados, ele pode atrasar a transferência de
mais dados por meio do processo de alongamento do Por exemplo, se um transmissor mantém a linha SDAx
relógio. Um dispositivo escravo endereçado pode manter a em uma lógica (permite que flutue) e um segundo
linha do relógio SCLx baixa após receber ou enviar um bit, transmissor mantém em um zero lógico (puxa para
indicando que ainda não está pronto para continuar. O baixo), o resultado é que a linha SDAx será baixa. O
mestre que está se comunicando com o escravo tentará primeiro transmissor então observa que o nível da linha
aumentar a linha SCLx para transferir o próximo bit, mas é diferente do esperado e conclui que outro transmissor
detectará que a linha do clock ainda não foi liberada. Como a está se comunicando.
conexão SCLx é aberta, o escravo tem a capacidade de O primeiro transmissor a perceber essa diferença é aquele
manter essa linha baixa até que esteja pronto para continuar que perde a arbitragem e deve parar de conduzir a linha
a se comunicar. SDAx. Se este transmissor também for um dispositivo
O alongamento do relógio permite que os receptores que não conseguem mestre, ele também deve parar de conduzir a linha SCLx. Em
acompanhar um transmissor controlem o fluxo de dados recebidos. seguida, ele pode monitorar as linhas para uma condição de
parada antes de tentar reemitir sua transmissão. Nesse
ínterim, o outro dispositivo que não notou nenhuma
diferença entre os níveis esperados e reais na linha SDAx
continua com sua transmissão original. Ele pode fazer isso
sem complicações, porque até o momento, a transmissão
aparece exatamente como o esperado, sem nenhum outro
transmissor atrapalhando a mensagem.

O modo de transmissão escravo também pode ser arbitrado,


quando um mestre endereça vários escravos, mas isso é menos
comum.

Se dois dispositivos mestres estão enviando uma mensagem


para dois dispositivos escravos diferentes no estágio de
endereço, o mestre que envia o endereço escravo inferior
sempre ganha a arbitragem. Quando dois dispositivos mestres
enviam mensagens para o mesmo endereço de escravo, e os
endereços às vezes podem se referir a vários escravos, o
processo de arbitragem deve continuar no estágio de dados.

A arbitragem geralmente ocorre muito raramente, mas é um


processo necessário para o suporte multi-master adequado.

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 219


PIC18 (L) F2X / 4XK22
15,4 eu2OPERAÇÃO DO MODO C TABELA 15-2: eu2TERMOS DO C ™ BUS

PRAZO Descrição
Todos MSSPx I2A comunicação C é orientada por bytes e
deslocada primeiro para o MSb. Seis registros SFR e 2 Transmissor O dispositivo que transfere os dados
sinalizadores de interrupção fazem a interface do módulo com o para o ônibus.
PIC® microcontrolador e software do usuário. Dois pinos, SDAx e Receptor O dispositivo que transfere os
SCLx, são exercidos pelo módulo para se comunicarem com dados do ônibus.
outros I externos2Dispositivos C. Mestre O dispositivo que inicia uma
transferência, gera sinais de relógio e
15.4.1 FORMATO BYTE
encerra uma transferência.
Toda comunicação em I2C é feito em segmentos de 9 bits. Escravo O dispositivo endereçado pelo
Um byte é enviado de um mestre para um escravo ou vice- mestre.
versa, seguido por um bit de reconhecimento enviado de
Multi-master Um barramento com mais de um dispositivo
volta. Após a oitava borda descendente da linha SCLx, o
que pode iniciar transferências de dados.
dispositivo de saída de dados no SDAx muda esse pino para
Arbitragem Procedimento para garantir que apenas um
uma entrada e lê um valor de reconhecimento no próximo
mestre por vez controle o barramento. A
pulso de clock.
arbitragem vencedora garante que a
O sinal do relógio, SCLx, é fornecido pelo mestre. Os dados mensagem não seja corrompida.
são válidos para alteração enquanto o sinal SCLx está baixo e
Sincronização Procedimento para sincronizar os relógios
são amostrados na transição positiva do relógio. Mudanças
de dois ou mais dispositivos no
na linha SDAx enquanto a linha SCLx está alta definem
barramento.
condições especiais no barramento, explicadas a seguir.
Ocioso Nenhum mestre está controlando o
15.4.2 DEFINIÇÃO DE I2C TERMINOLOGIA barramento e as linhas SDAx e SCLx
estão altas.
Há linguagem e terminologia na descrição de I2
Ativo Sempre que um ou mais dispositivos
Comunicação C que tem definições específicas para I2
mestre estão controlando o barramento.
C. O uso dessa palavra é definido abaixo e pode ser
Endereçado Dispositivo escravo que recebeu um
usado no restante deste documento sem explicação.
Escravo endereço correspondente e está sendo
Esta tabela foi adaptada do Phillips I2Especificação C.
cronometrado ativamente por um mestre.

Coincidindo Byte de endereço que é sincronizado em


15.4.3 PINS SDAx E SCLx Endereço um escravo que corresponde ao valor
armazenado em SSPxADD.
Seleção de qualquer I2O modo C com o conjunto de bits
SSPxEN força os pinos SCLx e SDAx a serem drenos abertos. Pedido de Escrita O escravo recebe um endereço compatível

Esses pinos devem ser definidos pelo usuário para entradas, com o bit R / W limpo e está pronto para

definindo os bits TRIS apropriados. registrar os dados.

Solicitação de leitura Master envia um byte de endereço com o


Observação: Os dados são vinculados à saída zero quando um I2Modo C
conjunto de bits R / W, indicando que deseja
está ativado.
sincronizar os dados do Slave. Esses dados
são os próximos bytes e todos os bytes
15.4.4 SDAx HOLD TIME
seguintes até uma Reinicialização ou Parada.
O tempo de espera do pino SDAx é selecionado pelo bit SDAHT
do registro SSPxCON3. O tempo de espera é o tempo que o SDAx Alongamento do relógio Quando um dispositivo no barramento mantém o
é mantido válido após a borda descendente de SCLx. Definir o bit SCLx baixo para interromper a comunicação.
SDAHT seleciona um tempo de espera mínimo mais longo de 300
Colisão de ônibus Sempre que a linha SDAx é amostrada
ns e pode ajudar em barramentos com grande capacitância.
baixa pelo módulo enquanto está
produzindo e espera um estado alto.

DS41412B-page 220 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
15.4.5 CONDIÇÃO DE INÍCIO 15.4.7 CONDIÇÃO DE REINICIALIZAÇÃO

O eu2A especificação C define uma condição inicial como uma Uma reinicialização é válida a qualquer momento em que uma parada
transição de SDAx de um estado alto para baixo enquanto a linha seja válida. Um mestre pode emitir uma reinicialização se desejar
SCLx é alta. Uma condição de início é sempre gerada pelo mestre manter o barramento após encerrar a transferência atual. Um Restart
e significa a transição do barramento de um estado inativo para tem o mesmo efeito no escravo que um Start teria, redefinindo toda a
um estado ativo. A Figura 15-10 mostra as formas de onda para lógica do escravo e preparando-o para cronometrar em um endereço.
as condições de Início e Parada. O mestre pode querer endereçar o mesmo ou outro escravo.

Uma colisão de barramento pode ocorrer em uma condição inicial se o


módulo amostrar a linha SDAx baixa antes de declarar baixa. Isso não No modo Slave de endereçamento de 10 bits, é necessário reiniciar
está de acordo com o eu2Especificação C que afirma que nenhuma para que o mestre registre o clock dos dados do escravo endereçado.
colisão de barramento pode ocorrer em uma partida. Depois que um escravo foi totalmente endereçado, combinando os
bytes de endereço alto e baixo, o mestre pode emitir um Restart e o
15.4.6 CONDIÇÃO DE PARADA
byte de endereço alto com o conjunto de bits R / W. A lógica do

Uma condição de parada é uma transição da linha SDAx de um estado escravo manterá o relógio e se preparará para registrar a saída dos

baixo para alto enquanto a linha SCLx está alta. dados.

Após uma correspondência completa com R / W limpo no modo de 10 bits,


Observação: Pelo menos um tempo baixo de SCLx deve aparecer
um sinalizador de correspondência anterior é definido e mantidod. Até uma
antes que uma parada seja válida, portanto, se a linha
condição de parada, um endereço alto com R / W limpo ou correspondência
SDAx ficar baixa e depois alta novamente enquanto a
de endereço alto falha.
linha SCLx permanece alta, apenas a condição de início é
detectada. 15.4.8 START / STOP CONDITION INTERRUPT
MASKING

Os bits SCIE e PCIE do registro SSPxCON3 podem


permitir a geração de uma interrupção nos modos Slave
que normalmente não suportam esta função. Modos
escravos nos quais a interrupção na detecção de início e
parada já estão ativadas, esses bits não terão efeito.

FIGURA 15-12: eu2CONDIÇÕES DE INÍCIO E DE PARADA C ™

SDAx

SCLx
S P
Mudança de Mudança de
Dados permitidos Dados permitidos
Começar Pare
Doença Doença

FIGURA 15-13: eu2CONDIÇÃO DE REINICIALIZAÇÃO C ™

Sr
Mudança de
Mudança de
Dados permitidos
Dados permitidos
Reiniciar

Doença

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 221


PIC18 (L) F2X / 4XK22
15.4.9 SEQUÊNCIA DE RECONHECIMENTO 15,5 eu2C OPERAÇÃO DO MODO ESCRAVO

O nono pulso SCLx para qualquer byte transferido em I2C O modo MSSPx Slave opera em um dos quatro modos
é dedicado como um reconhecimento. Ele permite que selecionados nos bits SSPxM do registro SSPxCON1. Os modos
os dispositivos receptores respondam ao transmissor podem ser divididos em modo de endereçamento de 7 e 10 bits.
puxando a linha SDAx para baixo. O transmissor deve Os modos de endereçamento de 10 bits operam da mesma
liberar o controle da linha duranteissoÉ hora de mudar forma que os de 7 bits, com alguma sobrecarga adicional para
na resposta. O reconhecimento (ACK) é um sinal ativo lidar com os endereços maiores.
baixo, puxando a linha SDAx baixa indicada ao
Os modos com interrupções de bit Start e Stop operaram da
transmissor que o dispositivo recebeu os dados
mesma forma que os outros modos com SSPxIF adicionalmente
transmitidos e está pronto para receber mais.
definido após a detecção de uma condição de Start, Restart ou
O resultado de um ACK é colocado no bit ACKSTAT do Stop.
registro SSPxCON2.
15.5.1 ENDEREÇOS DO MODO ESCRAVO
Software escravo, quando o AHEN e os bits DHEN são
definidos, permitem que o usuário defina o valor ACK O registro SSPxADD (Registro 15-6) contém o endereço
enviado de volta ao transmissor. O bit ACKDT do registro do modo Slave. O primeiro byte recebido após uma
SSPxCON2 é definido / limpo para determinar a resposta. condição de Start ou Restart é comparado com o valor
O hardware escravo irá gerar uma resposta ACK se os armazenado neste registro. Se o byte corresponder, o
bits AHEN e DHEN do registro SSPxCON3 estiverem valor será carregado no registro SSPxBUF e uma
limpos. interrupção será gerada. Se o valor não corresponder, o
módulo fica inativo e nenhuma indicação é fornecida ao
Existem certas condições em que um ACK não será
software de que algo aconteceu.
enviado pelo escravo. Se o bit BF do registro SSPxSTAT
ou o bit SSPxOV do registro SSPxCON1 forem definidos O registro SSPx Mask (Registro 15-5) afeta o processo de
quando um byte for recebido. correspondência de endereços. VerSeção 15.5.9 “Registro
de máscara SSPx” Para maiores informações.
Quando o módulo é endereçado, após a 8ª borda
descendente de SCLx no barramento, o bit ACKTIM do 15.5.1.1 I2Modo de endereçamento C Slave de 7 bits
registro SSPxCON3 é definido. O bit ACKTIM indica o
tempo de reconhecimento do barramento ativo. No modo de endereçamento de 7 bits, o LSb do byte de dados
recebido é ignorado ao determinar se há uma correspondência de
O bit de status ACKTIM só está ativo quando o bit AHEN
endereço.
ou DHEN está habilitado.
15.5.1.2 I2Modo de endereçamento C Slave de 10 bits

No modo de endereçamento de 10 bits, o primeiro byte


recebido é comparado ao valor binário de '1 1 1 1 0 A9 A8
0'. A9 e A8 são os dois MSb do endereço de 10 bits e
armazenados nos bits 2 e 1 do registro SSPxADD.
Após o reconhecimento do byte alto, o bit UA é definido e SCLx é
mantido baixo até que o usuário atualize SSPxADD com o
endereço baixo. O byte de endereço baixo é sincronizado e todos
os 8 bits são comparados ao valor de endereço baixo em
SSPxADD. Mesmo se não houver uma correspondência de
endereço; SSPxIF e UA são definidos e SCLx é mantido baixo até
que SSPxADD seja atualizado para receber um byte alto
novamente. Quando SSPxADD é atualizado, o bit UA é apagado.
Isso garante que o módulo esteja pronto para receber o byte de
endereço alto na próxima comunicação.

Uma correspondência de endereço alto e baixo como uma


solicitação de gravação é necessária no início de todas as
comunicações de endereçamento de 10 bits. Uma transmissão
pode ser iniciada emitindo um Restart assim que o escravo for
anunciadodressed, e sincronizando no endereço alto com o bit
R / W definido. O hardware escravo reconhecerá a solicitação de
leitura e se preparará para registrar a saída dos dados. Isso só é
válido para um escravo depois que ele recebeu uma
correspondência de byte de endereço alto e baixo completa.

DS41412B-page 222 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
15.5.2 RECEPÇÃO DE ESCRAVO 15.5.2.2 Recepção de 7 bits com AHEN e DHEN

Quando o R / W bisto de um byte de endereço A recepção do dispositivo escravo com AHEN e DHEN
recebido correspondente é limpo, o bit R / W do configurados opera da mesma forma que sem essas opções, com
registro SSPxSTAT é limpo. O endereço recebido é interrupções extras e alongamento de clock adicionado após a
carregado no registro SSPxBUF e confirmado. oitava borda descendente de SCLx. Essas interrupções adicionais
allow o software escravo para decidir se deseja ACK o endereço
Quando a condição de estouro existe para um endereço
de recebimento ou byte de dados, em vez do hardware. Esta
recebido, então not Acknowledge é fornecido. Uma
funcionalidade adiciona suporte para PMBus ™ que não estava
condição de estouro é definida quando o bit BF do
presente nas versões anteriores deste módulo.
registro SSPxSTAT é definido ou o bit SSPxOV do registro
SSPxCON1 é definido. O bit BOEN do registro SSPxCON3 Esta lista descreve as etapas que devem ser realizadas
modifica esta operação. Para obter mais informações, pelo software escravo para usar essas opções para I2
consulte o Registro 15-4. Comunicação C. A Figura 15-15 exibe um módulo usando
Uma interrupção MSSPx é gerada para cada byte de dados
endereço e armazenamento de dados. A Figura 15-16
transferido. O bit da bandeira, SSPxIF, deve ser limpo pelo
inclui a operação com o bit SEN do conjunto de registros
software.
SSPxCON2.
1. S bit de SSPxSTAT é definido; SSPxIF é definido se a
Quando o bit SEN do registro SSPxCON2 é definido,
interrupção na detecção de início forehabilitado.
SCLx será mantido baixo (extensão do clock) após
cada byte recebido. O relógio deve ser liberado 2. O endereço de correspondência com o bit R / W limpo é
configurando o bit CKP do registro SSPxCON1, exceto sincronizado. SSPxIF é definido e CKP limpo após a 8ª
às vezes no modo de 10 bits. VerSeção 15.2.3 "Modo borda descendente de SCLx.
Mestre SPI" para mais detalhes. 3. Slave limpa o SSPxIF.
4. O escravo pode olhar para o bit ACKTIM do
15.5.2.1 Recepção de endereçamento de 7 bits
registro SSPxCON3 para dissuadirmeu se o
Esta seção descreve uma sequência padrão de eventos para SSPxIF foi depois ou antes do ACK.
o módulo MSSPx configurado como um I2Escravo C no modo 5. O escravo lê o valor do endereço de SSPxBUF,
de endereçamento de 7 bits. Todas as decisões tomadas por limpando o BF bandeira.
hardware ou software e seus efeitos na recepção. A Figura 6. O escravo define o valor ACK com clock de saída para o
15-13 e a Figura 15-14 são usadas como referência visual mestre, definindo ACKDT.
para esta descrição.
7. O Slave libera o relógio ajustando o CKP.
Este é um processo passo a passo do que normalmente 8. SSPxIF é definido após um ACK, não após um NACK.
deve ser feito para cumprir2Comunicação C.
9. Se SEN = 1 a eslavoO hardware esticará o relógio
1. Bit de início detectado. após o ACK.
2. S bit de SSPxSTAT é definido; SSPxIF é definido se a interrupção 10. Slave limpa SSPxIF.
na detecção de início estiver habilitada.
Observação: SSPxIF ainda é definido após a 9ª borda descendente de
3. O endereço de correspondência com R / W bit clear é gravandoeived. SCLx mesmo se não houver esticão do relógio e BF tiver
4. O escravo puxa SDAx baixo enviando um ACK para o sido apagado. Somente se o NACK for enviado ao
mestre e define o bit SSPxIF. mestre, o SSPxIF não será definido.
5. O software limpa o bit SSPxIF. 11. SSPxIF definido e CKP limpo após a 8ª borda descendente
6. O software lê o endereço recebido de de SCLx para um byte de dados recebido.
SSPxBUF apagando o sinalizador BF. 12. O Slave examina o bit ACKTIM de SSPxCON3 para
7. Se SEN = 1; O software escravo define o bit CKP para determinar a fonte da interrupção.
liberar a linha SCLx. 13. O escravo lê os dados recebidos de SSPxBUF
8. O mestre registra um byte de dados. que limpa BF.
9. O escravo torna o SDAx baixo enviando um ACK para o 14. As etapas 7 a 14 são iguais para cada byte de dados
mestre e define o bit SSPxIF. recebido.
10. O software limpa SSPxIF. 15. Communicatíon é encerrado por qualquer um dos escravos
11. O software lê o byte recebido de SSPxBUF que enviando um ACK = 1, ou o mestre enviando uma condição de
limpa BF. parada. Se uma parada for enviada e a detecção de
interrupção na parada estiver desabilitada, o escravo só
12. Os passos 8-12 são repetidos para todos os bytes
saberá por polling do bit P do registro SSTSTAT.
recebidos do mestre.
13. O mestre envia a condição de parada, configurando o bit P de
SSPxSTAT, e o barramento fica ocioso.

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 223


FIGURA 15-14:

DS41412B-page 224
Bus Master envia
Condição de parada

De escravo para mestre

Endereço de Recebimento Recebendo dados Recebendo dados ACK = 1


SDAx
A7 A6 A5 A4 A3 A2 A1 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0

SCLx
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
PIC18 (L) F2X / 4XK22

S P

SSPxIF
SSPxIF definido no dia 9

Preliminares
Apagado por software Apagado por software borda de queda de
SCLx
BF
Primeiro byte
SSPxBUF é lido de dados é
acessível
em SSPxBUF
SSPxOV

SSPxOV definido porque


SSPxBUF ainda está cheio.

ACK não é enviado.


eu2C ESCRAVO, ENDEREÇO DE 7 BIT, RECEPÇÃO (SEN = 0, AHEN = 0, DHEN = 0)

- 2010 Microchip Technology Inc.


FIGURA 15-15:

Bus Master envia


Condição de parada

Endereço de recebimento Receber dados Receber dados

- 2010 Microchip Technology Inc.


ACK
SDAx A7 A6 A5 A4 A3 A2 A1 R / W =0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0

SCLx S 1 2 3 4 5 6 7 8 9 SEN 1 2 3 4 5 6 7 8 9 SEN 1 2 3 4 5 6 7 8 9 P

O relógio é mantido baixo até que CKP seja definido como '1 '

SSPxIF

SSPxIF definido no dia 9


Apagado por software Apagado por software borda descendente de SCLx

Preliminares
BF
Primeiro byte
de dados é
SSPxBUF é lido acessível
em SSPxBUF
SSPxOV

SSPxOV definido porque


SSPxBUF ainda está cheio.

ACK não é enviado.


CKP

SCLx não é realizado


CKP é escrito para '1 ' em CKP é escrito em 1 no software,
baixo Porque
software, lançando SCLx liberando SCLx
ACK = 1
eu2C ESCRAVO, ENDEREÇO DE 7 BIT, RECEPÇÃO (SEN = 1, AHEN = 0, DHEN = 0)
PIC18 (L) F2X / 4XK22

DS41412B-page 225
Mestre Releases SDAx Mestre envia
para escravo para a sequência ACK Condição de parada
FIGURA 15-16:

DS41412B-page 226
Endereço de Recebimento Recebendo dados ACK Dados recebidos
SDAx ACK =1
A7 A6 A5 A4 A3 A2 A1 ACK D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0

SCLx
S 12 3 4 5 6 7 8 9 1 2 3 4 5 67 8 9 1 2 3 4 5 6 7 8 9 P

SSPxIF
Se AHEN = 1: SSPxIF é definido no
SSPxIF está definido dia 9 de quedage do Apagado por software Sem interrupt

SCLx, após ACK depois de não ACK


BF de Slave

O endereço é
PIC18 (L) F2X / 4XK22

ler de Os dados são lidos de SSPxBUF


ACKDT SSBUF

Software escravo
limpa ACKDT para Software escravo
conjuntos ACKDT para
ACK o recebido
CKP byte não ACK

Preliminares
Quando AHEN =1:
Quando DHEN =1:
CKP é limpo por hardware e CKP definido por
CKP é limpo por hardware
SCLx é esticado software, SCLx é lançado
na 8ª borda descendente
de SCLx
ACKTIM

ACKTIM definido por hardware na 8ª ACKTIM apagado por


ACKTIM definido por hardware
borda descendente de SCLx hardware na 9ª na 8ª borda descendente de SCLx
borda ascendente de SCLx

P
eu2C ESCRAVO, ENDEREÇO DE 7 BIT, RECEPÇÃO (SEN = 0, AHEN = 1, DHEN = 1)

- 2010 Microchip Technology Inc.


Mestre envia
FIGURA 15-17:

Condição de parada
Versões principais
R/W=0 SDAx para escravo para sequência ACK

Receeuving de AnúnciosdréWL Receeuve Dnouma Receeuve Dnouma ACK


SDAx ACK
A7 A6 A5 A4 A3 A2 A1 D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0

- 2010 Microchip Technology Inc.


SCLx
12345678 9 12345678 9 12345678 9 P
S

SSPxIF
Não emterrupt depois
Apagado por software
se não ACK
de Slave
BF
Recebido
endereço é carregado em Os dados recebidos são SSPxBUF pode ser
SSPxBUF disponível em SSPxBUF leia a qualquer momento antes
do próximo byte ser carregado
ACKDT

Slave softwestão limpa

Preliminares
Slave envia
ACKDT para ACK
não ACK
o byte recebido
CKP
Quando AHEN = 1; CKP é nãot desmarcado se
Quando DHEN = 1;
na 8ª borda descendente Definido por software, não for ACK
na 8ª borda descendente de
de SCLx de um byte de SCLx de um byte de dados liberar SCLx
endereço, o CKP é limpo recebido, CKP é apagado

ACKTIM

ACKTIM é definido por hardware na ACKTIM é limpo por hardware na


8ª borda descendente de SCLx 9ª borda ascendente de SCLx

P
eu2C ESCRAVO, ENDEREÇO DE 7 BIT, RECEPÇÃO (SEN = 1, AHEN = 1, DHEN = 1)
PIC18 (L) F2X / 4XK22

DS41412B-page 227
PIC18 (L) F2X / 4XK22
15.5.3 TRANSMISSÃO ESCRAVO 15.5.3.2 Transmissão de 7 bits
Quando o bit R / W do endereço de entradaWL byte é Um dispositivo mestre pode transmitir uma solicitação de leitura
definido e ocorre uma correspondência de endereço, o bit a um escravo e, em seguida, registrar os dados do escravo. A lista
R / W do registro SSPxSTAT é definido. O recebidode abaixo descreve o que o software de um escravo precisará fazer
Anúnciosvestido é carregado no registro SSPxBUF e um para realizar uma transmissão padrão. A Figura 15-17 pode ser
pulso ACK é enviado pelo escravo no nono bit. usada como referência a esta lista.

Após o ACK, o hardware escravo limpa o bit CKP e o pino 1. O Mestre envia uma condição de início no SDAx e
SCLx é mantido baixo (consulte Seção 15.5.6 “Alongamento SCLx.
do relógio” para mais detalhes). Esticando o relógio, o 2. S bit de SSPxSTAT é definido; SSPxIF é definido se a interrupção
mestre será incapaz de declarar outro pulso de clock até que na detecção de início for enabconduziu.
o escravo termine de preparar os dados de transmissão.
3. O endereço correspondente com o conjunto de bits R / W é recebido pelo bit

SSPxIF de configuração do escravo.


Os dados de transmissão devem ser carregados no 4. O hardware escravo gera um ACK e define SSPxIF.
registro SSPxBUF, que também carrega o registro
SSPxSR. Em seguida, o pino SCLx deve ser liberado
5. O bit SSPxIF é limpo pelo usuário.
configurando o bit CKP do registro SSPxCON1. Os oito
6. O software lê o endereço recebido do SSPxBUF,
bits de dados são deslocados na borda descendente da
limpando BF.
entrada SCLx. Isso garante que o sinal SDAx seja válido
durante o horário SCLx. 7. R / W é definido de forma que o CKP seja apagado
automaticamente após o ACK.
O pulso ACK do receptor mestre está travado sobre
8. O software escravo carrega os dados de transmissão
a borda ascendente do nono pulso de entrada SCLx. Este
em SSPxBUF.
valor ACK é copiado para o bit ACKSTAT do registro
SSPxCON2. Se ACKSTAT estiver definido (não ACK), a 9. O bit CKP é definido liberando SCLx, permitindo que o

transferência de dados está concluída. Neste caso, quando o mestre sincronize os dados fora do escravo.
não ACK é travado pelo escravo, o escravo fica inativo e 10. SSPxIF é definido após a resposta ACK do
espera por outroer ocorrência do bit de início. Se a linha mestre ser carregada no registro ACKSTAT.
SDAx estava baixa (ACK), os próximos dados de transmissão 11. O bit SSPxIF é limpo.
devem ser carregados no registro SSPxBUF. Novamente, o 12. O software escravo verifica o bit ACKSTAT para
pino SCLx deve ser liberado configurando o bit CKP. ver se o mestre deseja registrar mais dados.
Uma interrupção MSSPx é gerada para cada byte de Nota 1: Se o mestre ACKs o relógio será
transferência de dados. O bit SSPxIF deve ser limpo pelo esticado.
software e o registro SSPxSTAT é usado para determinar o
status do byte. O bit SSPxIF é definido na borda descendente
2: ACKSTAT é o único bit atualizado no
do nono pulso de clock.
borda ascendente de SCLx (9º) em vez de
queda.
15.5.3.1 Colisão de barramento no modo escravo 13. As etapas 9-13 são repetidas para cada byte
transmitido.
Um escravo recebe uma solicitação de leitura e começa a transferir
dados na linha SDAx. Se uma colisão de barramento for detectada e o 14. Se o mestre enviar um não ACK; o relógio não é retido,
bit SBCDE do registro SSPxCON3 for definido, o bit BCLxIF do registro mas SSPxIF ainda está definido.
PIRx será definido. Uma vez que uma colisão de barramento é 15. O mestre envia uma condição de Reinício ou Parada.
detectada, o escravo fica inativo e espera ser endereçado novamente. 16. O escravo não é mais endereçado.
O software do usuário pode usar o bit BCLxIF para lidar com uma
colisão de barramento escravo.

DS41412B-page 228 Preliminares - 2010 Microchip Technology Inc.


Mestre envia
Condição de parada
FIGURA 15-18:

Endereço de Recebimento Automático Transmitindo Dados Automático Transmitindo Dados ACK


R /W = 1
SDAx A7 A6 A5 A4 A3 A2 A1 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0

SCLx
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9

- 2010 Microchip Technology Inc.


S P

SSPxIF

Apagado por software

BF
BF é automaticamente
Endereço recebido Os dados a serem transmitidos são apagado após a 8ª borda
é lido de SSPxBUF carregados em SSPxBUF descendente de SCLx

CKP
Quando R / W é definido CKP não é
hcampo por não
SCLx é sempre
mantida baixa após a 9ª borda Definido por software ACK
descendente de SCLx

Preliminares
ACKSTAT

Masters não ACK


é copiado para
ACKSTAT
R/W

R / W é copiado do byte de
endereço correspondente

D/A
eu2C ESCRAVO, ENDEREÇO DE 7 BIT, TRANSMISSÃO (AHEN = 0)

Indica um endereço
foi recebido

P
PIC18 (L) F2X / 4XK22

DS41412B-page 229
PIC18 (L) F2X / 4XK22
15.5.3.3 Transmissão de 7 bits com retenção de
endereço habilitada

Definir o bit AHEN do registro SSPxCON3 permite


alongamento de clock adicional e geração de interrupção
após a oitava borda descendente de um endereço
correspondente recebido. Uma vez que um endereço
correspondente foi registrado, o CKP é limpo e a
interrupção SSPxIF é definida.
A Figura 15-18 exibe uma forma de onda padrão de uma
transmissão de endereço escravo de 7 bits com AHEN habilitado.

1. O ônibus começa ocioso.

2. Mestre envia condição de início; o bit S de SSPxSTAT é


definido; SSPxIF é definido se a interrupção na detecção
de início estiver habilitada.
3. O mestre envia o endereço correspondente com
conjunto de bits R / W. Após a oitava borda
descendente da linha SCLx, o bit CKP é limpo e a
interrupção SSPxIF é gerada.
4. O software escravo limpa o SSPxIF.
5. Software escravoumads ACKTeuM bit do registro
SSPxCON3 e R / W e D / A do registro SSPxSTAT
para determinar a fonte da interrupção.
6. O Slave lê o valor do endereço do registro
SSPxBUF apagando o bit BF.
7. Softw escravoestão decide param esta
informação se deseja ACK ou não ACK e define
o bit ACKDT do registro SSPxCON2 de acordo.
8. Slave define o bit CKP liberando SCLx.
9. O mestre clica no valor ACK do escravo.
10. Automática de hardware escravolly limpa o CKP bit e
define SSPxIF após o ACK se o bit R / W estiver
definido.
11. O software Slave limpa o SSPxIF.
12. O escravo carrega o valor para transmitir ao mestre
em SSPxBUF definindo o bit BF.

Observação: SSPxBUF não pode ser carregado antes do


ACK.
13. Slave define o bit CKP liberando o relógio.
14. Mestre clocks os dados do escravo e envia um
valor ACK no 9º Pulso SCLx.
15. O hardware escravo copia o valor ACK no bit
ACKSTAT do registro SSPxCON2.
16. As etapas 10-15 são repetidas para cada byte
transmitido ao mestre de tele escravo.
17. Se o mestre enviar um não ACK, o escravo libera o
barramento, permitindo que o mestre envie uma
parada e encerre a comunicação.
Observação: O mestre deve enviar um não ACK no último byte
para garantir que o escravo libere a linha SCLx para
receber uma parada.

DS41412B-page 230 Preliminares - 2010 Microchip Technology Inc.


Mestre envia
Mestre releases SDAx Condição de parada
FIGURA 15-19:

para escravo para a sequência ACK

Endereço de Recebimento R/W=1 Automático Transmitindo Dados Automático Transmitindo Dados ACK
SDAx ACK
A7 A6 A5 A4 A3 A2 A1 D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0

SCLx

- 2010 Microchip Technology Inc.


S 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
P

SSPxIF
Apagado por software

BF BF é automaticamente
Endereço recebido Os dados a serem transmitidos são apagado após a 8ª borda
é lido de SSPxBUF carregados em SSPxBUF descendente de SCLx

ACKDT

Slave limpa
ACKDT para ACK
Morada

Preliminares
ACKSTAT
ACK do Mestre
resposta é copiada
para SSPxSTAT

CKP
Quando AHEN = 1; CKP não apagado
CKP é limpo por hardware Quando R / W = 1; Definido por software, depois de não ACK
depois de receber o endereço CKP é sempre lança SCLx
correspondente. apagado após ACK
eu2C ESCRAVO, ENDEREÇO DE 7 BIT, TRANSMISSÃO (AHEN = 1)

ACKTIM
ACKTIM é definido na 8ª queda ACKTIM foi apagado
borda de SCLx na 9ª borda ascendente de SCLx

R/W

D/A
PIC18 (L) F2X / 4XK22

DS41412B-page 231
PIC18 (L) F2X / 4XK22
15.5.4 RECEPÇÃO DE ENDEREÇO DE 10 BITS 15.5.5 ENDEREÇO DE 10 BITS COM ENDEREÇO OU RETENÇÃO
MODO ESCRAVO DE DADOS

Esta seção descreve uma sequência padrão de eventos para o A recepção usando endereçamento de 10 bits com AHEN ou
módulo MSSPx configurado como um I2Escravo C no modo de DHEN definido é a mesma que com os modos de 7 bits. A única
endereçamento de 10 bits. diferença é a necessidade de atualizar o registro SSPxADD
usando o bit UA. Todas as funcionalidades, especificamente
Figura 15-19 e é usada como uma referência visual para esta
quando o bit CKP é limpo e a linha SCLx mantida baixa, são as
descrição.
mesmas. A Figura 15-20 pode ser usada como uma referência de
Este é um processo passo a passo do que deve ser feito pelo um escravo no endereçamento de 10 bits com AHEN definido.
software escravo para realizar I2Comunicação C.
A Figura 15-21 mostra uma forma de onda padrão para um transmissor
1. O ônibus começa ocioso.
escravo no modo de endereçamento de 10 bits.
2. Mestre envia condição de início; S bit de SSPxSTAT está definido;
SSPxIF é definido se a interrupção na detecção de início estiver
habilitada.

3. O mestre envia o endereço alto correspondente com o bit


R / W limpo; O bit UA do registro SSPxSTAT está definido.
4. Slave envia ACK e SSPxIF é definido.
5. O software limpa o bit SSPxIF.
6. O software lê o endereço recebido de SSPxBUF
apagando o sinalizador BF.
7. O escravo carrega o endereço baixo em SSPxADD,
liberando SCLx.
8. O mestre envia o byte de baixo endereço correspondente ao escravo;
O bit UA está definido.

Observação: Atualizações para o SSPxDE ANÚNCIOSRegistro D não são


permitido até depois da sequência ACK.

9. O escravo envia ACK e SSPxIF é definido.


Observação: Se o endereço baixo não corresponder, SSPxIF
e UA ainda estão configurados para que o software
escravo possa configurar SSPxADD de volta para o
endereço alto. BF não está definido porque não há
correspondência. CKP não é afetado.

10. Slave limpa SSPxIF.


11. O escravo lê o endereço correspondente recebido
de SSPxBUF que limpa BF.
12. O escravo carrega o endereço alto em SSPxADD.
13. Anúncio de relógios mestreata byte para o escravo e
sincroniza os escravos ACK no 9º pulso SCLx; SSPxIF
está definido.
14. Se o bit SEN de SSPxCON2 for definido, o CKP será limpo
pelo hardware e o relógio será prolongado.
15. Slave limpa SSPxIF.
16. O escravo lê o byte recebido de SSPxBUF que
limpa BF.
17. Se o SEN for definido, o escravo configura o CKP para liberar o
SCLx.
18. As etapas 13-17 são repetidas para cada byte recebido.

19. O Mestre envia Parar para encerrar a transmissão.

DS41412B-page 232 Preliminares - 2010 Microchip Technology Inc.


FIGURA 15-20:

Mestre envia
Condição de parada

Receber segundo byte de endereço Receber dados Receber dados


Receber primeiro byte de endereço

- 2010 Microchip Technology Inc.


SDAx
1111 0 A9 A8 ACK A7 A6 A5 A4 A3 A2 A1 A0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK

SCLx
1 23456789 1 23456789 1 234 56789 1 23456789 P
S
SCLx é mantido baixo
enquanto CKP = 0

SSPxIF
Definido por hardware Apagado por software
na 9ª borda descendente

BF

Preliminares
Se o endereço corresponder O endereço de recebimento é Dados lidos
SSPxADD é carregado em
ler de SSPxBUF de SSPxBUF
SSPxBUF

UA
Quando UA = 1; O software atualiza
SCLx é mantido baixo SSPxADD e libera SCLx

CKP

Quando SEN = 1; Definido por software,

CKP é limpo após liberando SCLx


9ª borda descendente do byte recebido
eu2C SLAVE, ENDEREÇO DE 10 BIT, RECEPÇÃO (SEN = 1, AHEN = 0, DHEN = 0)
PIC18 (L) F2X / 4XK22

DS41412B-page 233
Receber primeiro byte de endereço Receber segundo byte de Receber dados Receber dados
R/W=0
FIGURA 15-21:

DS41412B-page 234
SDAx 1 1 1 1 0 A9 A8 ACK endereço A7 A6 A5 A4 A3 A2 A1 A0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5

SCLx S 1 2 3 4 5 6 7 8 9 UA 1 2 3 4 5 6 7 8 9 UA 1 2 3 4 5 6 7 8 9 1 2

SSPxIF

Definido por hardware Apagado por software Apagado por software


na 9ª borda descendente
PIC18 (L) F2X / 4XK22

BF

SSPxBUF pode ser


Dados recebidos
leia a qualquer hora antes
é lido de
o próximo byte recebido
SSPxBUF
ACKDT

Preliminares
Slave softwestão limpa
ACKDT para ACK
o byte recebido

UA

A atualização para SSPxADD Atualização de SSPxADD,


não é permitida até o dia 9
limpa UA e libera SCLx
borda descendente de SCLx

CKP Se quando AHEN = 1;


na 8ª borda descendente
Definir CKP com versões
de SCLx de um byte de de software SCLx
endereço, o CKP é limpo
ACKTIM

ACKTIM é definido por hardware na


eu2C SLAVE, ENDEREÇO DE 10 BIT, RECEPÇÃO (SEN = 0, AHEN = 1, DHEN = 0)

8ª borda descendente de SCLx

- 2010 Microchip Technology Inc.


FIGURA 15-22:

Mestre envia
Mestre envia Pare condição
Reiniciar evento Mestre envia
não ACK

- 2010 Microchip Technology Inc.


Endereço de recebimento R / W = 0 Recebendo segundo byte de endereço Receber primeiro byte de endereço Transmitindo Byte de Dados ACK = 1
SDAx 1 1 1 1 0 A9 A8 ACK A7 A6 A5 A4 A3 A2 A1 A0 ACK 1 1 1 1 0 A9 A8 ACK D7 D6 D5 D4 D3 D2 D1 D0

SCLx 123456789 123456789 123456789 123456789 P


S
Sr

SSPxIF

Definido por hardware Apagado por software Definido por hardware

BF

SSPxBUF carregado O endereço recebido é Os dados a serem transmitidos são

Preliminares
com endereço recebido ler de SSPxBUF carregados em SSPxBUF

UA
O endereço alto é carregado
UA indica SSPxADD Depois que SSPxADD é de volta no SSPxADD
deve ser atualizado atualizado, UA é limpo
CKP e SCLx é lançado

Quando R / W = 1; Definido por software

ACKSTAT CKP é limpo em lança SCLx


9ª borda descendente de SCLx

Masters não ACK


é copiado

R/W

R / W é copiado do byte de
endereço correspondente
D/A

Indica um endereço
foi recebido
eu2C SLAVE, ENDEREÇO DE 10 BIT, TRANSMISSÃO (SEN = 0, AHEN = 0, DHEN = 0)
PIC18 (L) F2X / 4XK22

DS41412B-page 235
PIC18 (L) F2X / 4XK22
15.5.6 ALONGAMENTO DO RELÓGIO 15.5.6.2 Modo de endereçamento de 10 bits

O alongamento do clock ocorre quando um dispositivo no barramento No modo de endereçamento de 10 bits, quando o bit UA é
mantém a linha SCLx baixa, pausando efetivamente a comunicação. O definido, o relógio está sempre esticado. Esta é a única vez que o
escravo pode esticar o relógio para permitir mais tempo para lidar SCLx é esticado sem que o CKP seja apagado. SCLx é liberado
com os dados ou preparar uma resposta para o dispositivo mestre. imediatamente após uma gravação em SSPxADD.
Um dispositivo mestre não se preocupa com o alongamento, pois
Observação: As versões anteriores do módulo não
sempre que estiver ativo no barramento e não estiver transferindo
estique o relógio se o segundo byte de endereço não
dados, ele estará se alongando. Qualquer alongamento feito por um
corresponder.
escravo é invisível para o software mestre e manipulado pelo
hardware que gera o SCLx. 15.5.6.3 Byte NACKing
O bit CKP do registro SSPxCON1 é usado para controlar o
Quando o bit AHEN de SSPxCON3 é definido; O CKP é limpo pelo
alongamento no software. Sempre que o bit CKP for
hardware após a oitava borda descendente de SCLx para um byte
apagado, o módulo aguardará até que a linha SCLx diminua
de endereço correspondente recebido. Quando o bit DHEN de
e, em seguida, o reterá. A configuração do CKP liberará o
SSPxCON3 é definido; O CKP é limpo após a oitava borda
SCLx e permitirá mais comunicação.
descendente de SCLx para os dados recebidos.
15.5.6.1 Alongamento do relógio normal O alongamento após a 8ª borda descendente de SCLx
permite que o escravo olhe para o endereço ou dados
Após um ACK se o bit R / W de SSPxSTAT estiver definido, uma
recebidos e decida se deseja ACK os dados recebidos.
solicitação de leitura, o hardware escravo limpará o CKP. Isso
permite que o escravo atualize o SSPxBUF com os dados a serem 15.5.7 SINCRONIZAÇÃO DO RELÓGIO E O
transferidos para o mestre. Se o bit SEN de SSPxCON2 estiver BIT CKP
definido, oeslavoO hardware sempre esticará o relógio após a
sequência ACK. Assim que o escravo estiver pronto; O CKP é Sempre que o bit CKP for apagado, o módulo aguardará
definido pelo software e a comunicação é retomada. até que a linha SCLx diminua e, em seguida, o reterá. No
entanto, limpar o bit CKP não ativará a saída SCLx baixa
Nota 1: O bit BF não tem efeito sobre se o até que a saída SCLx já tenha sido amostrada como
relógio será esticado ou não. Isso é baixa. Portanto, o bit CKP não ativará a linha SCLx até
diferente das versões anteriores do que um I externo2O dispositivo mestre C já afirmou a
módulo que não estenderiam o relógio, linha SCLx. A saída SCLx permanecerá baixa até que o bit
limpar CKP, se SSPxBUF fosse lido antes CKP seja definido e todos os outros dispositivos no I2O
da 9ª borda descendente de SCLx. barramento C lançou o SCLx. Isso garante que uma
2: As versões anteriores do módulo não gravação no bit CKP não viole o requisito de tempo
estique o relógio para uma transmissão se máximo mínimo para SCLx (consulte a Figura 15-22).
SSPxBUF foi carregado antes da 9ª borda
descendente de SCLx. Agora está sempre limpo
para solicitações de leitura.

FIGURA 15-23: TEMPO DE SINCRONIZAÇÃO DO RELÓGIO

Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q2 Q3 Q4 Q1 Q2 Q3 Q4

SDAx DX DX ‚- 1

SCLx

Dispositivo mestre
CKP afirma relógio

Dispositivo mestre
relogio de lançamentos

WR
SSPxCON1

DS41412B-page 236 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
15.5.8 SUPORTE GERAL DE ENDEREÇO DE CHAMADA No modo Endereço de 10 bits, o bit UA não será definido na
recepção do endereço de chamada geral. O escravo se
O procedimento de endereçamento para o I2O barramento C é
preparará para receber o segundo byte como dados, assim
tal que o primeiro byte após a condição de início geralmente
como faria no modo de 7 bits.
determina qual dispositivo será o escravo endereçado pelo
dispositivo mestre. A exceção é o endereço de chamada geral Se o bit AHEN do registro SSPxCON3 for definido, assim
que pode endereçar todos os dispositivos. Quando este endereço como com qualquer outra recepção de endereço, o
é usado, todos os dispositivos deveriam, em teoria, responder hardware escravo estenderá o relógio após a 8ª borda
com uma confirmação. descendente de SCLx. O escravo deve então definir seu
valor ACKDT e liberar o relógio com a comunicação
O endereço de chamada geral é um endereço reservado no I2
progredindo normalmente.
Protocolo C, definido como endereço 0x00. Quando o bit
GCEN do registro SSPxCON2 é definido, o módulo escravo
automaticamente ACK a recepção deste endereço
independente do valor armazenado em SSPxADD. After o
escravo clica em um endereço de todos os zeros com o bit
R / W limpo, uma interrupção é gerada e o software escravo
pode ler SSPxBUF e responder. A Figura 15-23 mostra uma
seqüência geral de recepção de chamadas.

FIGURA 15-24: SEQUÊNCIA DE ENDEREÇO DE CHAMADA GERAL DO MODO ESCRAVO

AddreWL é comparado ao endereço de chamada geral após


ACK, definir interrupção

R/W=0 Recebendo dados ACK


Endereço de chamada geral
SDAx ACK D7 D6 D5 D4 D3 D2 D1 D0

SCLx
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S

SSPxIF

BF (SSPxSTAT <0>)

Apagado por software

SSPxBUF é lido
GCEN (SSPxCON2 <7>)
'1'

15.5.9 SSPx MASK REGISTER

Um registro SSPx Mask (SSPxMSK) (Registro 15-5) está


disponível em I2C Modo escravo como uma máscara para o
valor mantido no registro SSPxSR durante uma operação de
comparação de endereço. Um zero ('0 ') bit no registro
SSPxMSK tem o efeito de tornar o bit correspondente do
endereço recebido um “não importa”.

Este registro é redefinido para todos '1 's sob qualquer condição
de Reset e, portanto, não tem efeito na operação SSPx padrão
até que seja escrito com um valor de máscara.

O registro SSPx Mask está ativo durante:


• Modo Endereço de 7 bits: comparação de endereço de A <7: 1>.

• Modo de endereço de 10 bits: comparação de endereço de A


<7: 0> apenas. A máscara SSPx não tem efeito durante a
recepção do primeiro byte (alto) do endereço.

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 237


PIC18 (L) F2X / 4XK22
15,6 I2MODO C MASTER 15.6.1 I2OPERAÇÃO DO MODO C MASTER

O modo mestre é habilitado configurando e apagando os O dispositivo mestre gera todos os pulsos de relógio serial e as

bits SSPxM apropriados no registro SSPxCON1 e condições de partida e parada. Uma transferência é encerrada

configurando o bit SSPxEN. No modo Master, as linhas com uma condição de parada ou com uma condição de início

SCLx e SDAx são definidas como entradas e são repetido. Uma vez que a condição de início repetido também é o

manipuladas pelo hardware MSSPx. início da próxima transferência serial, o I2O barramento C não
será liberado.
O modo mestre de operação é suportado pela geração de
interrupções na detecção das condições de partida e parada. Os No modo Transmissor Mestre, os dados seriais são enviados por

bits de parada (P) e partida (S) são apagados de uma meio do SDAx, enquanto o SCLx fornece o relógio serial. O

reinicialização ou quando o módulo MSSPx é desabilitado. primeiro byte transmitido contém o escravoadicionarressente o

Controle do eu2O barramento C pode ser usado quando o bit P do dispositivo receptor (7 bits) e o bit de leitura / gravação (R /

está definido ou o barramento está inativo. W). Neste caso, o bit R / W será lógico '0 '. Os dados seriais são
transmitidos em 8 bits por vez. Após cada byte ser transmitido,
No modo Firmware Controlled Master, o código do usuário
um bit de reconhecimento é recebido. As condições de início e
conduz todos os I2Operações do barramento C com base na
parada são emitidas para indicar o início e o fim de uma
detecção de condição de bit de partida e parada. A detecção de
transferência serial.
condição de partida e parada é o único circuito ativo neste modo.
Todas as outras comunicações são feitas pelo software do No modo Master Receive, o primeiro byte transmitido
usuário, manipulando diretamente as linhas SDAx e SCLx. contém o escravo advestido da transmissãotidispositivo (7
bits) e o bit R / W. Neste caso, o bit R / W será lógico '1 '.
Os eventos a seguir farão com que o bit da Sinalização de interrupção Assim, o primeiro byte transmitido é um endereço escravo
SSPx, SSPxIF, seja definido (interrupção SSPx, se habilitada): de 7 bits seguido por um '1 ' para indicar o bit de recepção.
Os dados seriais são recebidos via SDAx, enquanto o SCLx
• Condição inicial detectada
gera o relógio serial. Os dados seriais são recebidos 8 bits
• Condição de parada detectada
por vez. Depois que cada byte é recebido, um bit de
• Byte de transferência de dados transmitido / recebido
reconhecimento é transmitido. As condições de início e
• Confirmar transmitido / recebido parada indicam o início e o fim da transmissão.
• Início repetido gerado Um gerador de taxa de transmissão é usado para definir a saída
Nota 1: O módulo MSSPx, quando configurado em de frequência de clock no SCLx. VerSeção 15.7 “Gerador de taxa
eu2Modo C Master, não permite de transmissão” para mais detalhes.
enfileiramento de eventos. Por exemplo, o
usuário não tem permissão para iniciar uma
condição inicial e escrever imediatamente o
registro SSPxBUF para iniciar a transmissão
antes que a condição inicial seja concluída.
Neste caso, o SSPxBUF não será gravado e o
bit WCOL será definido, indicando que uma
gravação no SSPxBUF não ocorreu

2: Quando no modo Mestre, Iniciar / Parar


a detecção é mascarada e uma
interrupção é gerada quando o bit SEN /
PEN é apagado e a geração é concluída.

DS41412B - página 238 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
15.6.2 ARBITRAGEM DE RELÓGIO

A arbitragem do relógio ocorre quando o mestre, durante


qualquer recepção, transmissão ou condição de início /
parada repetida, libera o pino SCLx (SCLx pode flutuar alto).
Quando o pino SCLx pode flutuar alto, o Gerador de Baud
Rate (BRG) é suspenso da contagem até que o pino SCLx seja
realmente amostrado alto. Quando o pino SCLx é amostrado
alto, o Gerador de Baud Rate é recarregado com o conteúdo
de SSPxADD <7: 0> e começa a contar. Isso garante que o
tempo máximo de SCLx sempre será de pelo menos uma
contagem de rollover de BRG no caso de o relógio ser
mantido baixo por um dispositivo externo (Figura 15-25).

FIGURA 15-25: TEMPORIZAÇÃO DO GERADOR DE TAXA DE BAUD COM ARBITRAGEM DE RELÓGIO

SDAx DX DX ‚- 1

SCLx desativado, mas o escravo mantém SCLx permitiu a transição alta


SCLx baixo (arbitragem de relógio)

SCLx

Reduções de BRG em
Ciclos Q2 e Q4

BRG
03h 02h 01h 00h (espera) 03h 02h
Valor

SCLx é amostrado alto, a recarga


ocorre e BRG inicia sua contagem
BRG
recarregar

15.6.3 BANDEIRA DE STATUS WCOL

Se o usuário grava o SSPxBUF quando uma sequência Iniciar,


Reiniciar, Parar, Receber ou Transmitir está em andamento,
o WCOL é definido e o conteúdo do buffer permanece
inalterado (a gravação não ocorre). Sempre que o bit WCOL é
definido, ele indica que uma ação em SSPxBUF foi tentada
enquanto o módulo não estava ocioso.

Observação: Como o enfileiramento de eventos não é


permitido, a gravação nos 5 bits inferiores de
SSPxCON2 é desabilitada até que a condição
de inicialização seja concluída.

- 2010 Microchip Technology Inc. Preliminares DS41412B - página 239


PIC18 (L) F2X / 4XK22
15.6.4 I2TEMPO DE CONDIÇÃO DE INÍCIO por hardware; o Baud Rate Generator é suspenso, deixando
DO MODO C MASTER a linha SDAx mantida baixa e a condição de partida está
completa.
Para iniciar uma condição de início, o usuário define o bit
de Ativação de início, SEN, do registro SSPxCON2. Se os Nota 1: Se no início da condição inicial, os pinos SDAx
pinos SDAx e SCLx forem amostrados altos, o Gerador de e SCLx já são amostrados baixo, ou se durante
taxa de transmissão será recarregado com o conteúdo a condição inicial, a linha SCLx é amostrada
de SSPxADD <7: 0> e iniciará sua contagem. Se SCLx e baixo antes que a linha SDAx seja baixada,
SDAx são ambos amostrados alto quando o Gerador de uma colisão de barramento ocorre, o
Baud Rate expira (TBRG), o pino SDAx é direcionado para sinalizador de interrupção de colisão de
baixo. A ação do SDAx sendo direcionado para baixo barramento , BCLxIF, é definido, a condição de
enquanto SCLx é alto é a condição inicial e faz com que o início é abortada e o I2O módulo C é
bit S do registro SSPxSTAT1 seja definido. Em seguida, o reinicializado em seu estado ocioso.
Gerador de Baud Rate é recarregado com o conteúdo de 2: O Philips I2A especificação C afirma que um
SSPxADD <7: 0> e retoma sua contagem. Quando o colisão de ônibus não pode ocorrer em uma partida.
Gerador de Baud Rate expira (TBRG), o bit SEN do registro
SSPxCON2 será apagado automaticamente

FIGURA 15-26: PRIMEIRO INÍCIO DE TEMPO DE BIT

O bit de gravação para SEN ocorre aqui Definir bit S (SSPxSTAT <3>)

Na conclusão do bit de inicialização, o


SDAx = 1,
hardware limpa o bit SEN
SCLx = 1
e define o bit SSPxIF

TBRG TBRG A gravação em SSPxBUF ocorre aqui

SDAx 1º bit 2º bit

TBRG
SCLx
S
TBRG

DS41412B-page 240 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
15.6.5 I2MODO C MASTER TEMPORIZAÇÃO DE O registro SSPxCON2 será apagado automaticamente e o
CONDIÇÃO DE INÍCIO REPETIDO Gerador de Baud Rate não será recarregado, deixando o pino
SDAx mantido baixo. Assim que uma condição de início for
Uma condição de início repetido ocorre quando o bit detectada nos pinos SDAx e SCLx, o bit S do registro SSPxSTAT
RSEN do registro SSPxCON2 é programado como alto e a será definido. O bit SSPxIF não será definido até que o Gerador
máquina de estado mestre não está mais ativa. Quando de taxa de transmissão tenha atingido o tempo limite.
o bit RSEN é definido, o pino SCLx é declarado baixo.
Quando o pino SCLx é amostrado baixo, o Baud Rate Nota 1: Se RSEN for programado enquanto qualquer outro
Generator é carregado e começa a contar. O pino SDAx é evento estiver em andamento, ele não terá efeito.
liberado (elevado) para uma contagem do Gerador de 2: Uma colisão de ônibus durante a condição de partida
taxa de transmissão (TBRG) Quando o Baud Rate repetida ocorre se:
Generator atinge o tempo limite, se SDAx for amostrado
• SDAx é amostrado baixo quando SCLx
alto, o pino SCLx será desativado (elevado). Quando SCLx
vai de baixo para alto.
é amostrado alto, o Gerador de Baud Rate é recarregado
e começa a contar. SDAx e SCLx devem ser amostrados • SCLx fica baixo antes de SDAx ser
alto para um TBRG. Esta ação é seguida pela afirmação do declarado baixo. Isso pode indicar que
pino SDAx (SDAx =0) para um TBRG enquanto SCLx é alto. outro mestre está tentando transmitir
SCLx é declarado baixo. Em seguida, o bit RSEN do dados '1 '.

FIGURA 15-27: REPETIÇÃO DE FORMA DE ONDA DE CONDIÇÃO DE INÍCIO

S bit definido pelo hardware


Escreva para SSPxCON2
ocorre aqui Na conclusão do bit de início,
SDAx = 1, SDAx = 1,
hardware limpa bit RSEN
SCLx (sem alteração) SCLx = 1 e define SSPxIF

TBRG TBRG TBRG

SDAx 1º bit

A gravação em SSPxBUF ocorre aqui

TBRG
SCLx
Sr TBRG
Início Repetido

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 241


PIC18 (L) F2X / 4XK22
15.6.6 I2TRANSMISSÃO DO MODO C MASTER 15.6.6.3 Sinalizador de status ACKSTAT

A transmissão de um byte de dados, um endereço de 7 bits ou a No modo de transmissão, o bit ACKSTAT do registro
outra metade de um endereço de 10 bits é realizada SSPxCON2 é cleared quando o escravo enviou um
simplesmente escrevendo um valor no registrador SSPxBUF. Esta reconhecimento (ACK = 0) e é definido quando o escravo
ação definirá o bit de sinalizador Buffer Cheio, BF, e permitirá não reconhece (ACK = 1). Um escravo envia um
que o Gerador de Baud Rate comece a contar e inicie a próxima Reconhecimento quando reconhece seu endereço
transmissão. Cada bit de endereço / dados será deslocado para o (incluindo uma chamada geral) ou quando o escravo
pino SDAx depois que a borda descendente de SCLx for recebe seus dados corretamente.
declarada. SCLx é mantido baixo para uma contagem de rollover
15.6.6.4 Sequência de transmissão típica:
do gerador de taxa de transmissão (TBRG) Os dados devem ser
válidos antes que o SCLx seja liberado alto. Quando o pino SCLx é 1. O usuário gera uma condição de início definindo
liberado alto, ele é mantido dessa forma para TBRG. Os dados no o bit SEN do registro SSPxCON2.
pino SDAx devem permanecer estáveis por essa duração e 2. SSPxIF é definido pelo hardware na conclusão da
algum tempo de espera após a próxima borda descendente de inicialização.
SCLx. Depois que o oitavo bit é deslocado para fora (a borda
3. SSPxIF é limpo pelo software.
descendente do oitavo relógio), o sinalizador BF é limpo e o
4. O módulo MSSPx aguardará a hora de início necessária
mestre libera o SDAx. Isso permite que oslave dispositivo sendo
antes que qualquer outra operação ocorra.
endereçado para responder com um bit ACK durante o nono
tempo de bit se ocorrer uma correspondência de endereçourred, 5. O usuário carrega o SSPxBUF com o endereço do
ou se os dados foram recebidos corretamente. O status de ACK é escravo para transmitir.
escrito no bit ACKSTAT na transição positiva do nono relógio. Se o 6. O endereço é deslocado para fora do pino SDAx até que
mestre receber um reconhecimento, o bit de status de todos os 8 bits sejam transmitidos. A transmissão
reconhecimento, ACKSTAT, é apagado. Caso contrário, o bit está começa assim que SSPxBUF é gravado.
definido. Após o nono clock, o bit SSPxIF é definido e o clock 7. O módulo MSSPx muda no bit ACK do dispositivo
mestre (Baud Rate Generator) é suspenso até que o próximo byte escravo e escreve seu valor no bit ACKSTAT do
de dados seja carregado no SSPxBUF, deixando SCLx baixo e registro SSPxCON2.
SDAx inalterado (Figura 15-27).
8. O módulo MSSPx gera uma interrupção no final
Após a gravação no SSPxBUF, cada bit do endereço será do nono ciclo do relógio, definindo o bit SSPxIF.
deslocado na quedag borda de SCLx até que todos os
sete bits de endereço e o bit R / W sejam concluídos. Na 9. O usuário carrega o SSPxBUF com oito bits de
borda descendente do oitavo relógio, o mestre irá liberar dados.
o pino SDAx, permitindo que o escravo responda com 10. Os dados são deslocados para fora do pino SDAx até que todos os 8 bits
um reconhecimento. Na borda descendente do nono sejam transmitidos.
relógio, o mestre irá amostrar o pino SDAx para ver se o
11. O módulo MSSPx muda no bit ACK do
address foi reconhecido por um escravo. O status do bit ACK
dispositivo escravo e escreve seu valor no bit
é carregado no bit ACKSTAT Status do registro SSPxCON2.
ACKSTAT do registro SSPxCON2.
Seguindo a borda descendente da nona transmissão de
12. Os passos 8-11 são repetidos para todos os bytes de dados
relógio do endereço, o SSPxIF é definido, o sinalizador BF é
limpo e o Gerador de taxa de transmissão é desligado até transmitidos.

que outra gravação no SSPxBUF ocorra, mantendo SCLx 13. O usuário gera uma condição de Parada ou
baixo e permitindo que SDAx flutue. Reinício configurando os bits PEN ou RSEN do
registro SSPxCON2. A interrupção é gerada assim
15.6.6.1 Sinalizador de status BF que a condição Parar / Reiniciar for concluída.
No modo de transmissão, o bit BF do registro SSPxSTAT é
definido quando a CPU grava em SSPxBUF e é limpo quando
todos os 8 bits são deslocados.

15.6.6.2 Sinalizador de status WCOL

Se o usuário grava o SSPxBUF quando uma transmissão já


está em andamento (ou seja, SSPxSR ainda está deslocando
um byte de dados), o WCOL é definido e o conteúdo do
buffer permanece inalterado (a gravação não ocorre).

O WCOL deve ser limpo pelo software antes da próxima


transmissão.

DS41412B-page 242 Preliminares - 2010 Microchip Technology Inc.


FIGURA 15-28:

Escreva SSPxCON2 <0> SEN = 1 ACKSTAT em


A condição inicial começa SSPxCON2 = 1
Do escravo, limpe o bit ACKSTAT SSPxCON2 <6>

- 2010 Microchip Technology Inc.


SEN = 0
Transmitindo dados ou segunda metade do
Endereço de transmissão para escravo R/W=0 ACK
endereço de 10 bits

SDAx A7 A6 A5 A4 A3 A2 A1 ACK = 0 D7 D6 D5 D4 D3 D2 D1 D0

SSPxBUF escrito com endereço de 7 bits e R / W iniciar


transmissão

SCLx 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S P
SCLx mantido baixo
enquanto CPU
responde a SSPxIF
SSPxIF
Apagado pela rotina de serviço de
Apagado por software software da interrupção SSPx
Apagado por software

Preliminares
BF (SSPxSTAT <0>)

SSPxBUF escrito SSPxBUF é escrito por software

SEN

Após a condição de início, SEN liberado pelo hardware

CANETA

R/W
FORMA DE ONDA DO MODO MASTER I2C (TRANSMISSÃO, ENDEREÇO DE 7 OU 10 BITS)
PIC18 (L) F2X / 4XK22

DS41412B-page 243
PIC18 (L) F2X / 4XK22
15.6.7 I2RECEPÇÃO DO MODO C MASTER 15.6.7.4 Sequência de recebimento típica:

A recepção do modo mestre é habilitada programando- 1. O usuário gera uma condição de início definindo
se o bit ReceiveEnable, RCEN, do registro SSPxCON2. o bit SEN do registro SSPxCON2.
Observação: O módulo MSSPx deve estar em um estado 2. SSPxIF é definido pelo hardware na conclusão da
Idle antes que o bit RCEN seja definido ou o bit inicialização.
RCEN será desconsiderado. 3. SSPxIF é limpo pelo software.
O Baud Rate Generator começa a contar e em cada rollover, o 4. O usuário escreve SSPxBvocêF com o endereço do escravo a

estado do pino SCLx muda (alto para baixo / baixo para alto) e os transmitir e o bit R / W definido.
dados são transferidos para o SSPxSR. Após a borda descendente 5. O endereço é deslocado para fora do pino SDAx até que
do oitavo relógio, o sinalizador de habilitação de recebimento é todos os 8 bits sejam transmitidos. A transmissão
automaticamente limpo, o conteúdo do SSPxSR é carregado no começa assim que SSPxBUF é gravado.
SSPxBUF, o bit de sinalizador BF é definido, o bit de sinalizador 6. O módulo MSSPx muda no bit ACK do dispositivo
SSPxIF é definido e o Gerador de taxa de transmissão é suspenso escravo e escreve seu valor no bit ACKSTAT do
da contagem , mantendo SCLx baixo. O MSSPx está agora no registro SSPxCON2.
estado Ocioso aguardando o próximo comando. Quando o buffer 7. O módulo MSSPx gera uma interrupção no final
é lido pela CPU, o bit da bandeira BF é automaticamente do nono ciclo do relógio, definindo o bit SSPxIF.
apagado. O usuário pode então enviar um bit de reconhecimento
no final da recepção, configurando o bit de habilitação de
8. O usuário configura o bit RCEN do registro SSPxCON2 e
sequência de reconhecimento, ACKEN, do registro SSPxCON2.
os relógios Master em um byte do escravo.
9. Após a 8ª borda descendente de SCLx, SSPxIF e BF são
15.6.7.1 Bandeira de status BF definidos.
10. O mestre limpa SSPxIF e lê o byte recebido de SS
Na operação de recepção, o bit BF é definido quando um
PxUF, limpa BF.
endereço ou byte de dados é carregado em SSPxBUF a partir de
SSPxSR. É limpo quando o registro SSPxBUF é lido. 11. O mestre define o valor ACK enviado ao escravo
no bit ACKDT do registro SSPxCON2 e inicia o
15.6.7.2 Sinalizador de status SSPxOV ACK por setting o bit ACKEN.
Na operação de recepção, o bit SSPxOV é definido quando 8 bits 12. Masters ACK é sincronizado para o escravo e
são recebidos no SSPxSR e o bit de sinalizador BF já está definido SSPxIF é definido.
a partir de uma recepção anterior. 13. O usuário limpa SSPxIF.
14. Os passos 8-13 são repetidos para cada byte
15.6.7.3 Sinalizador de status WCOL recebido do escravo.
Se o usuário grava o SSPxBUF quando um recebimento já 15. O Mestre envia um não ACK ou Parar para encerrar a
está em andamento (ou seja, SSPxSR ainda está mudando comunicação.
em um byte de dados), o bit WCOL é definido e o conteúdo
do buffer permanece inalterado (a gravação não ocorre).

DS41412B-page 244 Preliminares - 2010 Microchip Technology Inc.


Grave em SSPxCON2 <4>
para iniciar a sequência de reconhecimento
SDAx = ACKDT (SSPxCON2 <5>) = 0
FIGURA 15-29:

Grave em SSPxCON2 <0> (SEN = 1),


começar condição inicial ACK do Mestre Definir ACKEN, iniciar sequência de reconhecimento
Mestre configurado como receptor SDAx = ACKDT = 0 SDAx = ACKDT = 1
SEN = 0 programando SSPxCON2 <3> (RCEN = 1)
PEN bit = 1
A gravação em SSPxBUF ocorre aqui, RCEN apagado RCEN = 1, começar RCEN apagado
ACK do Slave próximo receba
escrito aqui
iniciar o XMIT automaticamente automaticamente

- 2010 Microchip Technology Inc.


Endereço de transmissão para escravo R/W=0 Recebendo Dados do Slave Recebendo Dados do Slave

SDAx A7 A6 A5 A4 A3 A2 A1 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK

Mestre de ônibus
ACK não foi enviado
termina
transferir

1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
SCLx S P
Dados deslocados na borda descendente de CLK Definir SSPxIF no final do
recebimento Definir interrupção SSPxIF
Definir interrupção SSPxIF no final de Acknow-
Definir interrupção SSPxIF ledge sequência
no final do recebimento
no final da sequência de
SSPxIF reconhecimento

Definir bit P
Apagado por software Apagado por software Apagado por software
SDAx = 0, SCLx = 1 Apagado por software Apagado em (SSPxSTAT <4>)
Programas e SSPxIF
enquanto CPU
responde a SSPxIF

Preliminares
BF
O último bit é deslocado para SSPxSR e o
(SSPxSTAT <0>)
conteúdo é descarregado para SSPxBUF

SSPxOV

SSPxOV está definido porque


SSPxBUF ainda está cheio

ACKEN
FORMA DE ONDA DO MODO MASTER I2C ™ (RECEPÇÃO, ENDEREÇO DE 7 BIT)

RCEN

Mestre configurado como receptor RCEN apagado ACK do Mestre RCEN apagado
programando SSPxCON2 <3> (RCEN = 1) automaticamente SDAx = ACKDT = 0 automaticamente
PIC18 (L) F2X / 4XK22

DS41412B-page 245
PIC18 (L) F2X / 4XK22
15.6.8 RECONHECER O TEMPO DE 15.6.9 TEMPO DE CONDIÇÃO DE PARADA
SEQUÊNCIA Um bit de parada é declarado no pino SDAx no final de uma
Uma sequência de reconhecimento é habilitada recepção / transmissão configurando o bit de habilitação de
configurando o bit de ativação de sequência de sequência de parada, PEN, do registro SSPxCON2. No final de
reconhecimento, ACKEN, do registro SSPxCON2. Quando uma recepção / transmissão, a linha SCLx é mantida baixa após a
este bit é definido, o pino SCLx é puxado para baixo e o borda descendente do nono relógio. Quando o bit PEN é
conteúdo do bit de dados de reconhecimento é apresentado definido, o mestre afirmará a linha baixa do SDAx. Quando a
no pino SDAx. Se o usuário deseja gerar um reconhecimento, linha SDAx é amostrada baixa, o Gerador de Baud Rate é
o bit ACKDT deve ser apagado. Caso contrário, o usuário recarregado e faz a contagem regressiva até '0 '. Quando o Baud
deve definir o bit ACKDT antes de iniciar uma sequência de Rate Generator atinge o tempo limite, o pino SCLx será elevado e
reconhecimento. O Gerador de Baud Rate então conta para um TBRG (Contagem de rollover do gerador de taxa de
um período de rollover (TBRG) e o pino SCLx está desativado transmissão) posteriormente, o pino SDAx será desativado.
(puxado para cima). Quando o pino SCLx é amostrado alto Quando o pino SDAx é amostrado alto enquanto SCLx é alto, o bit
(arbitragem de relógio), o Gerador de Baud Rate conta para T P do registro SSPxSTAT é definido. NOBRG posteriormente, o bit
BRG. O pino SCLx é então puxado para baixo. Em seguida, o PEN é limpo e o bit SSPxIF é definido (Figura 15-30).
bit ACKEN é apagado automaticamente, o Gerador de Baud
Rate é desligado e o módulo MSSPx entra no modo Idle 15.6.9.1 Sinalizador de status WCOL
(Figura 15-29). Se o usuário gravar o SSPxBUF quando uma sequência de
parada estiver em andamento, o bit WCOL será definido e o
15.6.8.1 Sinalizador de status WCOL conteúdo do buffer não será alterado (a gravação não
Se o usuário gravar o SSPxBUF quando uma sequência de ocorre).
reconhecimento estiver em andamento, o WCOL será
definido e o conteúdo do buffer não será alterado (a
gravação não ocorre).

FIGURA 15-30: RECONHECER A FORMA DE ONDA DE SEQUÊNCIA


A sequência de reconhecimento começa aqui,
ACKEN apagado automaticamente
escrever para SSPxCON2
ACKEN = 1, ACKDT = 0
TBRG TBRG
SDAx D0 ACK

SCLx 8 9

SSPxIF

Apagado em
SSPxIF definido em
Apagado em Programas
o fim de receber
Programas SSPxIF definido no final
da sequência de reconhecimento
Observação: TBRG = um período do gerador de taxa de transmissão.

DS41412B-page 246 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
FIGURA 15-31: CONDIÇÃO DE PARADA RECEBER OU MODO DE TRANSMISSÃO

Escreva para SSPxCON2, SCLx = 1 para TBRG, seguido por SDAx = 1 para TBRG
definir PEN após SDAx amostrado alto. O bit P (SSPxSTAT <4>) está definido.

Borda de queda de O bit PEN (SSPxCON2 <2>) é limpo pelo


9º relógio hardware e o bit SSPxIF é definido
TBRG
SCLx

SDAx ACK

P
TBRG TBRG TBRG
SCLx elevado após TBRG
SDAx afirmado baixo antes da borda ascendente do relógio para
configurar a condição de parada

Observação: TBRG = um período do gerador de taxa de transmissão.

15.6.10 OPERAÇÃO DE SONO 15.6.12 MODO MULTI-MASTER


Enquanto estiver no modo Sleep, o I2O módulo escravo C pode receber No modo Multi-Master, a geração de interrupções na detecção
endereços ou dados e, quando ocorre uma correspondência de endereço ou das condições de Start e Stop permite determinar quando o
uma transferência completa de bytes, tira o processador do modo de espera barramento está livre. Os bits de parada (P) e partida (S) são
(se a interrupção MSSPx estiver habilitada). apagados de uma reinicialização ou quando o módulo MSSPx é
desabilitado. Controle do eu2O barramento C pode ser tomado
15.6.11 EFEITOS DE UM RESET quando o bit P do registro SSPxSTAT é definido, ou o barramento
Um Reset desativa o módulo MSSPx e encerra a está inativo, com ambos os bits S e P limpos. Quando o
transferência atual. barramento está ocupado, habilitar a interrupção SSPx gerará a
interrupção quando a condição de parada ocorrer.

Na operação multimestre, a linha SDAx deve ser


monitorada para arbitragem para ver se o nível do sinal
é o nível de saída esperado. Esta verificação é realizada
por hardware com o resultado colocado no bit BCLxIF.
Os estados onde a arbitragem pode ser perdida são:

• Transferência de endereço

• Transferência de dados

• Uma condição inicial

• Uma condição inicial repetida


• Uma condição de reconhecimento

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 247


PIC18 (L) F2X / 4XK22
15.6.13 COMUNICAÇÃO MULTIMASTER, Se uma condição de Partida, Partida Repetida, Parada ou
COLISÃO DE ÔNIBUS E ÔNIBUS Confirmação estava em andamento quando a colisão de
ARBITRAGEM barramento ocorreu, a condição é abortada, as linhas SDAx e
SCLx são desativadas e os respectivos bits de controle no
O suporte ao modo Multi-Master é obtido por arbitragem de
registro SSPxCON2 são apagados. Quando o usuário atende
barramento. Quando o mestre emite bits de endereço /
a Rotina de Serviço de Interrupção de Colisão de ônibus e se
dados no pino SDAx, a arbitragem ocorre quando o mestre
o I2O barramento C está livre, o usuário pode retomar a
emite um '1 ' no SDAx, deixando o SDAx flutuar alto e outro
comunicação declarando uma condição de início.
mestre afirma um '0 '. Quando o pino SCLx flutua alto, os
dados devem ser estáveis. Se os dados esperados no SDAx O mestre continuará monitorando os pinos SDAx e SCLx. Se
forem um '1 ' e os dados amostrados no pino SDAx são '0 ', ocorrer uma condição de parada, o bit SSPxIF será definido.
então ocorreu uma colisão de ônibus. O mestre irá definir o Uma gravação no SSPxBUF iniciará a transmissão de dados no
sinalizador de interrupção de colisão de barramento, BCLxIF, primeiro bit de dados, independentemente de onde o
e redefinir o I2Porta C para seu estado Idle (Figura 15-31). transmissor parou quando a colisão de barramento ocorreu.
Se uma transmissão estava em andamento quando a colisão No modo Multi-Master, a geração de interrupções na
de barramento ocorreu, a transmissão é interrompida, o detecção das condições de Start e Stop permite determinar
sinalizador BF é limpo, as linhas SDAx e SCLx são desativadas quando o barramento está livre. Controle do eu2O
e o SSPxBUF pode ser escrito. Quando o usuário atende a barramento C pode ser usado quando o bit P é definido no
Rotina de Serviço de Interrupção de Colisão de ônibus e se o I registro SSPxSTAT ou o barramento está inativo e os bits S e
2O barramento C está livre, o usuário pode retomar a P são apagados.
comunicação declarando uma condição de início.

FIGURA 15-32: TEMPO DE COLISÃO DE ÔNIBUS PARA TRANSMISSÃO E RECONHECIMENTO

Sample SDAx. Embora o SCLx seja alto, os


Mudanças de dados Linha SDAx puxada para
dados não correspondem ao que é
enquanto SCLx = 0 baixo por outra fonte
conduzido pelo mestre.
Ocorreu uma colisão de ônibus.
SDAx lançado
pelo mestre

SDAx

SCLx Definir colisão de ônibus

interrupção (BCLxIF)

BCLxIF

DS41412B-page 248 Preliminares - 2010 Microchip Technology Inc.


PIC18 (L) F2X / 4XK22
15.6.13.1 Colisão de ônibus durante uma partida Se o pino SDAx for amostrado baixo durante essa contagem,
Doença o BRG é redefinido e a linha SDAx é ativada antecipadamente
(Figura 15-34). Se, no entanto, um '1 ' é amostrado no pino
Durante uma condição de partida, uma colisão de ônibus ocorre se:
SDAx, o pino SDAx é declarado baixo no final da contagem
a) SDAx ou SCLx são amostrados baixo no início da BRG. O Baud Rate Generator é então recarregado e faz a
condição inicial (Figura 15-32). contagem regressiva até zero; se o pino SCLx for amostrado
b) SCLx é amostrado baixo antes de SDAx ser declarado como '0 ' durante esse tempo, não ocorre uma colisão de
baixo (Figura 15-33). ônibus. No final da contagem BRG, o pino SCLx é declarado
baixo.
Durante uma condição de inicialização, os pinos SDAx e SCLx
são monitorados. Observação: A razão pela qual a colisão de barramento não é

Se o pino SDAx já estiver baixo, ou o pino SCLx já um fator durante uma condição de partida é que
estiver baixo, todos os seguintes ocorrerão: dois mestres de barramento não podem declarar
uma condição de partida ao mesmo tempo.
• a condição inicial é abortada,
Portanto, um mestre sempre ativará o SDAx antes
• o sinalizador BCLxIF é definido e
do outro. Esta condição não causa uma colisão de
• o módulo MSSPx é redefinido para seu estado Inativo barramento porque os dois mestres devem ter
(Figura 15-32). permissão para arbitrar o primeiro endereço após
A condição inicial começa com os pinos SDAx e SCLx a condição inicial. Se o endereço for o mesmo, a
desativados. Quando o pino SDAx é amostrado alto, o Baud arbitragem deve ser permitida para continuar na
Rate Generator é carregado e faz a contagem regressiva. Se parte de dados, condições de início ou parada
o pino SCLx for amostrado baixo enquanto SDAx estiver alto, repetidas.
ocorre uma colisão de barramento porque é assumido que
outro mestre está tentando conduzir um dado '1 ' durante a
condição inicial.

FIGURA 15-33: COLISÃO DE ÔNIBUS DURANTE A CONDIÇÃO DE INÍCIO (APENAS SDAx)

SDAx fica baixo antes que o bit SEN seja definido.


Definir BCLxIF,
S bit e SSPxIF definidos
porque SDAx = 0, SCLx = 1

SDAx

SCLx
Definir SEN, habilitar condição inicial SEN apagado automaticamente devido a colisão de ônibus. O módulo
se SDAx = 1, SCLx = 1 SSPx foi redefinido para o estado Inativo.

SEN
SDAx com amostra baixa antes
Condição inicial. Defina BCLxIF.
S bit e SSPxIF definidos
BCLxIF porque SDAx = 0, SCLx = 1

SSPxIF e BCLxIF são


limpos por software

SSPxIF

SSPxIF e BCLxIF são


limpos por software

- 2010 Microchip Technology Inc. Preliminares DS41412B-page 249


PIC18 (L) F2X / 4XK22
FIGURA 15-34: COLISÃO DE ÔNIBUS DURANTE A CONDIÇÃO DE INÍCIO (SCLx = 0)

SDAx = 0, SCLx = 1

TBRG TBRG

SDAx

SCLx Definir SEN, ativar sequência de início


se SDAx = 1, SCLx = 1
SCLx = 0 antes de SDAx = 0,
ocorre colisão de ônibus. Defina BCLxIF.
SEN
SCLx = 0 antes do tempo limite de BRG,
ocorre uma colisão de ônibus. Defina BCLxIF.

BCLxIF
Interrupção liberada
por software

S '0' '0'

SSPxIF '0' '0'

FIGURA 15-35: REINICIALIZAÇÃO DE BRG DEVIDO À ARBITRAGEM SDA DURANTE A CONDIÇÃO DE INÍCIO

SDAx = 0, SCLx = 1
Conjunto S Definir SSPxIF
Menor que TBRG
TBRG

SDAx SDAx baixado por outro mestre.


Reinicialize o BRG e confirme o SDAx.

SCLx S
SCLx diminuiu após o tempo
limite de BRG
SEN
Definir SEN, ativar sequência de início
se SDAx = 1, SCLx = 1
BCLxIF '0'

SSPxIF
SDAx = 0, SCLx = 1, Interrupções apagadas
definir SSPxIF por software

DS41412B-page 250 Preliminares - 2010 Microchip Technology Inc.

Você também pode gostar