Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Qué es spi3? Hablemos de ello en detalle.

¿Qué es spi3? Hablemos de ello en detalle.

¿SPI?

¿Es una interfaz periférica en serie?

La interfaz SPI en RC32332/4:

SPI tiene cuatro pines: spi_miso, spi_mosi, spi_sck, spi_ss_n.

SPI admite modo full-duplex, transmisión de datos en serie síncrona entre RC32332 y dispositivos externos (E2ROM, etc.).

El dispositivo maestro envía datos al dispositivo esclavo a través de spi_mosi, y el dispositivo esclavo envía datos al dispositivo maestro a través de spi_miso del dispositivo maestro. Las transmisiones en ambas direcciones se pueden realizar simultáneamente.

El dispositivo maestro envía datos:

Escribe los datos de envío en el registro de datos SPI (SPDR). Estos datos se moverán al registro de desplazamiento y luego se enviarán inmediatamente, dentro de 8 series. relojes Después del ciclo, se establece el indicador SPI (SPIF), lo que indica que la transmisión de datos se ha completado. Antes de la siguiente transmisión, el bit SPIF y el contenido SPDR deben borrarse leyendo el registro de estado SPI. Para las interrupciones SPI activadas, la información de interrupción SPI se generará una vez completada la transferencia.

SPI cuatro registros, dirección base 0x1800 0900

SP_Divisor de reloj/Registro preescalar (SPCNT) offset:0x00

Registro SP_Control SPCNTL 0x04

SP_Status Register (SPSR) 0x08

SP_Data I/O Register (SPDR) 0x0C

SPCNT: Establecer spi_sck=reloj del sistema / [2*(SPCNT+1)*SPR] ;

SPCNTL:

SPIE: 1: habilita la interrupción de la tarjeta SPI cuando SPIF está configurado en 1; 0: deshabilita la interrupción de la tarjeta SPI (predeterminado); -Abrir SPI, 0-Cerrar SPI (predeterminado)

MSTR: 1-Modo principal SPI; 0-Reservado para uso, RC32334/2 solo puede ser modo principal SPI

CPOL: Nivel de reloj, 0-spi_sck es 0 lógico (predeterminado) al transmitir, 1-spi_sck es 1 lógico al transmitir

CPHA:

SPR:00 dividido por 2 (predeterminado); 01 dividido por 4; 10 dividido por 16; 11 dividido por 32

SPSR:

SPIF: Transmisión completa, 0-inactivo, listo para transmisión, 1 -Transferencia de datos completada, implícitamente colocar.

WCOL: Conflicto de escritura, si es 1, se produce un conflicto de escritura y la escritura en este momento se ignorará.

MODF: Indicador de error maestro, establecido en 1 para indicar una infracción.

SPDR:

Registro de datos, transmisión de datos iniciada por el dispositivo maestro Cuando se completa la transmisión de datos, los bits de estado SPIF de los dispositivos SPI maestro y esclavo se establecerán en 1. .

Cuando se van a enviar datos, los datos se escriben en este registro. Cuando se completa la transmisión de datos, el registro de estado SPIF se establece en 1, se lee el SPSR y luego se leen los datos recibidos. este registro.

Ejemplo de programación en modo maestro:

Inicializa una interfaz SPI de 2MHz a una frecuencia de reloj del sistema de 67MHz.

1. Configure el registro SPCNT en 0x0000 0008, configure el reloj SPI en 3,7 MHz.

2 Configure el registro SPCR en 0x0000 00F0, configure SPIE=1, habilite la interrupción SPI. SPE= 1 Habilita la interfaz SPI. MSTR=1, normalmente se establece en 1.

CPOL=0: el reloj es de baja frecuencia, lo que indica que el SPI está inactivo. CPHA=0: los datos se muestrean en el primer flanco activo. SPR = 0, divida el reloj interno en dos, luego el reloj SPI es 3.7/2 = 1.85MHz

3. Configure el registro de máscara de interrupción 14 (0x1800_05E4) en 0x0000 0001 para activar la interrupción SPI del sistema. servicio.

4. Lea los registros SPSR y SPDR y borre el bit SPIF.

5. Configure el modo de salida de spi_ss_n en PIO y configúrelo en frecuencia de baja potencia.

6. Escribe los datos a enviar en el registro SPDR.

7. Espere a que se genere la interrupción SPI y la rutina del servicio de interrupción complete los siguientes pasos.

8. Lea el SPSR para asegurarse de que no se produzcan errores.

9. Lea el registro SPDR, obtenga el contenido del registro SPDR y restablezca el bit SPIF en el SPSR.

10. Configure el registro de reinicio de interrupción SPI (0x1800_05E8) en 0x0000_0001 y borre el registro pendiente de interrupción SPI.

11. Si se completa la serie de comandos, tire del pin spi_ss_n hacia arriba.

12. Repita los pasos 5-11 para completar el comando de Xin Yilun.

////

Debes prestar atención a varios puntos al inicializar SPI:

1. Seleccionar correctamente el host o esclavo y el modo de trabajo ( polaridad), Velocidad de transferencia de datos.

2. Preste atención al orden de transmisión de los bytes, ya sea LBS First o MSB First.

3. Configurar correctamente las resistencias pull-up de entrada, dirección de salida y pin de entrada de las interfaces MOSI y MISO puede ahorrar resistencias altas en el bus.