We, the undersigned, encourage educators, engineers, designers, and community members to discontinue the use of the terms MOSI/MISO/SS and in their place use SDO/SDI/CS.
New signal names:
- SDO – Serial Data Out. An output signal on a device where data is sent out to another SPI device.
- SDI – Serial Data In. An input signal on a device where data is received from another SPI device.
- CS – Chip Select. Activated by the controller to initiate communication with a given peripheral.
- PICO (peripheral in/controller out). For devices that can be either a controller or a peripheral; the signal on which the device sends output when acting as the controller, and receives input when acting as the peripheral.
- POCI (peripheral out/controller in). For devices that can be either a controller or a peripheral; the signal on which the device receives input when acting as the controller, and sends output when acting as the peripheral.
- SDIO – Serial Data In/Out. A bi-directional serial signal.
Deprecated signal names:
- MOSI – Master Out Slave In
- MISO – Master In Slave Out
- SS – Slave Select
- MOMI – Master Out Master In
- SOSI – Slave Out Slave In
Signal names unchanged:
- SCK – Serial Clock. The clock for the bus generated by the controller.
Designers should avoid signal names MOSI/MISO and instead use SDO/SDI. The SDI signal is defined by the perspective of the device. For example, the SDI signal on a sensor is the pin that receives data from the controller. Similarly, the SDO pin on a controller is the output pin that sends data to a peripheral.
It is best practice to use SDO/SDI and Controller/Peripheral. Change the way you write tutorials, create schematics, and diagrams. This is the best way to educate the next generation of users and engineers.
Why are we changing from MOSI/MISO/SS to SDO/SIO/CS?
The electronics industry in particular has been [using Master and Slave terminology unabashedly](https://www.washingtonpost.com/opinions/2020/06/12/tech-industry-has-an-ugly-master-slave-problem/) and it needs to stop. It’s unfortunate and embarrassing that our community has gone this long without acknowledging the need to treat all humans with respect. Thankfully, the industry is already making this shift. While many microcontroller and processor manufacturers lag behind, the SDO/SDI terminology is already widely adopted by peripheral manufacturers.
What about pre-existing documentation, datasheets, tutorials?
Existing documentation should be updated where possible. Prioritize the most popular and foundational content. Where content modification is not possible, add a banner to the impacted sections:
Note: The following use of MOSI/MISO terminology is considered obsolete. SDO/SDI is now used. The MOSI signal on a controller can be replaced with the title ‘SDO’. The connecting net can be replaced with ‘CONTROLLER_SDO’. Master and Slave are now Controller and Peripheral. Additional information can be found [here]().
Should I continue to include MOSI and MISO in my curriculum or tutorials?
Consider teaching the origins of Master and Slave terminology and why we don’t use it anymore. Industries and business can be wrong; let’s celebrate the ability to change and improve over time.
What about devices that can act as either controller or peripheral?
Some devices support the ability to act both as a controller or as a peripheral. In the scenario where the signal direction changes based on the role, the signals should be named PICO (peripheral in/controller out) and POCI (peripheral out/controller in). So, for example, if a microcontroller was acting as the controller, talking to a sensor (peripheral), you would connect the PICO pin of the microcontroller to the SDI pin of the sensor, and the POCI pin of the microcontroller to the SDO pin of the sensor. The microcontroller (acting as controller) would output data on the PICO (peripheral in/controller out) pin to be read by the sensor’s SDI (serial data in) pin, and the sensor would output data on its SDO pin to be read by the microcontroller’s POCI pin.
Best Practices For New and Revised Works:
- Schematics: Change pins on devices from MOSI/MISO to the appropriate SDO/SDI and CS where needed. Use net and signal names that avoid the use of MOSI/MISO. Ie, ‘CONTROLLER_SDO’ or equivalent to replace ‘CONTROLLER_MOSI’.
- Hardware: Use SDO/SDI silkscreen labels. Note that the ‘SDO’ label is relative to the PCB or device as an output the same way ‘TX’ should be an output from the PCB or device.
- Software / Firmware: Add new function names using the new terminology. Maintaining reverse compatibility with deprecated names is allowed.
- Datasheets / Documentation: Use SDO/SDI pin and signal names where possible. Avoid master and slave terminology and use terms ‘controller/peripheral’ or the term that best suits the application.
What about other uses of master/slave terminology?
There’s a lot of work to be done! This resolution focuses on the small changes we can make to improve SPI terminology. We will be releasing more guidance resolutions soon. We recommend these relevant articles for more information about other protocols.
- Wikipedia Master/Slave Terminology Concerns
- There’s an industry that talks daily about ‘masters’ and ‘slaves.’ It needs to stop.
- OpenZFS removed offensive terminology from its code
Individuals and companies are welcome, and encouraged, to email email@example.com to be added to the redefining SPI endorsement lists below.
Adam Benzion (Edge Impulse)
Alethea Flowers (Winterbloom)
Alicia Gibb (OSHWA)
Andreas G. Andreou (Johns Hopkins University)
Edna Jonsson (Todda Industries)
Glenn Samala (SparkFun Electronics)
James “Laen” Neal (OSH Park)
Jason Huggins (Tapster Robotics)
Jeffrey Yoo Warren
Joel Murphy (Pulse Sensor)
Joshua Lifton (Crowd Supply)
Harris Kenny (Intro)
Matthias Tarasiewicz (RIAT Institute)
Michael Ossmann (Great Scott Gadgets)
Mike Fikes (Vouch)
Nathan Seidle (SparkFun Electronics)
Neil Hendin (Google ChromeOS HW Group)
Ron Evans (The Hybrid Group)
Shawn Hymel (Hello Blink Show)
Tao Wang (CEO – Chengyi Semiconductors)
Great Scott Gadgets