Curso de Microcontrolares Familia HC9S08 Artículo

Transcripción

Curso de Microcontrolares Familia HC9S08 Artículo
Curso sobre Microcontroladores
Familia HC9S08 de Freescale
Por Ing. Daniel Di Lella – EduDevices – www.edudevices.com.ar
e-mail: [email protected]
Capítulo 8.Inter – Integrated Circuit Interface – I2C
MMIIC – Multi – Master I2C.
Al igual que la interface de comunicaciones SPI, la I2C (Inter – Integrated Circuit
Interface) pertenece a las interfaces de comunicación seriales sincrónicas, o sea poseen
una línea de reloj explícita para garantizar la validez de los datos durante la
comunicación.
Una característica particular de los módulos I2C integrados dentro de los
microcontroladores Freescale de 8 bits, es que los mismos poseen diferencias
importantes de funcionamiento entre las distintas familias. Por ejemplo, el lector ha
conocido el funcionamiento en detalle del módulo I2C (MMIIC) de la familia
HC908APxx que posee la placa de personalización “PLUGIN_AP” del sistema
didáctico EDUKIT08 para trabajar con la familia de MCUs HC908. Sin embargo, en la
familia HC9S08 el módulo I2C posee algunas diferencias de manejo que lo hacen
más flexible a distintas alternativas de comunicación ante diversos dispositivos I2C
externos.
Al igual que en la familia HC908, el módulo I2C de la familia HC9S08, se denomina
MMIIC (Multi – Master IIC) ya que permite no solo ser compatible con la
tradicional interface I2C sino que también permite establecer comunicaciones en
una red del tipo “Multimaster” donde se encuentran más de un dispositivo
“Master” cuya norma original no contemplaba.
Características Principales del Módulo MMIIC en los HC9S08.
•
•
•
•
•
•
•
•
•
•
Compatible con el bus estándar I2C.
Modo de operación Multimaster.
Programación por soft de hasta 64 frecuencias diferentes de reloj seriales.
Manejo por interrupciones Byte a Byte en la transferencia de datos.
Interrupción por pérdida de arbitraje con conmutación automática del modo
master al modo slave.
Generación / Detección de las señales de START y STOP.
Interrupción por identificación de Dirección (address).
Repetición de Secuencias START.
Generación / Detección del bit de Acknowledge (Ack).
Detección de la ocupación del bus.
El módulo MMIIC puede operar hasta una velocidad de 100 KBPS teniendo en cuenta
la capacidad de carga del bus y la distancia del mismo. Al igual que la interface SPI, la
I2C ha sido diseñada para lograr comunicaciones de muy corta distancia y alta
velocidad, típicas de un sistema inter – placas o de múltiples dispositivos I2C enlazados
en una misma placa impresa. De esta forma, el módulo MMIIC de los HC9S08 puede
mantener comunicaciones a un máximo de FBUS / 20 con una carga y distancia
reducida. La capacidad máxima de carga del bus es de 400 pF limitando así la
cantidad de dispositivos conectados al mismo y la distancia total de este.
El módulo MMIIC es compatible con el estándar I2C BUS y además el módulo fue
diseñado con la capacidad de poder operar en modo “multimaster”, por lo que puede
“arbitrar” en las comunicaciones.
Además el módulo posee un divisor de frecuencia programable por soft que le permite
gran flexibilidad de selección en la velocidad de comunicación con distintas frecuencias
de BUS.
La capacidad de manejar la transferencia de información byte a byte por medio de
interrupciones permite el manejo ordenado de las comunicaciones I2C y si además se
generan interrupciones por pérdida de arbitrajes, esto facilita el manejo de un Bus con
múltiples dispositivos que pueden ser “Master” en algún momento y administrarlos de
forma eficiente.
Los módulos MMIIC poseen la detección / generación de los bits de START, STOP
y del bit de ACK y otras facilidades que permiten rápidas implementaciones de las
comunicaciones I2C.
Aplicaciones de la interface I2C.
Existe una gran variedad de dispositivos periféricos que pueden ser conectados a una
interface I2C como, por ejemplo, conversores A/D y D/A , memorias EEPROM,
sensores de temperatura, humedad, integrados de audio controlados por I2C, y
otros MCUs integrados en una red. La transferencia de información es muy sencilla
desde y hacia los diferentes dispositivos que integran el bus I2C.
Además es muy sencillo agregar un nuevo dispositivo en un bus I2C, ya que cada
nuevo dispositivo poseerá una única dirección de llamada.
La comunicación I2C se realiza por solo 2 líneas, “SCL” (Serial Clock) que constituye
la línea de reloj (clock) de la comunicación y “SDA” (Serial Data) que constituye la
línea de datos I/O para efectuar comunicaciones del tipo “half – Dúplex”.
Diagrama en bloques del módulo MMIIC de un HC9S08.
Como se puede ver en el diagrama de bloques superior, el módulo MMIIC de la familia
HC9S08 ha sido pensado como una “máquina de estados” donde la actividad en el bus
I2C inicia cambios en los estados. A continuación se verán los registros involucrados en
el módulo y como utilizarlos para realizar una comunicación.
Registro de Direccionamiento I2C (IIC1A).
El registro de direccionamiento contiene la dirección específica del módulo I2C cuando
se lo utilice en modo “Slave” (esclavo). El módulo responderá a esta dirección cuando
sea direccionado como un esclavo. Cabe hacer notar que el bit LSB (bit menos
significativo) del registro de direccionamiento no es usado porque dicho bit es utilizado
para indicar la “lectura” desde un dispositivo esclavo o la “escritura” a un esclavo.
Registro Divisor de Frecuencia (IIC1F).
Este registro contiene los bits que se utilizarán para configurar la velocidad de
comunicación del módulo o Baud Rate. En forma conjunta los bits MULT y los bits
ICR se usan para dividir la frecuencia del bus (FBUS) al valor de Baud Rate deseado en
la comunicación. Los bits ICR también controlan el tiempo de “mantenimiento” de la
señal SDA.
Por ejemplo:
•
•
•
•
•
•
•
•
•
FBUS = 8 MHZ.
MULT se configura con el valor 01 (mul = 2).
Baud Rate buscado = 100 KBPS.
I2C Baud Rate = FBUS / (mul * SCL )
100.000 = 8.000.000 / ( 2 * SCL)
SCL divider = 40.
SDA hold time = Período del Bus * SDA hold value
SDA hold time = 1/8.000.000 * 9 = 1,125 uS.
Si el valor de mantenimiento (hold time) de SDA no fuera aceptable, el valor de
MULT puede ser cambiado para cambiar el ICR, esto resulta en un tiempo diferente
de mantenimiento de SDA.
Función de cada uno de los bits del registro divisor de frecuencia IIC1F.
Tabla parcial de los distintos valores de ICR / SCL Divider y SDA Hold Time.
Registro de Control I2C (IIC1C).
Este registro contiene los bits de configuración para el control de módulo I2C. Por
ejemplo, se puede habilitar el módulo I2C, habilitar la interrupción, el modo de
operación “Master” (Amo) o “Slave” (Esclavo), modo de operación en Recepción o
Transmisión y si se activa el bit de “ACK” (Acknowledge) o no.
Registro de Estado del I2C (IIC1S).
El registro de estado (IIC1S) del módulo I2C muestra los distintos bits de estado
durante una comunicación I2C.
Registro de Datos del I2C (IIC1D).
El registro de Datos se usa en el modo “Master” para transmitir datos hacia el
exterior. Es también importante hacer notar que en modo “Master” una recepción se
inicia por medio de la lectura de este registro. En modo “Slave”, la información entrante
se coloca en este registro para ser leída. El programa debe leer desde este registro y
luego efectuar el almacenamiento del dato leído.
Continuará .......
Nota de Redacción: El lector puede descargar este capítulo y capítulos anteriores del
curso desde la sección “Artículos” (Curso_HC9S08) en el sitio web de EduDevices
(www.edudevices.com.ar )

Documentos relacionados