Principio de interfaz SPI y configuración del Internet de las cosas integrado
Este experimento utiliza el chip W25Q64
W25Q64 es un producto SPI FLASH de gran capacidad lanzado por Winbond Company. Su capacidad es de 64 MB. La familia de dispositivos 25Q supera con creces los dispositivos flash serie convencionales en términos de flexibilidad y rendimiento. W25Q64 divide la capacidad de 8 M bytes en 128 bloques, cada bloque tiene un tamaño de 64 K bytes y cada bloque se divide en 16 sectores, cada sector tiene un tamaño de 4 K bytes. La unidad mínima de borrado de W25Q64 es un sector, es decir, se deben borrar 4K bytes cada vez. Por lo tanto, es necesario abrir un área de caché de al menos 4K para W25Q64, lo que requiere que el chip tenga más de 4K SRAM para funcionar bien.
W25Q64 tiene ciclos de borrado y escritura de hasta 10 W, puede almacenar datos por hasta 20 años, admite voltajes de 2,7 ~ 3,6 V, admite SPI estándar y también admite SPI de salida dual/cuádruple. El reloj SPI máximo puede alcanzar los 80Mhz.
1. Principio de la interfaz SPI
(1) Descripción general
Bus de comunicación síncrono, full-duplex y de alta velocidad.
Full dúplex: puede enviar y recibir al mismo tiempo, requiere 2 pines
Sincronización: requiere pin de reloj
Pin de selección de chip: conveniente para un SPI múltiple Se pueden conectar dispositivos a la interfaz.
Un total de cuatro pines.
(2) Diagrama conciso de la estructura interna de SPI
MISO: entrada cuando actúa como host, salida cuando actúa como esclavo
MOSI: salida cuando actúa como host, entrada cuando actúa como esclavo
Tanto el maestro como el esclavo tienen un registro de desplazamiento. Bajo el control del mismo reloj, el bit más alto del maestro se mueve al bit más alto de. el esclavo, y al mismo tiempo el bit más alto del esclavo se mueve hacia Avanzar un bit hasta el bit más bajo del host. Si el maestro y el esclavo intercambian un bit bajo el control de un reloj, entonces se intercambiarán 8 bits bajo el control de 8 relojes. El resultado final es el intercambio completo de datos en los dos registros de desplazamiento.
Bajo el control de 8 relojes, se intercambian los dos bytes del maestro y el esclavo, es decir, cuando el maestro envía un byte de 8 bits al esclavo, el esclavo también envía 8 bits. al maestro se devuelven 8 bits, que es un byte.
(3) Diagrama de bloques de la interfaz SPI
La parte izquierda de arriba muestra cómo transmitir datos bajo control de reloj. La parte derecha es la unidad de control, incluido el generador de velocidad en baudios en la parte inferior. izquierda.
(4) Resumen del principio de funcionamiento de SPI
(5) Características de SPI
(6) Manejo de pies de selección (NSS)
Dos comunicaciones SPI primero tienen 2 líneas de datos, una línea de reloj y una línea de selección de chip. El chip SPI solo funciona cuando la selección de chip está baja. El pin de selección de chip puede ser el pin de selección de chip especificado por SPI, o puede. seleccione cualquier puerto IO como pin de selección del chip a través del software. La ventaja de esto es que, por ejemplo, se conectan varios dispositivos a una interfaz SPI. Por ejemplo, se conectan 4 dispositivos, el segundo usa PA2 y el tercero usa PA3. El cuarto usa PA4 como selección de chip. Cuando nos comunicamos con el segundo dispositivo, solo necesitamos seleccionar la segunda selección de chip, por ejemplo, bajarla y las selecciones de chip de otros dispositivos se elevarán. una interfaz SPI que se puede conectar a un dispositivo SPI, que se implementa en la placa de desarrollo del acorazado a través de este método.
(7) Fase y polaridad de la señal de reloj
La fase y polaridad de la señal de reloj están determinadas por los bits CPOL y CPHA del registro CR.
CPOL: Polaridad del reloj, establece el nivel de estado inactivo del reloj cuando no hay transmisión de datos. Cuando CPOL se establece en 0, el pin SCK está bajo cuando está inactivo. Cuando CPOL se establece en 1, el pin SCK permanece alto cuando está inactivo.
CPHA: La fase del reloj establece el flanco de la señal del reloj en el que se recopilan los datos
Cuando CPHA=1: en el segundo flanco de la señal del reloj
CPOL =1, CPHA=1,
CPOL=1 significa que la señal del reloj es de nivel alto cuando no hay transmisión de datos, es decir, cuando está inactivo. Si CPHA = 1, entonces los datos se recopilan en el segundo flanco de la señal del reloj, que es el flanco ascendente.
CPOL= 0, CPHA=1, CPOL=0 significa que la señal del reloj es de nivel bajo cuando no hay transmisión de datos, es decir, cuando está inactivo.
Si CPHA=1, entonces los datos se recopilan en el segundo flanco de la señal del reloj, que es el flanco descendente.
Cuando CPHA=0: en el primer flanco de la señal de reloj
CPOL=1, CPHA=0,
CPOL=1 significa que la señal de reloj no está presente El estado es alto durante la transmisión de datos, es decir, cuando está inactivo. Si CPHA = 1, entonces los datos se recopilan en el primer flanco de la señal del reloj, que es el flanco descendente.
CPOL= 0, CPHA=0, CPOL=0 significa que la señal del reloj es de nivel bajo cuando no hay transmisión de datos, es decir, cuando está inactivo.
Si CPHA=1, entonces los datos se recopilan en el primer flanco de la señal del reloj, que es el flanco ascendente.
¿Por qué es necesario configurar estos dos parámetros?
Porque la fase del reloj y la polaridad del periférico esclavo SPI tienen requisitos estrictos. Entonces necesitamos configurar la fase y la polaridad del host de acuerdo con la fase del reloj y la polaridad del periférico seleccionado. Debe coincidir con la máquina esclava.
(8) Formato de marco de datos e indicadores de estado
Formato de marco de datos: según la configuración del bit LSBFIRST en el registro CR1, los datos pueden ser MSB primero o LSB primero.
Según el bit DEF del registro CR1, cada trama de datos puede ser de 8 o 16 bits.
(9) Interrupción SPI
(10) Configuración de pines SPI (3 SPI)
Configuración del modo de funcionamiento de los pines
Los pines deben configurarse según esta tabla.
2. Configuración de la función de la biblioteca de registros SPI
(1) Registros de uso común
(2) Funciones de la biblioteca relacionadas con SPI
La interfaz SPI de STM32 se puede configurar para admitir SPI Protocolo o admite protocolo de audio I2S. El valor predeterminado es el modo SPI, que se puede cambiar al modo I2S mediante software.
Funciones de uso común:
1. void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef*
SPI_InitStruct //Inicialización de SPI
4. void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq,
FunctionalState NewState); //Transferir datos a través de DMA
5. void SPI_I2S_SendData (SPI_TypeDef* SPIx, uint16_t Data); //Enviar datos
6. uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx); //Recibir datos
7. void SPI_DataSizeConfig(SPI_TypeDef* SPIx) , uint16_t SPI_DataSize);
//Establece si los datos son de 8 o 16 bits
8. Varias otras funciones de estado
void SPI_Init(SPI_TypeDef) * SPIx, SPI_InitTypeDef *
SPI_InitStruct); //Inicialización de SPI
Hay muchas variables miembro de estructura Aquí seleccionamos algunas variables miembro importantes para explicar:
El primer parámetro SPI_Direction se utiliza para configurar el método de comunicación SPI. Se puede seleccionar como transmisión semidúplex, dúplex completo y recepción en serie. Aquí elegimos el modo dúplex completo.
SPI_Direction_2Lines_FullDuplex.
El segundo parámetro SPI_Mode se utiliza para configurar el modo maestro-esclavo de SPI. Aquí lo configuramos en el modo host SPI_Mode_Master. Por supuesto, también puede elegir el modo esclavo si es necesario.
SPI_Mode_Slave.
El tercer parámetro SPI_DataSiz es una selección de formato de trama de 8 o 16 bits. Aquí estamos para la transmisión de 8 bits, seleccione SPI_DataSize_8b.
El cuarto parámetro SPI_CPOL se utiliza para configurar la polaridad del reloj. Configuramos el estado inactivo del reloj de sincronización en serie en un nivel alto, por lo que elegimos SPI_CPOL_High.
El quinto parámetro SPI_CPHA
se utiliza para configurar la fase del reloj, es decir, para seleccionar a qué flanco de transición (ascendente o descendente) del reloj de sincronización en serie se muestrean los datos. recopile el primer o segundo borde, aquí elegimos el segundo borde de transición, así que seleccione
SPI_CPHA_2Edge
El sexto parámetro SPI_NSS establece la señal NSS por hardware (pin NSS) o control de software, aquí controlamos la clave NSS a través del software en lugar del control automático del hardware, por lo que se selecciona SPI_NSS_Soft.
El séptimo parámetro SPI_BaudRatePrescaler es muy crítico. Es para establecer el valor del preescalador de velocidad de baudios SPI, que es el parámetro que determina el reloj SPI.
Nunca divide el canal por 256. por 8. Un valor opcional, durante la inicialización elegimos el valor de división de frecuencia de 256
SPI_BaudRatePrescaler_256, la velocidad de transmisión es 36M/256=140.625KHz.
El octavo parámetro SPI_FirstBit establece el orden de transmisión de datos, ya sea el bit MSB primero o el bit LSB primero. Aquí elegimos
SPI_FirstBit_MSB bit alto primero.
El noveno parámetro SPI_CRCPolynomial se utiliza para configurar el polinomio de verificación CRC para mejorar la confiabilidad de la comunicación. Puede ser mayor que 1.
Después de configurar los 9 parámetros anteriores, podemos inicializar los periféricos SPI.
El formato de inicialización de ejemplo es:
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
//Bidireccional de doble línea trabajo full-duplex
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //Master SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b //SPI envía y recibe estructura de trama de 8 bits
<; p>SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //El estado inactivo del reloj de sincronización en serie es alto371
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge //Se muestrean los datos del segundo borde de transición;
p>SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //La señal NSS está controlada por software
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256 //Prescaler
256
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //La transmisión de datos comienza desde el bit MSB
SPI_InitStructure.SPI_CRCPolynomial = 7 //Polinio para el cálculo del valor CRC
SPI_Init(SPI2, amp ; SPI_InitStructure) ; //Inicializa el registro SPIx periférico de acuerdo con los parámetros especificados
(3) Pasos de configuración del programa
3. Explicación de la configuración de W25Qxx
(1) Diagrama de circuito
Selección de chip PB12
W25Q64 es un producto SPI FLASH de gran capacidad lanzado por Winbond. La capacidad de W25Q64 es. 64Mb, esta serie también incluye W25Q80/16/32
etc. El W25Q64 seleccionado por ALIENTEK tiene una capacidad de 64Mb, que son 8M bytes. (1M = 1024K)
W25Q64 divide la capacidad de 8M en 128 bloques (Bloque), cada bloque tiene un tamaño de 64K bytes y cada bloque se divide en 16 sectores (Un sector es 4K). p>
bytes. La unidad de borrado mínima de W25Q64 es un sector, lo que significa que se deben borrar 4K bytes cada vez. De esta manera, necesitamos abrir un área de caché de al menos 4K para W25Q64, que tiene requisitos relativamente altos de SRAM. El chip debe tener más de 4K SRAM para funcionar bien.
W25Q64 tiene ciclos de borrado y escritura de hasta 10 W, tiene un período de retención de datos de 20 años y admite un voltaje de 2,7 ~ 3,6 V. W25Q64 admite SPI estándar y también admite. salidas duales/SPI de salida cuádruple, el reloj SPI máximo puede alcanzar 80 Mhz (equivalente a 160 Mhz con salida dual, equivalente a 320 M con salida cuádruple), para obtener más información sobre W25Q64
, consulte la HOJA DE DATOS de W25Q64.
Antes de escribir datos en una dirección, todos los datos de este sector deben leerse y almacenarse en el caché, luego se debe borrar el sector y luego los datos a escribir se deben modificar en el caché. Luego, los datos de toda la caché se reescriben en los sectores que acaban de borrarse.
Para facilitar el aprendizaje y la referencia, compartiré información de SPI con usted
Comunicación SPI de stm32
/live/3523_1795.html?s= 45051
Controlador del protocolo de comunicación SPI norFlash
/live/4034_2151.html?s=45051