SPI
Serial Peripheral Interface (SPI) is a synchronous serial communication protocol specification for short-distance, full-duplex data exchange between a master device, such as a microcontroller, and one or more slave peripherals, including sensors, memory chips, and displays, primarily in embedded systems.[1][2] It operates on a master-slave architecture using four signal lines—serial clock (SCLK), master out slave in (MOSI), master in slave out (MISO), and slave select (SS)—with the master generating the clock and controlling data flow at speeds typically up to several megahertz.[3][2] As a de facto industry standard without formal licensing, SPI enables efficient, low-overhead interfacing without address lines or complex protocol overhead, making it simpler and faster than alternatives like I²C for many applications, though it lacks built-in multi-master support or hot-swapping capabilities.[1][3] Its widespread adoption stems from ease of implementation in hardware and software, supporting daisy-chaining of devices and variants like multi-device configurations via separate chip-select lines, with no notable controversies beyond occasional design trade-offs in power consumption or noise susceptibility in noisy environments.[2][1]Organizations
Software in the Public Interest
Software in the Public Interest (SPI) is a non-profit organization incorporated on June 16, 1997, in the state of New York, focused on supporting the development and distribution of free and open-source software and hardware projects.[4] It operates as a fiscal sponsor, providing administrative services such as financial management, donation processing, legal compliance, and infrastructure support to eliminate the need for projects to establish their own legal entities.[4] In 1999, SPI received 501(c)(3) tax-exempt status from the Internal Revenue Service, enabling tax-deductible donations to associated initiatives.[4] Originally established to address the administrative requirements of the Debian GNU/Linux project, which required a dedicated entity for handling funds and operations, SPI has expanded to assist a broader range of open-source efforts.[4] As of September 2025, it associates with 45 projects spanning operating systems, development tools, and applications, including Debian, Arch Linux, Gentoo Linux, FFmpeg, LibreOffice, and PostgreSQL.[5] These associations allow projects to leverage SPI's resources while retaining autonomy over technical decisions.[5] Governance of SPI is handled by a board of directors, comprising four elected officers—a president, vice president, secretary, and treasurer—elected annually by members, with operations relying on a volunteer model to promote transparency and alignment with open-source principles.[4] The organization emphasizes non-technical support to sustain long-term project viability without imposing ideological or proprietary constraints.[4]Simulations Publications, Inc.
Simulations Publications, Inc. (SPI) was an American company specializing in board wargames and military history magazines, founded in 1969 by game designer James F. Dunnigan as Poultron Press before renaming to SPI.[6][7] Dunnigan established the firm to rescue and publish Strategy & Tactics magazine, which he acquired from its original publisher Chris Wagner after it faced financial difficulties.[6][7] Under SPI, the magazine evolved into a bimonthly outlet bundling analytical articles with a free wargame in each issue, driving subscriber growth that surpassed competitors like Avalon Hill's The General by the mid-1970s.[6] The company expanded rapidly during the 1970s, becoming the dominant force in the wargaming industry by producing over 40 titles annually at its peak, including tactical simulations such as PanzerBlitz (1970), a solitaire-capable Eastern Front tank combat game, and Grunt (1971), an infantry-focused modern warfare title.[6][7] SPI also launched Moves magazine in 1972, dedicated to game variants, design theory, and reviews, further solidifying its influence.[6] By the mid-1970s, SPI achieved annual gross revenues of approximately $2 million, employed up to 40 staff including art director Redmond Simonsen, and captured 60-70% of the global wargame market through innovative direct-mail advertising in outlets like Scientific American.[7] Its "capsule games"—compact, low-cost titles sold via mail order—boosted volume but often yielded slim margins due to high production costs.[7] Financial troubles emerged in the late 1970s amid mismanagement, including inadequate marketing and cash flow oversight under Dunnigan, compounded by the early 1980s recession that eroded hobbyist spending.[7] Despite $2 million in 1981 sales, real income declined, leading to bankruptcy in 1982 after failed buyout talks with Avalon Hill.[7] TSR, Inc., acquired SPI's assets—including inventory and rights—for a $500,000 loan repayment but assumed no subscriber liabilities, stranding around 30,000 Strategy & Tactics subscribers and prompting TSR to liquidate stock through retail channels.[6][7] Many SPI designers, including Simonsen, transitioned to Avalon Hill's Victory Games subsidiary, which produced titles like Fleet Command before dissolving by 1990 amid broader industry contraction.[6][7] SPI's collapse highlighted vulnerabilities in the niche wargame sector, where success thresholds dropped to 10,000 units per title by the late 1980s.[7]Sony Pictures Imageworks
Sony Pictures Imageworks (SPI) is a visual effects and animation studio established in 1992 as a division of Sony Pictures Entertainment, initially comprising five employees tasked with employing computer technology to previsualize complex scenes for live-action motion pictures.[8] The studio expanded rapidly, transitioning from previsualization support to comprehensive visual effects production, character animation, and full computer-generated feature animation, contributing to over 100 live-action and animated films across its more than three decades of operation.[8] Headquartered in Vancouver, British Columbia, with additional facilities in Los Angeles, California, and Montreal, Quebec, SPI specializes in photorealistic live-action integration, dynamic creature and character animation, virtual production techniques, and expansive CG environments.[9] Early projects included visual effects for films such as Speed (1994), Jumanji (1995), Starship Troopers (1997), and Contact (1997), establishing SPI's expertise in blending digital elements with practical footage.[10] The studio achieved prominence with its work on the Spider-Man trilogy directed by Sam Raimi, particularly earning the Academy Award for Best Visual Effects for Spider-Man 2 (2004), where it developed advanced simulation tools for web-slinging sequences and organic digital characters.[11] SPI entered feature animation in 2006 with Open Season, followed by contributions to hybrid projects like Monster House (2006) and fully animated features including Surf's Up (2007) and the Hotel Transylvania series (2012–2022).[12] Other notable visual effects work encompasses Alice in Wonderland (2010), for which it received the Golden Satellite Award for Best Visual Effects, and 2012 (2009), involving massive destruction simulations.[13] In addition to its Academy Award for The ChubbChubbs! (2002), a computer-animated short film, SPI has garnered multiple Scientific and Technical Achievement Awards from the Academy of Motion Picture Arts and Sciences for innovations such as the Arnold renderer (2017), facial capture systems, and physics simulation engines like Bullet.[14] These technological advancements, including proprietary tools for shading, lighting, and real-time rendering, have positioned SPI as a leader in industry-standard pipelines, supporting virtual window and LED wall technologies in recent productions.[15] The studio maintains a workforce of artists, technologists, and production specialists, emphasizing collaborative environments across its North American locations to deliver high-fidelity effects that enhance narrative realism without supplanting practical filmmaking elements.[16]Serviço de Proteção ao Índio
The Serviço de Proteção ao Índio (SPI) was established on June 20, 1910, through Decree No. 8,072, initially under the name Serviço de Proteção aos Índios e Localização de Trabalhadores Nacionais (SPILTN), as a division of Brazil's Ministry of Agriculture, Industry, and Commerce.[17] The decree outlined its dual mandate: to shield indigenous populations from extermination and exploitation while facilitating the recruitment of indigenous laborers for national agricultural needs, reflecting an early republican policy blending protection with economic integration.[17] Marshal Cândido Mariano da Silva Rondon, a positivist military engineer, served as its founding director, emphasizing non-violent pacification guided by the principle of "civilize, never exterminate," which informed expeditions to establish peaceful contacts with isolated tribes across the Amazon and Mato Grosso regions.[18] Under Rondon's leadership from 1910 to 1930, the SPI conducted extensive telegraphic and exploratory missions that mapped remote territories, documented over 50 indigenous languages and cultures through ethnographic records, photographs, and phonographic recordings, and demarcated initial indigenous reserves to curb settler encroachments.[19] These efforts integrated frontier areas into the national grid via over 3,000 kilometers of telegraph lines by the 1910s, while avoiding armed conflict in favor of gift exchanges and mutual respect, resulting in the pacification of groups like the Parecis and Bororo without reported massacres attributable to SPI agents.[18] However, the agency's assimilationist framework prioritized relocating nomadic groups to fixed posts for "civilization," often disrupting traditional livelihoods and exposing them to diseases, with mortality rates in some contacted villages exceeding 50% due to introduced pathogens like measles and influenza during early 20th-century expeditions. By the 1920s, administrative shifts after Rondon's tenure exposed systemic vulnerabilities, including inspector-level abuses where officials facilitated illegal land concessions and labor trafficking, as evidenced in a 1931 federal inquiry into Amazonas and Acre operations revealing embezzlement of supply funds and coerced indigenous labor for private ranches.[20] Corruption escalated post-1950s, with documented cases of SPI personnel colluding in timber and rubber extractions on reserves, undermining demarcations and contributing to deforestation rates in protected areas that doubled in affected regions compared to non-SPI frontiers.[21] These failures, compounded by inadequate funding—averaging under 1% of the agriculture ministry's budget annually—prompted parliamentary probes in the 1960s highlighting graft in procurement and abandonment of remote posts.[19] The SPI was dissolved on December 5, 1967, via Decree No. 5,371, and supplanted by the Fundação Nacional do Índio (FUNAI) to centralize indigenist policy under a dedicated framework amid military regime reforms aimed at modernizing federal oversight.[22] FUNAI inherited the SPI's archives, which preserve over 10,000 documents on indigenous contacts, though critiques persist that the transition preserved assimilationist legacies while failing to fully eradicate entrenched corruption networks from the prior entity.[19]Computing
Serial Peripheral Interface
The Serial Peripheral Interface (SPI) is a synchronous serial communication protocol designed for short-distance, high-speed data exchange between a master device, such as a microcontroller, and one or more slave peripherals in embedded systems.[1] It operates in full-duplex mode, allowing simultaneous transmission and reception of data without start or stop bits, using a master-slave architecture where the master generates the clock signal and controls communication timing.[23] The protocol typically employs four signal lines: Serial Clock (SCLK) for synchronization, Master Out Slave In (MOSI) for data from master to slave, Master In Slave Out (MISO) for data from slave to master, and Slave Select (SS) or Chip Select (CS) to activate individual slaves.[24] Developed by Motorola in the mid-1980s, SPI was introduced to enable efficient interfacing between microprocessors and peripherals like memory devices and sensors, leveraging simple shift register mechanisms for data transfer.[25] Now maintained under NXP Semiconductors (Motorola's successor), the interface lacks a formal standardized specification but follows de facto conventions based on early implementations in Motorola's microcontroller families.[3] Data is exchanged in 8-bit or configurable lengths (e.g., 2 to 16 bits per frame in some implementations), with the master initiating transfers by asserting the SS line low and pulsing SCLK.[26] SPI communication timing is defined by two parameters: clock polarity (CPOL) and clock phase (CPHA), resulting in four modes that ensure compatibility between devices. CPOL=0 sets the clock idle state low, while CPOL=1 sets it high; CPHA=0 samples data on the first clock edge (leading for CPOL=0, trailing for CPOL=1), and CPHA=1 samples on the second edge.[1] Mode 0 (CPOL=0, CPHA=0) idles low and captures on the rising edge, suitable for many sensors; Mode 3 (CPOL=1, CPHA=1) idles high and captures on the falling edge, common in some displays.[27]| Mode | CPOL | CPHA | Idle Clock | Data Sample Edge | Data Shift Edge |
|---|---|---|---|---|---|
| 0 | 0 | 0 | Low | Rising | Falling |
| 1 | 0 | 1 | Low | Falling | Rising |
| 2 | 1 | 0 | High | Falling | Rising |
| 3 | 1 | 1 | High | Rising | Falling |
Service Provider Interface
The Service Provider Interface (SPI) is a standardized mechanism in the Java platform for enabling runtime discovery and loading of third-party implementations of a service contract, promoting modular and extensible software design.[33] Introduced in Java 6, released on December 11, 2006, SPI allows applications to define abstract service interfaces while deferring concrete implementations to separate provider modules, which can be added or replaced without recompiling the core application.[34] This approach relies on thejava.util.ServiceLoader class, which scans the classpath for provider registrations and instantiates them lazily upon request.[33]
Core components of SPI include the service interface, typically an abstract class or interface specifying the required methods; service providers, which are concrete classes implementing that interface; and configuration files that map the interface to its providers.[34] Providers must declare a public no-argument constructor to enable instantiation by ServiceLoader. Registration occurs through plain-text files named after the fully qualified interface name, located in the META-INF/services/ directory of a JAR file or classpath resource; each line in the file lists a provider class name.[33] For instance, ServiceLoader.load(MyService.class) returns an iterable iterator over all registered providers, allowing the application to query or chain them—for example, by iterating until a suitable definition is found, as in a dictionary service where multiple providers handle different word scopes.[33]
In practice, SPI supports loose coupling by avoiding compile-time dependencies on specific implementations, enabling plugin-like extensibility across modules or libraries.[34] Standard Java libraries leverage SPI extensively: the JDBC API uses it via java.sql.DriverManager to load database drivers dynamically from the classpath, scanning for java.sql.Driver implementations registered in META-INF/services/java.sql.Driver.[35] Similarly, the Java Sound API employs SPI for audio format support through abstract classes in javax.sound.sampled.spi, allowing third-party codecs to integrate seamlessly.[36] Other examples include image I/O providers in javax.imageio.spi and logging factories in java.util.logging.[37] Providers can be loaded in a thread-safe manner, with ServiceLoader.reload() refreshing the cache if classpath changes occur, though this is uncommon in production.[34]
This mechanism enhances portability and maintainability, as services can evolve independently—providers handle specifics like vendor-specific optimizations—while ensuring compatibility through the fixed interface contract.[33] However, it requires careful management of classloader contexts to avoid issues in modular environments like Java 9+, where the module system extends SPI via provides directives in module-info.java for explicit exports.[38] Adoption in frameworks like Spring or Hibernate further demonstrates SPI's role in dependency injection and persistence, where custom dialects or serializers register as providers.[37]
Security Parameter Index
The Security Parameter Index (SPI) is a 32-bit identifier used within the Internet Protocol Security (IPsec) architecture to uniquely reference a Security Association (SA), which defines the parameters for securing IP traffic between peers.[39] An SA specifies algorithms, keys, and other attributes for authentication, encryption, or both, applied to inbound or outbound traffic.[40] The SPI enables the receiving peer to map incoming packets to the correct SA entry in its Security Association Database (SAD) without ambiguity.[40] In IPsec protocols such as the Authentication Header (AH) and Encapsulating Security Payload (ESP), the SPI appears as the first field in the respective headers, transmitted in plaintext to facilitate rapid lookup.[41] For unicast SAs, the receiver selects the SPI value during SA establishment to ensure local uniqueness, often coordinating with the sender via protocols like Internet Key Exchange (IKE).[39] The receiver then uses the SPI—potentially combined with the IPsec protocol type (e.g., AH or ESP) and destination IP address—to index the SAD and retrieve processing parameters.[42] For multicast SAs, additional disambiguation via source or destination addresses may be required to resolve potential SPI collisions.[43] SPI values in the range 1–255 are reserved by the Internet Assigned Numbers Authority (IANA) for future use, while 0 is reserved for local implementation and not transmitted on the wire.[41] In contrast, IKEv2 employs distinct 64-bit SPIs (composed of separate 32-bit initiator and responder values) in its headers to identify IKE SAs for key management, separate from the 32-bit SPIs used for IPsec child SAs handling data protection.[44] This separation prevents overlap, as IPsec SPIs apply unidirectionally to traffic flows, whereas IKE SPIs support bidirectional session multiplexing.[45]SCSI Parallel Interface
The SCSI Parallel Interface (SPI), also known as Parallel SCSI, is a set of standards defining the physical, electrical, and signaling characteristics for parallel implementations of the Small Computer System Interface (SCSI) protocol, enabling communication between host computers and peripheral devices such as hard disk drives, tape drives, and scanners.[46] Developed primarily for high-performance server and workstation environments, SPI supports peer-to-peer data transfer across a shared bus, with up to 8 devices in narrower configurations or more in wider variants, using asynchronous or synchronous modes to handle command queuing and error recovery.[47] Unlike later serial SCSI variants, SPI transmits multiple bits simultaneously over parallel conductors, which imposes constraints on cable length and signal integrity due to skew and crosstalk.[48] Initial development of SCSI, including its parallel interface, began in the early 1980s under ANSI's X3T9.2 committee, with the first standard (SCSI-1, ANSI X3.131-1986) specifying an 8-bit bus operating asynchronously at up to 1.5 MB/s or synchronously at 5 MB/s over a maximum cable length of 6 meters for single-ended signaling.[49] Subsequent revisions under SCSI-2 (1994) introduced Fast SCSI (10 MB/s) and Wide SCSI (16-bit, doubling throughput), while SCSI-3's SPI family—encompassing SPI (1995), SPI-2 (1998), SPI-3 (2000), SPI-4 (2002), and SPI-5 (2003)—added features like Low Voltage Differential (LVD) signaling for reduced noise, packetized transfers, and speeds up to Ultra320's 320 MB/s with 16-bit width and 80 MHz clocking.[50] These evolutions addressed density and performance needs but retained parallel architecture's inherent limitations, such as termination requirements and device addressing via unique IDs (0-7 or 0-15).[51]| SCSI Parallel Variant | Maximum Transfer Rate | Bus Width | Key Features |
|---|---|---|---|
| SCSI-1 (1986) | 5 MB/s (synchronous) | 8-bit | Asynchronous fallback, single-ended (SE) signaling, 50-pin Centronics connector.[49] |
| Fast SCSI (SCSI-2) | 10 MB/s | 8-bit | Doubled clock to 10 MHz.[50] |
| Wide SCSI (SCSI-2) | 20 MB/s | 16-bit | 68-pin high-density connector, supports up to 16 devices.[52] |
| Ultra SCSI (SPI) | 20 MB/s (narrow), 40 MB/s (wide) | 8/16-bit | 20 MHz clock, improved timing.[46] |
| Ultra2 (SPI-2) | 40/80 MB/s | 8/16-bit | LVD/SE options, 40 MHz clock, up to 12 meters cable.[50] |
| Ultra3 (SPI-3) | 80/160 MB/s | 8/16-bit | Low Voltage Differential mandatory for high speeds.[46] |
| Ultra320 (SPI-5) | 160/320 MB/s | 8/16-bit | Double-edge clocking at 80 MHz, packet protocol, up to 64 bits/cycle burst.[51] |