SPI(4) | Device Drivers Manual | SPI(4)

# NAME

`spi` — introduction to machine-independent SPI bus support and drivers

# SYNOPSIS

`spi* at mainbus?`

Other attachments are machine-dependent and will depend on the bus topology of your system. See intro(4) for your system for more information.

# DESCRIPTION

NetBSD includes a machine dependent SPI (Serial Peripheral Interface) bus subsystem, and several different machine-independent SPI device drivers.

Your system may support additional machine-dependent SPI devices. Consult your system's intro(4) for additional information.

SPI is a 4-wire synchronous full-duplex serial bus. Some systems provide support for Microwire, which is Philips' name for a strict subset of SPI, with more rigidly defined signaling. Therefore, Microwire devices are also supported by the SPI framework.

Note that when referencing SPI devices in a config(1) file, the ‘slave’ must be provided, as SPI lacks any way to automatically probe devices.

# IOCTLS

The following ioctl(2) calls apply to SPI devices. They are defined in the header file `<dev/spi/spi_io.h>`:

`SPI_IOCTL_CONFIGURE (spi_ioctl_configure_t)`
  Used to choose the operational mode and clock. The `sic_mode` defines polarity and phase of the clock. `sic_speed` is the clock speed in Hz, a value of 0 means to keep the default speed of the device.

      typedef struct spi_ioctl_configure {
      	int sic_addr;
      	int sic_mode;
      	int sic_speed;
      } spi_ioctl_configure_t;

`SPI_IOCTL_TRANSFER (spi_ioctl_transfer_t)`
  Used to handle an I/O transaction.

      typedef struct spi_ioctl_transfer {
      	int sit_addr;
      	const void *sit_send;
      	size_t sit_sendlen;
      	void *sit_recv;
      	size_t sit_recvlen;
      } spi_ioctl_transfer_t;

# HARDWARE

NetBSD includes the following machine-independent SPI drivers:

bmx280thp(4)
  Bosch BMP280 / BME280 sensor.
m25p(4)
  STMicroelectronics M25P family of NOR flash devices.
mcp23s17gpio(4)
  Microchip MCP23S17 16-bit GPIO chip.
mcp3kadc(4)
  Microchip MCP3x0x SAR analog to digital converter.
mcp48x1dac(4)
  Microchip MCP4801/MCP4811/MCP4821 digital to analog converter.
sc16is7xx(4)
  NXP 16C450 like UART bridge
scmdspi(4)
  SPI frontend for the Sparkfun Serial Controlled Motor Driver.
ssdfb(4)
  OLED/PLED framebuffer modules.
tm121temp(4)
  Texas Instruments TMP121 temperature sensor.

# FILES

/dev/spiu
  SPI device unit u file.

# SEE ALSO

spi(9)

# HISTORY

The machine-independent SPI framework was written by Garrett D'Amore for the Champaign-Urbana Community Wireless Network Project (CUWiN), and appeared in NetBSD 4.0. The ioctl(2) interface allowing configuration from userspace appeared in NetBSD 9.0.

February 27, 2021 | NetBSD 11.99