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.
- COPI (controller out / peripheral in). 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.
- CIPO (controller in / peripheral out). 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 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. Companies like Infineon, Analog Devices, Bosch, TDK, ST, AKM IXYS, Melexis, ROHM and industry groups like the SD Association use the SDO/SDI nomenclature. Additionally, companies like TE.
NXP have stopped using MOSI/MISO with DIN/DOUT in its place.
Below are a few examples of companies that use obsolete language:
- NXP is lagging on some devices and leading the way on others.
- Raspberry Pi
- Silicon Labs
- Electric Imp
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 COPI (controller out / peripheral in) and CIPO (controller in / peripheral out). So, for example, if a microcontroller was acting as the controller, talking to a sensor (peripheral), you would connect the COPI pin of the microcontroller to the SDI pin of the sensor, and the CIPO pin of the microcontroller to the SDO pin of the sensor. The microcontroller (acting as controller) would output data on the COPI (controller out / peripheral in) 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 CIPO 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 welcome (Email firstname.lastname@example.org to be added to the list below)
Adam Benzion, Hackster.io
Alicia Gibb, OSHWA and ATLAS BTU Lab
Glenn Samala, SparkFun Electronics
Harris Kenny, OSHdata
Jason Huggins, Tapster Robotics
Jonathan Georgino, Binho LLC
Joshua Lifton, Crowd Supply
Libi Striegl, Media Archaeology Lab
Limor Fried, Adafruit Industries
Matthias Tarasiewicz, RIAT Institute
Nathan Seidle, SparkFun Electronics
Phil Torrone, Adafruit Industries
Shawn Hymel, Hello Blink Show
Steven Abadie, OSHdata
Tod Kurt, ThingM
Tom Igoe, NYU ITP
Joel Murphy, Pulse Sensor
Yury Gitman, Pulse Sensor
Alethea Flowers, Winterbloom
Daniel Hienzsch, Rheingold Heavy
Darrell Rossman, Crowd Supply
Ron Evans, The Hybrid Group
Edna Jonsson, Todda Industries
Jeffrey Yoo Warren
Zach White, QMK Firmware
Jack Humbert, QMK Firmware and OLKB
James “Laen” Neal, OSH Park
Dr Aidan T. Hindmarch
Mike Fikes, Vouch
Nicholas Landry, themiasmatheory.netlify.com
Michael Ossmann, Great Scott Gadgets
Kate Temkin, Great Scott Gadgets
Mark Hayter, Google Chrome OS Hardware Team
Fabio Violante, Arduino
Prof. David Harris, Harvey Mudd College
Jim Cook, Questair
Chris Miller, RHIT
Patrick Di Justo, Maker Community LLC
Ezra Boley, FANTM
Vijay Pradeep, Virtana Inc
Andreas G. Andreou, Johns Hopkins University