SPI(4)

πŸ“¦ version 11.0, in nixpkgs unstable

πŸ’– SPI(4) β€” the Kernel Interfaces Manual page πŸ’–

okay so this is spi(4) from the Kernel Interfaces Manual β€” literally the intro to machine-independent SPI bus support and drivers, bestie. πŸ’…

🌸 NAME 🌸

spi β€” introduction to machine-independent SPI bus support and drivers. Yes, that's the whole vibe: the SPI bus framework plus its driver besties. 🫢

✨ 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.
  • tm121temp(4) β€” Texas Instruments TMP121 temperature sensor.
  • scmdspi(4) β€” SPI frontend for the Sparkfun Serial Controlled Motor Driver.
  • ssdfb(4) β€” OLED/PLED framebuffer modules. ✨

πŸ’œ FILES πŸ’œ

  • /dev/spiu β€” SPI device unit u file.

⭐ SEE ALSO ⭐

  • spi(9) β€” go read this too, bestie. iykyk. πŸ’«

πŸ¦‹ 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. πŸ‘‘


okay that's the whole page, bestie β€” footer tea: this one's from Debian, dated February 27, 2021, and it's the SPI(4) page. bye, slay! πŸ’–βœ¨

πŸ“¦ where this page comes from
  • nixpkgs unstable: netbsd-source 11.0
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms