Cómo y por qué leer hojas de datos si los microcontroladores son tu hobby

Cómo y por qué leer hojas de datos si los microcontroladores son tu hobby

La microelectrónica es un hobby de moda en los últimos años gracias al mágico Arduino. Pero aquí está el problema: con suficiente interés, puedes superar rápidamente DigitalWrite(), pero qué hacer a continuación no está del todo claro. Los desarrolladores de Arduino se han esforzado mucho en reducir la barrera de entrada a su ecosistema, pero fuera de él todavía hay un bosque oscuro de circuitos hostiles que son inaccesibles para el aficionado.

Por ejemplo, hojas de datos. Parece que lo tienen todo, tómalo y úsalo. Pero es evidente que sus autores no se proponen la tarea de popularizar los microcontroladores; A veces pareceque abusan deliberadamente de términos y abreviaturas incomprensibles al describir cosas simples para confundir al máximo a los no iniciados. Pero no todo es tan malo: si se quiere, el ataúd se abre.

En este artículo compartiré la experiencia de un especialista en humanidades que se comunica con hojas de datos con fines de hobby. El texto está destinado a aficionados que han crecido con pantalones Arduino; supone cierta comprensión de los principios de funcionamiento de los microcontroladores.

Empezaré con lo tradicional.

Parpadeando un LED en Arduino

E inmediatamente el código:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"¿Qué es esto? – preguntará un lector sofisticado. – ¿Por qué estás escribiendo algo en el registro de entrada PINB? ¡Es sólo para leer! En realidad, documentación de arduino, como la mayoría de los artículos educativos en Internet, afirma que este registro es de sólo lectura. Yo mismo lo pensé hasta que lo releí. ficha de datos a Atmega328p, preparando este artículo. Y ahí:

Cómo y por qué leer hojas de datos si los microcontroladores son tu hobby

Esta es una funcionalidad relativamente nueva, no estaba en Atmega8, no todos la conocen o no se menciona por razones de compatibilidad con versiones anteriores. Pero es bastante adecuado para demostrar la idea de que vale la pena leer las hojas de datos para poder utilizar todas las capacidades del chip, incluidas las poco conocidas. Y esta no es la única razón.

¿Por qué más leer hojas de datos?

Por lo general, los ingenieros de Arduino, después de haber jugado lo suficiente con LED y AnalogWrites, comienzan a conectar todo tipo de módulos y chips a la placa, para los cuales ya existen bibliotecas escritas. Tarde o temprano aparece una biblioteca que no funciona como debería. Entonces el aficionado empieza a tocarlo para arreglarlo, y luego...

Y allí sucede algo completamente incomprensible, por lo que tienes que ir a Google, leer numerosos tutoriales, extraer partes del código adecuado de alguien y finalmente lograr tu objetivo. Esto da una poderosa sensación de logro, pero en realidad el proceso es como reinventar la rueda aplicando ingeniería inversa a una motocicleta. Además, la comprensión de cómo funciona esta bicicleta no aumenta. Lo sé porque yo mismo hice esto durante bastante tiempo.

Si en lugar de esta apasionante actividad hubiera pasado un par de días estudiando la documentación de Atmega328, habría ahorrado una enorme cantidad de tiempo. Después de todo, este es un microcontrolador bastante simple.

Por lo tanto, es necesario leer las hojas de datos al menos para imaginar cómo funciona generalmente el microcontrolador y qué puede hacer. Y además:

  • para comprobar y optimizar las bibliotecas de otras personas. A menudo están escritos por los mismos aficionados que reinventan la rueda; o, por el contrario, los autores deliberadamente los hacen excesivamente infalibles. Que sea tres veces más grande y más lento, pero definitivamente funcionará;

  • poder utilizar chips en un proyecto para el que nadie ha escrito una biblioteca;

  • para que le resulte más fácil migrar de una línea MK a otra;

  • para finalmente optimizar su código antiguo, que no encajaba en Arduino;

  • aprender a controlar cualquier chip directamente a través de sus registros, sin molestarse en estudiar la estructura de sus bibliotecas, si las hubiera.

¿Por qué escribir en los registros directamente cuando hay HAL y LL?

Glosario
HAL, capa de alta abstracción – una biblioteca para controlar un microcontrolador con un alto nivel de abstracción. Si necesita utilizar la interfaz SPI1, simplemente configure y habilite SPI1 sin pensar en qué registros son responsables de qué.
LL, API de bajo nivel – una biblioteca que contiene macros o estructuras con direcciones de registro, lo que le permite acceder a ellas por su nombre. DDRx, PORTx, PINx en Atmega son LL.

En los comentarios sobre Habré surgen regularmente disputas sobre el tema “HAL, LL o registros”. Sin pretender tener acceso al conocimiento astral, simplemente compartiré mi experiencia y mis pensamientos de aficionado.

Después de descubrir más o menos Atmega y leer artículos sobre las maravillas de STM32, compré media docena de placas diferentes: Discovery y Blue Pills, e incluso solo chips para mis productos caseros. Todos ellos acumularon polvo en una caja durante dos años. A veces me decía a mí mismo: "Ya está, a partir de este fin de semana estoy dominando STM", lancé CubeMX, generé una configuración para SPI, miré el muro de texto resultante, generosamente adornado con derechos de autor de STM, y decidí que de alguna manera esto también era posible. mucho.

Cómo y por qué leer hojas de datos si los microcontroladores son tu hobby

Por supuesto, puedes descubrir lo que escribió CubeMX aquí. Pero al mismo tiempo está claro que recordar todas las palabras y luego escribirlas a mano no es realista. Y para depurar esto, si accidentalmente olvido marcar una casilla en el Cubo, está totalmente bien.

Han pasado dos años, todavía me estoy lamiendo los labios. Buscador de MCU ST para todo tipo de papas fritas sabrosas, pero más allá de mi comprensión, y accidentalmente me encontré maravilloso artículo, aunque sobre STM8. Y de repente Me di cuenta de que todo este tiempo había estado llamando a una puerta abierta: los registros del STM están dispuestos de la misma forma que los de cualquier otro MK, y no es necesario el Cube para trabajar con ellos. ¿Era siquiera posible?...

HAL y específicamente STM32CubeMX es una herramienta para ingenieros profesionales que trabajan en estrecha colaboración con chips STM32. La característica principal es un alto nivel de abstracción, la capacidad de migrar rápidamente de una MCU a otra e incluso de un núcleo a otro, mientras permanece dentro de la línea STM32. Los aficionados rara vez encuentran tales problemas: nuestra elección de microcontroladores, por regla general, se limita al surtido de AliExpress y, a menudo, migramos entre chips radicalmente diferentes: pasamos de Atmega a STM, de STM a ESP, o cualquier cosa nueva que nuestros amigos chinos tirarnos. HAL no ayudará aquí y estudiarlo consumirá mucho tiempo.

LL permanece, pero desde allí hasta los registros hay medio paso. Personalmente, me resulta útil escribir mis macros con direcciones de registro: estudio la hoja de datos con más atención, pienso en lo que necesitaré en el futuro y en lo que definitivamente no necesitaré, estructuro mejor mis programas y, en general, la superación ayuda a memorizar.

Además, hay un matiz con el popular STM32F103: tiene dos versiones LL incompatibles, una oficial de STM y la segunda de Leaf Labs, utilizada en el proyecto STM32duino. Si escribes una biblioteca de código abierto (y yo tenía exactamente tal tarea), deberás realizar dos versiones o acceder directamente a los registros.

Finalmente, eliminar LL, en mi opinión, facilita la migración, especialmente si la planifica desde el principio del proyecto. Ejemplo exagerado: escribamos Arduino flash en Atmel Studio sin LL:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

Para que este código haga parpadear el LED en una placa china con STM8 (de ST Visual Desktop), basta con cambiar dos direcciones en ella:

#define DDR_B 0x5007
#define OUT_B 0x5005

Sí, uso la función de conectar el LED en una placa específica, parpadeará muy lentamente, ¡pero sucederá!

¿Qué tipos de hojas de datos existen?

En artículos y foros, tanto en ruso como en inglés, por "hojas de datos" se entiende cualquier documentación técnica para chips, y hago lo mismo en este texto. Formalmente, son sólo un tipo de documentación de este tipo:

Datasheet – Características de actuación, características tácticas y técnicas. Obligatorio para cualquier componente electrónico. Es útil tener información general a mano, pero no hay mucho que leer atentamente. Sin embargo, los chips más simples suelen limitarse a una hoja de datos para no generar documentos innecesarios; en este caso Manual de referencia está incluido aquí.

Manual de referencia – las instrucciones en sí, un libro saludable de más de 1000 páginas. Se describe en detalle el funcionamiento de todo lo que está metido en el chip. El documento principal para dominar el microcontrolador. A diferencia de ficha técnica, las instrucciones están escritas para una amplia gama de MK; contienen mucha información sobre periféricos que no están disponibles en su modelo específico.

Manual de programación o Manual del juego de instrucciones – instrucciones para comandos únicos del microcontrolador. Diseñado para quienes programan en lenguaje ensamblador. Los autores del compilador lo utilizan activamente para optimizar el código, por lo que en el caso general no lo necesitaremos. Pero mirar aquí es útil para una comprensión general, para algunos comandos específicos como salir de una interrupción, así como para usar activamente el depurador.

Nota de aplicación – consejos útiles para resolver problemas específicos, a menudo con ejemplos de código.

Hoja de erratas – descripción de casos de comportamiento de chip no estándar con opciones de solución, si las hubiera.

¿Qué hay en las hojas de datos?

Directamente en Datasheet Es posible que necesitemos las siguientes secciones:

Resumen del dispositivo – la primera página de la hoja de datos describe brevemente el dispositivo. Muy útil en situaciones en las que encontraste un chip en alguna parte (lo viste en una tienda, lo soldaste, encontraste una mención) y quieres entender qué es.

Descripción general – una descripción más detallada de las capacidades de los chips de la línea.

Pinouts – diagramas de distribución de pines para todos los paquetes de chips posibles (qué pin está en qué pata).

Pin Descripción – descripción del propósito y capacidades de cada pin.

Mapa de memoria – Es poco probable que necesitemos un mapa de direcciones en la memoria, pero a veces también incluye una tabla de direcciones de bloques de registros.

Registrar Mapa – la tabla de direcciones de los bloques de registro, por regla general, se encuentra en la hoja de datos y en Manual de referencia – sólo turnos (compensaciones de direcciones).

Características eléctricas – en esta sección nos interesa principalmente Índices absolutos máximos, enumerando las cargas máximas por chip. A diferencia del indestructible Atmega328p, la mayoría de los MK no permiten conectar cargas importantes a los pines, lo que se convierte en una sorpresa desagradable para los arduinistas.

Información del paquete – dibujos de casos disponibles, útiles a la hora de diseñar tus placas.

Manual de referencia Estructuralmente consta de secciones dedicadas a periféricos específicos indicados en su título. Cada capítulo se puede dividir en tres partes:

General, Introducción, Caracteristicas – visión general de las capacidades periféricas;

Descripción funcional, Guía de uso o simplemente el bloque principal de la sección: una descripción textual detallada de los principios del dispositivo periférico y cómo usarlo;

Registros – descripción de los registros de control. En casos simples como GPIO o SPI, esto puede ser suficiente para comenzar a usar los periféricos, pero a menudo todavía hay que leer las partes anteriores.

Cómo leer hojas de datos

Las hojas de datos, por costumbre, te asustan por su volumen y abundancia de palabras incomprensibles. De hecho, no todo da tanto miedo si conoces algunos trucos.

Establecer buen lector de PDF. Las hojas de datos están escritas siguiendo la gloriosa tradición de las instrucciones en papel; son excelentes para imprimir, insertar con marcapáginas de plástico y coser. El hipertexto en ellos se observa en pequeñas cantidades. Afortunadamente, al menos la estructura del documento está diseñada con marcadores, por lo que es muy necesario un lector adecuado y con fácil navegación.

La hoja de datos no es el libro de texto de Stroustrup; contiene no es necesario leer todo. Si siguió el consejo anterior, simplemente busque la sección deseada en la barra de marcadores.

Hojas de datos, especialmente Manuales de referencia, puede describir las capacidades no de un chip específico, sino toda la linea. Esto significa que la mitad, o incluso dos tercios de la información, no son relevantes para su chip. Antes de estudiar los registros TIM7, consulte Descripción general, ¿lo tienes?

Para saber Inglés suficiente para nivel básico. Las hojas de datos constan la mitad de términos desconocidos para el hablante nativo promedio y la otra mitad de estructuras de conexión simples. También hay excelentes hojas de datos en chino inglés, donde la mitad también son términos y la segunda mitad son un conjunto aleatorio de palabras.

Si usted cumple palabra desconocida, no intentes traducirlo usando un diccionario inglés-ruso. Si estas confundido histéresis, entonces la traducción "histéresis" no le hará sentir más cálido. Utilice Google, Stack Overflow, Wikipedia, foros, donde estará el concepto requerido. explicado en palabras simples con ejemplos.

La mejor manera de entender lo que lees es comprobar en acción. Por lo tanto, tenga a mano la placa de depuración con la que se está familiarizando, o mejor dos, en caso de que aún no haya entendido algo y haya visto un humo mágico.

Es un buen hábito tener su hoja de datos a mano cuando leyendo el tutorial de alguien o estudiar la biblioteca de otra persona. Es muy posible que encuentre en él una solución más óptima a su problema. Y viceversa: si no puede entender en la hoja de datos cómo funciona realmente el registro, búsquelo en Google: lo más probable es que alguien ya haya descrito todo en palabras simples o haya dejado un código claro en GitHub.

Glosario

Algunas palabras y símbolos útiles que le ayudarán a acostumbrarse rápidamente a las hojas de datos. Lo que recordé en los últimos días, adiciones y correcciones son bienvenidas.

Electricidad
Vcc, Cierto – “más”, comida
vs, Vee – “menos”, tierra
corriente - actual
voltaje - Voltaje
para hundir la corriente – trabajar como “tierra” para carga externa
para obtener corriente – alimentación de carga externa
pin de fuente/disipador alto – pasador con mayor “tolerancia” a la carga

IO
H, alto – en el pin Vcc
L, bajo – en el pin Vss
Alta impedancia, Hola-Z, flotante – no hay nada en el pasador, “alta resistencia”, es prácticamente invisible para el mundo exterior.
tirón débil, débil tirar hacia abajo – resistencia pull-up/pull-down incorporada, aproximadamente equivalente a 50 kOhm (ver hoja de datos). Se utiliza, por ejemplo, para evitar que el pin de entrada cuelgue en el aire, provocando falsas alarmas. Débil - porque es fácil "interrumpirlo".
empujar tirar – modo de salida de pin, en el que cambia entre Alta и Baja – SALIDA normal de Arduino.
drenaje abierto – designación del modo de salida en el que el pin puede ser BajaO Alta impedancia/flotante. Además, casi siempre no se trata de un drenaje abierto “real”; hay diodos protectores, resistencias y demás. Esta es simplemente una designación para el modo tierra/ninguno.
verdadero drenaje abierto - pero se trata de un verdadero desagüe abierto: el pasador conduce directamente al suelo si está abierto, o permanece en el limbo si está cerrado. Esto significa que, si es necesario, se puede pasar a través de él un voltaje superior a Vcc, pero el máximo aún está especificado en la hoja de datos en la sección Clasificaciones/voltaje máximo absoluto.

Interfaces
en series – conectados en serie
encadenar – ensamblar chips en una cadena mediante una conexión en serie, aumentando el número de salidas.
Turno – cambio, generalmente denota un pequeño cambio. Respectivamente, para cambiar en и desplazarse – recibir y transmitir datos bit a bit.
pestillo – un pestillo que cubre el búfer mientras los bits se desplazan a través de él. Cuando se completa la transferencia, la válvula se abre y las brocas comienzan a funcionar.
fichar – realizar una transferencia bit a bit, desplazar todos los bits a los lugares correctos.
doble búfer, registro de sombra, registro de precarga – designaciones históricas, cuando el registro debe poder aceptar nuevos datos, pero conservarlos hasta algún momento. Por ejemplo, para que PWM funcione correctamente, sus parámetros (ciclo de trabajo, frecuencia) no deben cambiar hasta que finalice el ciclo actual, pero ya se pueden transferir nuevos parámetros. En consecuencia, los actuales se mantienen en registro de sombra, y otros nuevos caen en registro de precarga, escribiéndose en el registro del chip correspondiente.

Cualquier cosa
preescalador – preescalador de frecuencia
para establecer un poco – establecer el bit en 1
borrar/restablecer un poco – restablecer el bit a 0 (reajustar – Función de hoja de datos STM)

¿Qué sigue

En general, aquí se planeó una parte práctica con una demostración de tres proyectos sobre STM32 y STM8, realizados específicamente para este artículo usando hojas de datos, con bombillas, SPI, temporizadores, PWM e interrupciones:

Cómo y por qué leer hojas de datos si los microcontroladores son tu hobby

Pero hay mucho texto, por lo que los proyectos se envían a la segunda parte.

La habilidad de leer hojas de datos le ayudará con su pasatiempo, pero es poco probable que reemplace la comunicación en vivo con otros aficionados en foros y chats. Para ello, lo primero que necesitas es mejorar tu inglés. Por tanto, quienes terminen de leer recibirán un premio especial: dos lecciones gratuitas en Skyeng con el primer pago mediante el código. HABR2.

Fuente: habr.com

Añadir un comentario