El bus UNI / O / ˌ Ju n i oʊ / es un asíncrono serial bus creado por Microchip Technology para la comunicación de baja velocidad en sistemas embebidos . [1] El bus utiliza una configuración maestro / esclavo , que requiere una señal para pasar datos entre dispositivos. Los primeros dispositivos compatibles con el bus UNI / O se lanzaron en mayo de 2008.
Interfaz
El bus UNI / O requiere una señal lógica:
- SCIO - Reloj en serie, entrada / salida de datos [2]
Solo se permite un dispositivo maestro por bus, pero se pueden conectar varios dispositivos esclavos a un solo bus UNI / O. Los esclavos individuales se seleccionan a través de una dirección de 8 bits a 12 bits incluida en la sobrecarga del comando .
Ambos dispositivos maestros y esclavos utilizan un tri-formulable , push-pull I / O pin para conectarse a SCIO, con el pasador de ser colocado en una alta impedancia estado cuando no conducir el autobús. Debido a que se utilizan salidas push-pull, el controlador de salida en los dispositivos esclavos tiene una limitación de corriente para evitar que se produzcan altas corrientes en el sistema durante las colisiones de bus.
El estado inactivo del bus UNI / O es lógicamente alto . Se puede usar una resistencia pull-up para asegurar que el bus permanezca inactivo cuando ningún dispositivo está impulsando el SCIO, pero no es necesario para su funcionamiento. [3]
Codificación de datos
Codificación de bits
Las señales de reloj y datos se combinan y se comunican en el bus a través de la codificación Manchester . Esto significa que cada bit de datos se transmite en un período de tiempo fijo (denominado " período de bit ").
La especificación UNI / O establece ciertas reglas sobre el período de bits:
- Lo determina el maestro.
- Los esclavos deben sincronizarse con el maestro para recuperar el período de bits durante el encabezado de inicio .
- Puede estar entre 10 µs y 100 µs (correspondiente a una velocidad binaria de 100 kbit / sa 10 kbit / s, respectivamente).
- Solo es necesario fijarlo dentro de una operación de bus único (para operaciones de bus nuevas, el maestro puede elegir un período de bit diferente).
De acuerdo con la codificación Manchester, el valor del bit se define mediante una transición de señal en la mitad del período de bit. UNI / O utiliza la convención IEEE 802.3 para definir valores 0 y 1 :
- Una transición de alto a bajo significa un 0 .
- Una transición de bajo a alto significa un 1 .
Los períodos de bits ocurren uno tras otro, sin que se permita ningún retraso entre períodos de bits.
Palabras de datos
UNI / O utiliza palabras de datos de 8 bits para la comunicación. Los bytes se transmiten primero en msb .
Reconocer secuencia
Para facilitar la detección de errores , se agrega una "secuencia de reconocimiento " de 2 bits de ancho al final de cada byte de datos transmitido. El primer bit se denomina "reconocimiento maestro" (abreviado como "MAK") y siempre lo genera el maestro. El segundo bit, llamado "reconocimiento de esclavo" (abreviado como "SAK"), siempre lo genera el esclavo.
El bit MAK se utiliza de la siguiente manera:
- El maestro transmite un bit 1 (un MAK ) para indicar al esclavo que la operación del bus continuará.
- El maestro transmite un bit 0 (un NoMAK ) para indicar que el byte anterior fue el último byte para esa operación de bus.
El bit SAK se utiliza de la siguiente manera:
- Una vez que se ha transmitido una dirección de dispositivo completa (y se ha seleccionado un esclavo válido), si el byte de datos anterior y el bit MAK posterior se recibieron correctamente, el esclavo transmite un bit 1 (un SAK ).
- Si ocurre un error, el esclavo se apaga automáticamente e ignora la comunicación adicional hasta que se recibe un pulso de espera. En este escenario, no se transmitirá nada durante el período de bit SAK. El maestro puede detectar esta transición faltante y se considera un bit NoSAK .
Estructura de mando
Pulso en espera
UNI / O define un pulso de señal, llamado "pulso en espera", que puede ser generado por el maestro para forzar a los dispositivos esclavos a un estado de reinicio (denominado "modo en espera"). Para generar un pulso en espera, el maestro debe conducir el bus a un nivel lógico alto durante un mínimo de 600 µs.
Se requiere generar un pulso de espera bajo ciertas condiciones:
- Antes de iniciar un comando al seleccionar un nuevo dispositivo (incluso después de un evento POR / BOR)
- Si un comando se completa sin errores, se puede iniciar un nuevo comando para el mismo dispositivo sin generar un pulso de espera.
- Después de que se detecta un error
Encabezado de inicio
El encabezado de inicio es una secuencia de bytes especial definida por la especificación UNI / O y se utiliza para iniciar un nuevo comando. El encabezado de inicio consta de los siguientes elementos:
- El maestro conduce el bus a nivel bajo durante un mínimo de 5 µs.
- El maestro emite un byte de datos 0x55 .
- Los dispositivos esclavos miden el tiempo necesario para recibir el byte 0x55 contando las transiciones de señal. Luego, los esclavos utilizan este tiempo para determinar el período de bit y sincronizar con el maestro.
- El maestro emite un 1 para el bit MAK.
- Los dispositivos esclavos no responden durante el bit SAK que sigue al encabezado de inicio. Esto es para evitar colisiones de bus que ocurrirían si todos los dispositivos esclavos intentaran responder al mismo tiempo.
Dirección del dispositivo
Después de que se haya transmitido el encabezado de inicio, el maestro debe transmitir una dirección de dispositivo para seleccionar el dispositivo esclavo deseado para la operación actual. Una vez que se ha enviado la dirección del dispositivo, se requiere que cualquier dispositivo esclavo con una dirección diferente a la especificada se apague e ignore todas las comunicaciones posteriores hasta que se reciba un pulso de espera.
UNI / O permite direcciones de dispositivo de 8 y 12 bits. El direccionamiento de 8 bits ofrece un mejor rendimiento de datos debido a una menor sobrecarga de comandos, mientras que el direccionamiento de 12 bits permite que existan más esclavos con un código de familia común en un solo bus. Cuando se diseña un dispositivo esclavo, el diseñador debe elegir qué esquema de direccionamiento utilizar.
Direccionamiento de 8 bits
Para el direccionamiento de 8 bits, la dirección completa del dispositivo se transmite en un solo byte. Los 4 bits más significativos indican el "código de familia", que está definido por Microchip en la especificación del bus UNI / O. Los 4 bits menos significativos indican el código del dispositivo. El código de dispositivo permite utilizar varios dispositivos esclavos con un código de familia común en el mismo bus. El código del dispositivo puede ser fijado para un esclavo dado o personalizable por el usuario. La elección de un código de dispositivo y cómo se puede personalizar (si es necesario) son responsabilidad del diseñador del dispositivo esclavo.
Los códigos de familia actuales para dispositivos de 8 bits, al 22 de noviembre de 2009, [1] son los siguientes:
Código de la Familia | Descripción |
---|---|
′ 0000 ′ | Reservado |
′ 0011 ′ | Controladores de pantalla |
′ 0100 ′ | Expansores de puertos de E / S |
′ 1000 ′ | Codificadores de frecuencia / cuadratura / PWM , relojes en tiempo real |
′ 1001 ′ | Sensores de temperatura |
′ 1010 ′ | EEPROM |
′ 1011 ′ | Dispositivos de cifrado / autenticación |
′ 1100 ′ | Convertidores DC / DC |
′ 1101 ′ | Convertidores A / D |
′ 1111 ′ | Dispositivos direccionables de 12 bits |
Direccionamiento de 12 bits
Para el direccionamiento de 12 bits, la dirección del dispositivo se envía en dos bytes. Los 4 bits más significativos del primer byte (que corresponderían al código de familia en el direccionamiento de 8 bits) se establecen en ′ 1111 ′. Los siguientes 4 bits son el código de familia para la dirección de 12 bits y el segundo byte de la dirección es un código de dispositivo de 8 bits de ancho. El código de dispositivo sigue las mismas pautas de definición que con el direccionamiento de 8 bits.
Debido a que el dispositivo esclavo especificado no se selecciona hasta que se hayan recibido ambos bytes de la dirección del dispositivo, se producirá un NoSAK durante la secuencia de reconocimiento que sigue al primer byte de dirección del dispositivo.
Los códigos de familia actuales para dispositivos de 12 bits, al 22 de noviembre de 2009, [1] son los siguientes:
Código de la Familia | Descripción |
---|---|
′ 0000 ′ | Reservado |
′ 1111 ′ | Reservado |
Byte de comando
Una vez que el maestro ha transmitido la dirección del dispositivo y seleccionado un esclavo individual, el maestro debe transmitir el valor de 8 bits para que el esclavo ejecute el comando específico. Los comandos disponibles los determina el diseñador de cada dispositivo esclavo y variarán de esclavo a esclavo, por ejemplo, una EEPROM en serie probablemente tendrá comandos diferentes a los de un sensor de temperatura. El diseñador del dispositivo esclavo también determinará si y cuántos bytes de datos son necesarios para la ejecución de un comando. Si se necesitan bytes de datos, el maestro o el esclavo los transmiten (según el tipo de comando) después del byte de comando.
La comunicación continuará hasta que el maestro transmita un 0 (NoMAK) durante la secuencia de reconocimiento o hasta que ocurra un error. Suponiendo que no se produzcan errores, esto significa que los comandos pueden continuar indefinidamente si el maestro así lo desea.
Referencias
- ^ a b c Especificación de bus UNI / O (PDF) , consultado el 22 de noviembre de 2009
- ^ 1K-16K UNI / O Serial EEPROM Family Data Sheet (PDF) , consultado el 21 de octubre de 2009
- ^ AN1194, uso recomendado de Microchip UNI / O Bus-Compatible EEPROMs serie (PDF) , recuperada 2009-10-21
enlaces externos
- Especificación de bus UNI / O - Microchip