SPI
This content is not available in your language yet.
SPI es un bus rápido para hablar con un dispositivo a la vez. Usa cuatro líneas:
- MOSI: datos del controlador (tu placa) hacia el dispositivo.
- MISO: datos del dispositivo hacia el controlador.
- SCK: el reloj (marca el ritmo).
- CS (chip-select): elige a qué dispositivo le hablas.
Es full-duplex: en cada operación se envían y se reciben bytes al mismo tiempo. La plataforma soporta el canal 0. Como el código es autocontenido, inicia el bus al inicio.
1. Iniciar el bus: spiBegin(channel)
Sección titulada «1. Iniciar el bus: spiBegin(channel)»board.spiBegin(0); // canal 02. Configurar un dispositivo: spiDeviceConfig(opciones)
Sección titulada «2. Configurar un dispositivo: spiDeviceConfig(opciones)»Devuelve un identificador que usarás en cada transferencia. Cada opción:
deviceId(0–63): un id lógico que tú asignas al dispositivo.channel(por defecto 0): el canal SPI.bitOrder(por defecto1): orden de los bits.1= MSB primero (lo habitual),0= LSB primero.dataMode(0–3): el “modo SPI”. Combina la polaridad (CPOL) y la fase (CPHA) del reloj; en simple, define en qué momento del reloj se leen los bits. La mayoría de dispositivos usan0; usa el que diga el datasheet (puedes componerlo conboard.SPI_MODES.CPHA/CPOL).maxSpeed(Hz, por defecto4000000): velocidad del reloj.csPin(por defecto-1): pin de chip-select.-1= sin gestión de CS (lo manejas tú con un pin digital).
const dev = board.spiDeviceConfig({ deviceId: 0, maxSpeed: 1000000, // 1 MHz bitOrder: 1, // MSB primero dataMode: 0, csPin: 10,});3. Transferir / escribir / leer
Sección titulada «3. Transferir / escribir / leer»spiTransfer envía y recibe la misma cantidad de bytes a la vez (full-duplex). El
callback recibe los bytes leídos:
board.spiTransfer(dev, 0, [0x9F], (recibidos) => { varG.spi = recibidos;});// spiTransfer(deviceId, requestId, data[], callback, channel = 0)requestId(0–127): un número que tú eliges para casar la respuesta con la petición (útil si lanzas varias seguidas).
Variantes según lo que necesites:
| Método | Para qué |
|---|---|
spiTransfer(dev, reqId, data[], cb, ch?) | enviar y recibir a la vez |
spiWrite(dev, reqId, data[], ch?) | solo escribir (sin esperar lectura) |
spiWriteAck(dev, reqId, data[], cb, ch?) | escribir y recibir confirmación |
spiRead(dev, reqId, n, cb, ch?) | solo leer n bytes |
spiEnd(ch?) | cerrar el bus |
Errores típicos
Sección titulada «Errores típicos»- Olvidar
spiBeginantes de configurar o transferir. dataModeequivocado: si lees basura, revisa el modo SPI del datasheet.- Pasar más de 127 bytes en una transferencia → error.
- CS mal gestionado: si pusiste
csPin: -1, controla tú el chip-select.