Comunicação Serial Avançada: UART, CAN e USB Cortex-M4
Guia Completo de I2C para Cortex-M4: Configuração e Uso
Este tutorial aborda, e didática, como configurar a interface I2C em microcontroladores ARM Cortex-M4
Visão geral dos microcontroladores ARM Cortex-M4Descubra os microcontroladores ARM Cortex-M4, que oferecem eficiência, controle em tempo real e recursos avançados para aplicações industriais, médicas e mais. e utilizá-la para ler dados de sensores. O foco é oferecer uma visão clara e direta, facilitando a compreensão para engenheiros, estudantes e entusiastas que desejam implementar comunicação I2C de forma eficiente e confiável
Melhores práticas de proteção contra falhas e uso de watchdog timersSaiba como implementar watchdog timers em ARM Cortex-M4 para garantir reinicializações seguras, confiabilidade e robustez em sistemas críticos. em seus projetos de firmware.
Introdução🔗
O protocolo I2C (Inter-Integrated Circuit) é amplamente utilizado em dispositivos embarcados para comunicação com sensores, displays, memórias EEPROM e diversos outros periféricos. Ele se destaca pela facilidade de conexão, pois utiliza apenas duas linhas principais:
- SCL (Serial Clock Line)
- SDA (Serial Data Line)
Em um sistema Cortex-M4
Visão geral dos microcontroladores ARM Cortex-M4Descubra os microcontroladores ARM Cortex-M4, que oferecem eficiência, controle em tempo real e recursos avançados para aplicações industriais, médicas e mais., a configuração correta do I2C permite criar soluções robustas para captura e processamento de dados de sensores, garantindo alto rendimento e baixo consumo de pinos.
Conceitos Fundamentais do I2C🔗
Antes de partir para a configuração prática, é importante relembrar alguns conceitos-chave:
1. Topologia Mestre-Escravo
O I2C opera em uma topologia em que pode haver um ou mais mestres e vários escravos. Geralmente, o microcontrolador (Cortex-M4
Visão geral dos microcontroladores ARM Cortex-M4Descubra os microcontroladores ARM Cortex-M4, que oferecem eficiência, controle em tempo real e recursos avançados para aplicações industriais, médicas e mais.) é o mestre, responsável por gerar o sinal de clock e iniciar a comunicação. Os sensores conectados atuam como escravos, respondendo aos comandos do mestre.
2. Endereçamento
Cada dispositivo escravo possui um endereço único de 7 ou 10 bits. Na prática, a forma mais comum é o endereçamento de 7 bits, que define até 128 endereços possíveis.
3. Sinais de Controle (Start e Stop)
- Start: sinal utilizado pelo mestre para indicar o início de uma transmissão.
- Stop: sinal utilizado para encerrar a transmissão.
4. Taxas de Transferência
As velocidades típicas do I2C incluem:
- Standard Mode: até 100 kHz
- Fast Mode: até 400 kHz
- Fast Mode Plus: até 1 MHz (em alguns MCUs específicos)
Essa variedade de velocidades permite adequar o I2C ao tipo de sensor e às exigências do projeto.
Configurando o I2C no Cortex-M4🔗
A configuração do I2C no Cortex-M4
Visão geral dos microcontroladores ARM Cortex-M4Descubra os microcontroladores ARM Cortex-M4, que oferecem eficiência, controle em tempo real e recursos avançados para aplicações industriais, médicas e mais. geralmente envolve a definição dos seguintes parâmetros (realizada por registradores específicos do microcontrolador ou por bibliotecas de abstração de hardware):
- Selecionar os pinos corretos para SCL e SDA.
- Ativar as resistências pull-up se necessário (o I2C requer pull-ups em ambos os sinais).
2. Clock
- Habilitar o clock do periférico I2C.
- Configurar a frequência efetiva (baud rate) de acordo com o modo desejado (100 kHz, 400 kHz, etc.).
3. Modo de Operação
- Selecionar o dispositivo como Mestre (master).
- Definir endereços/escravos quando necessário, caso o microcontrolador também assuma o papel de escravo em situações específicas.
- Configurar o método de tratamento de dados: uso de interrupções
Gerenciamento de interrupções e exceções na arquitetura ARMDescubra como o Cortex-M4 gerencia interrupções e exceções com eficiência, explorando técnicas de empilhamento automático e NVIC para sistemas embarcados. ou verificação (polling) para acompanhar eventos como transmissão concluída e recepção de dados.
Dica: Em projetos mais robustos, é comum utilizar a DMA (Direct Memory Access) para automatizar transferências de dados no I2C, reduzindo a carga de trabalho da CPU. Isso, entretanto, pode exigir configurações adicionais.
Exemplo Simplificado de Configuração em C
#include "stm32f4xx.h" // Exemplo de biblioteca de um MCU Cortex-M4
void I2C_Init(void) {
// 1. Habilitar clock do I2C e dos GPIOs correspondentes
RCC->AHB1ENR |= (1 << 1); // Exemplo: habilitar clock GPIOB
RCC->APB1ENR |= (1 << 21); // Exemplo: habilitar clock I2C2
// 2. Configurar pinos PB10 (SCL) e PB11 (SDA) em AF Mode
GPIOB->MODER &= ~((3 << (10*2)) | (3 << (11*2)));
GPIOB->MODER |= (2 << (10*2)) | (2 << (11*2)); // Alternate Function
// Selecionar função alternativa para I2C (AF4 em muitos MCUs STM32)
GPIOB->AFR[1] |= (4 << ((10-8)*4)) | (4 << ((11-8)*4));
// 3. Configurar taxas e parâmetros do I2C
I2C2->CR2 |= (16 << 0); // Exemplo: clock de 16 MHz
I2C2->CCR = 80; // Ajuste simplificado para ~100 kHz
I2C2->TRISE = 17; // Tempo de subida para modo standard
// 4. Habilitar o I2C
I2C2->CR1 |= (1 << 0); // I2C Enable
}
Acima, há um trecho exemplificativo, onde determinadas constantes e valores de registradores podem variar conforme o fabricante e a placa de desenvolvimento escolhida. O datasheet ou manual de referência do seu dispositivo Cortex-M4
Visão geral dos microcontroladores ARM Cortex-M4Descubra os microcontroladores ARM Cortex-M4, que oferecem eficiência, controle em tempo real e recursos avançados para aplicações industriais, médicas e mais. deve ser consultado para valores precisos de cada registro.
Uso de Sensores via I2C🔗
Com o I2C devidamente configurado, podemos proceder à leitura ou escrita de dados em um sensor. A forma de acesso depende do registro interno no qual se deseja ler/escrever. Em geral, o fluxo ao ler dados de um sensor via I2C consiste em:
1. Envio do Endereço do Escravo
- O mestre coloca o endereço do sensor e o bit de leitura/escrita (R/W) na linha SDA.
- Aguarda confirmação (ACK) por parte do sensor.
2. Envio do Registro Destino (para leitura de dados)
- Se o sensor possuir registros internos, envia o endereço do registro que se deseja ler.
3. Reinício (Repeated Start) e Leitura
- Reenvia o endereço do sensor com bit de leitura.
- Lê os bytes requisitados.
- Envia sinal de NACK/ACK para o sensor após cada byte.
- Envia sinal de Stop para encerrar a comunicação.
Exemplo de Função de Leitura
uint8_t I2C_ReadRegister(uint8_t sensorAddr, uint8_t reg) {
uint8_t data = 0;
// 1. Gera condição de START e envia endereço do escravo em modo de escrita
I2C2->CR1 |= (1 << 8); // START
while(!(I2C2->SR1 & (1 << 0))); // Espera o START ser gerado
// Envia endereço + bit de escrita
I2C2->DR = (sensorAddr << 1) | 0; // 0 = Write
while(!(I2C2->SR1 & (1 << 1))); // Espera ACK do sensor
// Limpa flags de SR1 e SR2 com sequência de leitura
(void) I2C2->SR1;
(void) I2C2->SR2;
// 2. Envia endereço do registro
I2C2->DR = reg;
while(!(I2C2->SR1 & (1 << 7))); // Espera a transmissão do byte
// 3. Gera condição de Repeated START e envia endereço do escravo em modo de leitura
I2C2->CR1 |= (1 << 8); // Repeated START
while(!(I2C2->SR1 & (1 << 0)));
I2C2->DR = (sensorAddr << 1) | 1; // 1 = Read
while(!(I2C2->SR1 & (1 << 1)));
(void) I2C2->SR1;
(void) I2C2->SR2;
// 4. Lê o dado
while(!(I2C2->SR1 & (1 << 6))); // Espera recebido
data = I2C2->DR;
// Envia STOP
I2C2->CR1 |= (1 << 9);
return data;
}
Esta função exemplifica a leitura de um único byte, como ocorre em boa parte dos sensores simples. Para sensores mais complexos (como módulos de 6 eixos e sensores ambientais multifuncionais), a sequência de leitura pode envolver diversos bytes e diferentes registradores.
Tabela Exemplo de Endereços Típicos
| Sensor | Endereço Padrão (7 bits) |
|---|---|
| MPU6050 (IMU) | 0x68 ou 0x69 |
| BMP280 (Pressão) | 0x76 ou 0x77 |
| BME280 (Ambiental) | 0x76 ou 0x77 |
| OLED 128x64 | 0x3C ou 0x3D |
- Obs.: O endereçamento pode variar conforme os jumpers de seleção e versões específicas do módulo.
Conclusão🔗
Ao finalizar este estudo, percebemos que a configuração do I2C em micros Cortex-M4
Visão geral dos microcontroladores ARM Cortex-M4Descubra os microcontroladores ARM Cortex-M4, que oferecem eficiência, controle em tempo real e recursos avançados para aplicações industriais, médicas e mais. exige atenção aos detalhes dos registradores, corretas definições de clock e, principalmente, cuidados na sequência de comunicação com o sensor. Uma vez implementada a configuração básica, integrar múltiplos sensores ao mesmo barramento torna-se relativamente simples, graças às características de endereçamento e ao gerenciamento através de Start/Stop repeats do protocolo.
Manter uma referência de datasheet em mãos e testar cada passo com cuidado garante uma implementação confiável
Melhores práticas de proteção contra falhas e uso de watchdog timersSaiba como implementar watchdog timers em ARM Cortex-M4 para garantir reinicializações seguras, confiabilidade e robustez em sistemas críticos.. Assim, torna-se possível desenvolver projetos que vão desde a simples leitura de um sensor de temperatura até a integração de sistemas
Procedimentos de teste e validação para sistemas críticos em Cortex-M4Aprenda técnicas de teste e validação para garantir a segurança, integridade e robustez em sistemas críticos com microcontroladores ARM Cortex-M4. complexos de monitoramento ambiental e controle de movimento, explorando todo o potencial que o I2C oferece no ecossistema do Cortex-M4
Visão geral dos microcontroladores ARM Cortex-M4Descubra os microcontroladores ARM Cortex-M4, que oferecem eficiência, controle em tempo real e recursos avançados para aplicações industriais, médicas e mais..
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação oficial da ARM para entender o Core Cortex-M e suas funcionalidades, que é fundamental para quem trabalha com o microcontrolador na implementação do I2C: developer.arm.com/documentation
- Ferramenta STM32CubeMX, que facilita a configuração de periféricos (como o I2C) e a geração de código para dispositivos STM32, demonstrando como simplificar o processo de configuração de hardware: www.st.com/en/development-tools/stm32cubemx.html
- Página oficial da Keil, útil para acessar ferramentas de desenvolvimento e recursos para programar dispositivos ARM, contribuindo indiretamente para o desenvolvimento dos projetos com Cortex-M4: www.keil.com/
- Portal da ST para microcontroladores STM32, que exemplifica bem a aplicação prática do Cortex-M4 e inclui documentação que pode ajudar na configuração do I2C para sensores: www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html
- Recursos e documentação sobre CMSIS, que auxiliam na configuração e abstração de hardware, sendo extremamente relevantes para implementar e depurar comunicação I2C no Cortex-M4: developer.arm.com/tools-and-software/embedded/cmsis

há 10 meses atrás
há 11 meses atrás
há 10 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás
há 11 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás