Biblioteca I2C para FRDM-KL25Z

Olá caro leitor, neste quarto artigo da série Biblioteca de software para a FRDM-KL25Z. Será apresentada a biblioteca de software para o barramento de comunicação I²C (Inter-Integrated Circuit) e exemplo de aplicação utilizando o módulo Tiny RTC I2C.

 

As bibliotecas aqui apresentadas são compatíveis com o Kinetis Design Studio IDE e CodeWarrior IDE. Também são facilmente portáveis para as demais Freedom Board.

 

O microcontrolador presente na Freedom Board KL25Z, o MKL25Z128VLK4, contém dois módulos de comunicação I²C (I2C0 e I2C1), que trabalham com dados de 8 bits. Os módulos permitem trabalhar tanto no modo mestre (Master) ou no modo escravo (Slave). O módulo de comunicação I²C deste microcontrolador possui também interface DMA (Direct Memory Access).

 

A seguir serão apresentadas as configurações mínimas para trabalhar com o I²C na Freedom Board KL25Z no modo mestre. Apresentando funções de inicialização do periférico e funções de escrita e leitura, e por fim, um exemplo de aplicação de utilização da comunicação I²C.

 

 

Introdução I²C

 

O I²C, IIC ou I2C (Inter-Integrated Circuit - Circuito Inter-integrado) é barramento de comunicação serial síncrono Mestre/Escravo, desenvolvido pela empresa  Philips Semiconductor (hoje NXP Semiconductors). Algumas empresas utilizam outra nomenclatura: TWI (Two Wire Interface - Interface de Dois Fios) ou 2-Wire Serial, TWSI (Two-Wire Serial Interface - Interface Serial de Dois Fios).

 

A comunicação I²C possui duas linhas de sinais SDA (Serial Data) e SCL (Serial Clock Line), sendo um sinal para transmissão de dados e outro o sinal de Clock. O SDA é um sinal bidirecional, permitindo a troca de dados entre o mestre e os escravo de maneira não simultânea (Half-Duples). O SCL é sinal de Clock paro sincronismo da comunicação, este sinal é gerado pelo mestre.

 

 

Outra característica muito importante a ser mencionada sobre a comunicação I2C é o fato que suas duas linhas de sinais utiliza Dreno Aberto (Coletor Aberto), significa que o transistor é para chavear o sinal para 0 (0 Volts - GND). Para chavear o sinal para 1 (3,3 ou 5 Volts - VCC) se faz necessário utilizar resistores  de pull-up em suas linhas. Tipicamente são utilizados resistores com valores entre 2K2 a 4K7 Ohms.

 

A comunicação I²C pode endereçar até 127 dispositivos, porque faz o uso de 7 Bits de endereçamento (existem alguns dispositivos com endereçamento de 10 Bits, permitindo o endereçamento de até 1023 dispositivos). Para mais informações a respeito da comunicação I²C, recomendo a série de artigos escrita pelo o Francesco SaccoMódulo Tiny RTC I2C”, onde é explicado com maior detalhes.

 

 

 

Inicializando I²C

 

Configuração da fonte de Clock

O primeiro item a ser configurado para o funcionamento da comunicação I²C é a fonte de Clock. Para realizar esta tarefa deve utilizar o registrador System Clock Gating Control Register 4 (SIM_SCGC4).

 

Para escrever no registrador deve utilizar as macros SIM_SCGC4_I2C0_MASK para o I2C0 e SIM_SCGC4_I2C1_MASK  para I2C1.

 

As figuras abaixo ilustram os parâmetros do registrador.

 

I2C para FRDM-KL25Z

 

 

Configuração dos pinos do barramento de comunicação I²C

O segundo item a ser configurado é os pinos para a comunicação I²C. Cada periférico de comunicação I²C possui quatro alternativas de pinos. A seguir é apresentada a tabelas com os pinos.

 

I2C0

Pinos I²C

Alternativa 0

Alternativa 1

Alternativa 2

Alternativa 3

SCL

PTE24

PTB0

PTB2

PTC8

SDA

PTE25

PTB1

PTB3

PTC9

I2C1

Pinos I²C

Alternativa 0

Alternativa 1

Alternativa 2

Alternativa 3

SCL

PTE0

PTA3

PTC1

PTC10

SDA

PTE1

PTA4

PTC2

PTC11

 

Para definir as funcionalidades dos pinos devemos seguir as instruções do Signal Multiplexing and Pin Assignments (Multiplexador de sinais do pino). Para realizar essa tarefa deve-se utilizar a macro PORT_PCR_MUX(x) para configurar o multiplexador de sinais do pino, onde x é alternativa de funcionalidade do pino. A seguir são apresentas imagens com a tabela com KL25 Signal Multiplexing and Pin Assignments.

 

 

 

 

 

 

Configuração dos Parâmetros

O primeiro parâmetro que deve ser configurado é a frequência do Clock (Baud Rate). Para realizar essa operação deve-se utilizar o registrador I2C Frequency Divider register (I2Cx_F). Os dois Bits mais significativos do registrador é MULT. Os Bits MULT definem o fator de multiplicação, que é utilizado para definir a taxa de transmissão da comunicação I²C.

 

Para configurar os Bits MULT deve-se utilizar a macro I2C_F_MULT(x), onde x é valor do fator.

 

Os demais Bits são os INC, são os Bits que compõem o valor do Prescales. Em conjunto com o MULT definem o valor da taxa de transmissão. A macro I2C_F_ICR(x) é utilizada para configurar o INC, x é valor do Prescale. As figuras abaixo ilustram os detalhes do registrador.

 

 

 

 

O último item que devemos configurar é o registrador I2C Control Register 1 (I2Cx_C1). É neste registrador onde se encontra os principais itens para controlar a comunicação I²C. A seguir é apresentada tabela com cada Bit do registrador, sua macro correspondente e descrição do mesmo. 

 

Bit

Macro

Descrição

IICEN

I2C_C1_IICEN_MASK

Habilita I²C

IICIE

I2C_C1_IICIE_MASK

Habilita Interrupção

MST

I2C_C1_MST_MASK

Seleção do Modo Mestre

TX

I2C_C1_TX_MASK

Seleção do Modo de Transmissão

TXAK

I2C_C1_TXAK_MASK

Transmite o Acknowledge Enable

RSTA

I2C_C1_RSTA_MASK

Repetir START

WUEN

I2C_C1_WUEN_MASK

Habilita Wakeup

DMAEN

I2C_C1_DMAEN_MASK

Habilita DMA

 

A seguir são apresentadas imagens que ilustram com detalhe cada Bit do registrador I2C Control Register 1 (I2Cx_C1).

 

 

 

  

 

Leitura e Escrita da Comunicação I²C

 

Para realizar leitura e escrita no barramento de comunicação I²C será necessário apresentar mais dois registradores.

 

O primeiro registrador é I2C Status register (I2Cx_S), possui Bits de leitura e escrita, utilizada para gerenciar a comunicação I²C. A seguir temos algumas imagens para demonstrar os Bits do registrador.

 

 

 

 

O segundo registrador a ser apresentado é o I2C Data I/O register (I2Cx_D). É através desse registrador que são feitas as leituras e escritas no barramento de comunicação I²C. As figuras a seguir ilustram com detalhes o registrador.

 

 

 

A seguir é apresentada a biblioteca desenvolvida para o barramento de comunicação I²C para utilizar com a Freedom Board KL25Z.

 

O código fonte abaixo é do arquivo i2c.h.

 

 

A seguir temos o código fonte do arquivo i2c.c.

 

 

 

Aplicação com o Módulo Tiny RTC I2C

 

O módulo Tiny RTC I2C é composto pelo RTC (Real-Time Clock) DS1307 com bateria e memória EEPROM AT24C32. Para mais detalhes sobre o módulo Tiny RTC I2C recomendo que veja a série de artigos produzida pelo Francesco SaccoMódulo Tiny RTC I2C”.

 

Na figura a seguir temos o circuito elétrico que foi montado para aplicação.

 

 

Abaixo temos o código fonte ds1307.h.

 

 

Abaixo é apresentado o código fonte ds1307.c.

 

 

A seguir é demonstrado o código fonte main.c da aplicação.

 

 

 

Conclusão

 

Neste artigo foi apresentada mais uma biblioteca de software para a Freedom Board KL25Z e também a biblioteca a realizar leitura e escrita no RTC DS1307.

 

Nos próximos artigos vamos apresentar outras bibliotecas de software (Timer, UART e entre outras) para utilizar com FRDM-KL25. A biblioteca apresentada aqui está disponível no meu GitHub.

 

 

Referências

 

KL25 Sub-Family Reference Manual 

Github 

DS1307 

I2C Bus Specification 

Módulo Tiny RTC I2C 

I²C

Outros artigos da série

<< Biblioteca SPI para a placa FRDM-KL25ZBiblioteca PWM para FRDM-KL25Z >>
Licença Creative Commons
Biblioteca I2C para FRDM-KL25Z por Evandro Teixeira. Esta obra está licenciado com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Sou formado em Técnico em Mecatrônica pelo Colégio Salesiano Dom Bosco Americana - SP, Graduando em Engenharia Elétrica com Ênfase em Eletrônica pela UNISAL de Americana - SP. Atuando com desenvolvimento de hardware e software para sistema embarcado desde 2010. Experiência com microcontroladores de 8,16 e 32 bits. Atualmente trabalhando com desenvolvimento de equipamentos Eletromédicos.

Deixe um comentário

Seja o Primeiro a Comentar!

Notificar
avatar
 
wpDiscuz