Updating The Language Of SPI Pin Labels To Remove Casual References To Slavery

This morning the Open Source Hardware Association (OSHWA) announced a resolution for changing the way SPI (Serial Peripheral Interface) pins are labelled on hardware and in datasheets. The protocol originally included MOSI/MISO references that stand for “Master Out, Slave In” and “Master In, Slave Out”. Some companies and individuals have stopped using these terms over the years, but an effort is being taken up to affect widespread change, lead by Nathan Seidle of Sparkfun.

The new language for SPI pin labeling recommends the use of SDO/SDI (Serial Data Out/In) for single-role hardware, and COPI/CIPO for “Controller Out, Peripheral In” and “Controller In, Peripheral Out” for devices that can be either the controller or the peripheral. The change also updates the “SS” (Slave Select) pin to use “CS” (Chip Select).

SPI is widely used in embedded system design and appears in a huge range of devices, with the pin labels published numerous times in everything from datasheets and application notes to written and video tutorials posted online. Changing the labels removes unnecessary references to slavery without affecting the technology itself. This move makes embedded engineering more inclusive, an ideal that’s easy to get behind.

[2022 Editor’s Note: The OSHWA changed its recommended naming to PICO/POCI for “Peripheral In, Controller Out” and “Peripheral Out, Controller In”. Fine by us! I’ve updated this throughout the rest of the article because it doesn’t change Mike’s original argument at all.]

The Technology Itself

Even though the terminology needs an update, the approach to how SPI data lines are designated is one of the best of all protocols because the *O*I/*I*O format stays the same even when the device changes. This is easiest to understand when thinking about a microcontroller that can act as either the “Controller” or “Peripheral”. A controller will always send out its data on the PICO line (controller out) and receive data back on the POCI (controller in). Now, the same device acting in the peripheral role retains the exact same pin labels. It just begins listening on the PICO line (peripheral in) and sending on the COPI line (peripheral out). Under this naming scheme, the controller is always the device that controls the clock.

The SDI/SDO labels have most commonly appeared on devices that lack the ability to serve as an SPI controller (think sensors or LCD screens). But here’s the problem, when you have three or more chips in a design, which SDI lines get connected to SDO lines? Even with two chips, if one port is called SDI and the other is called SDO, what name do you assign to the wire? It’s the UART RX/TX problem all over again.

Retaining the PICO/POCI paradigm, the problem is answered without any knowledge at all of function: all PICO lines should be connected to one another, as should all POCI lines. Brilliant.

We Can All Decide to Make This Change

SPI is a de facto standard which Motorola published starting back in the 1980s. It’s simple and it works well, becoming one of the two most widely used chip to chip communication protocols along with I2C. But it’s not governed by a ruling body. That means, to change the pin names, all it takes is for people to decide we should change them. That’s what’s happening here.

With hardware manufacturers like Sparkfun and Adafruit, and the Open Source Hardware Association adopting the SDO/SDI and PICO/POCI labels, the effort gets a jump start. I encourage you to make the changes in your own schematics, software, and documentation.

The hardware world isn’t the only place removing references to slavery from design specs. The OpenZFS project changed references to “slave” in the code base to “dependent” which was also abbreviated as “dep” for variable names. An article in Ars Technica published on the OpenZFS change also references a paper published by the Internet Engineering Task Force (IETF) standards organization recommending a shift away from oppressive language being included in defined standards.

The history of slavery is a dark and disturbing one, and its casual inclusion in engineering can be hurtful. In this time of introspection sparked by massive protests over racial inequality, systemic racism, and violence within law enforcement, this is one small but meaningful change the hardware world should choose to adopt. And one that I wish had been adopted long ago.

288 thoughts on “Updating The Language Of SPI Pin Labels To Remove Casual References To Slavery

  1. I support this change. I would not have 5 years ago, but after listening to the Black community, their experience of systematic racism and reading the history of slavery in the USA, change on every level is needed.

  2. The very first comment had to be, [telling a black person to attach a slave to a master would not at all be off putting].
    By all means, continue being the example of oppression by arguing for your right to continue being offensive rather than conceding. It’s definitely black peoples’ responsibility to not be offended, not your responsibility to be a copacetic human being. 🤨

  3. Politically Correct gone amuck. This world gets more weird by the day. Erasing history and censorship is not the answer in the world today and neither is changing the use of words we’ve always used. How many people get confused over calling one end master/host vs the slave end? None that I know of.

  4. I really want to know if this is virtue signalling or if it’s a response to actual complaints. I think that there *are* huge systemic forces keeping different groups out of computing, and my suspicion is that this is a distraction from them, a tool to more deeply ingrain the status quo rather than to change it. Doubt we’ll get to the bottom of that one on hack-a-day!

    But what really matters when engineering is the meaning. And one thing that is fantastic is that these terms ‘master’ and ‘slave’ are so intuitively clear to most english speakers. The question on your mind is, who controls the clock? So when you see the datasheet devoting paragraphs to “the controller controls the clock”, and you’re looking at a board that has “master” silkscreened on it, I think you’ll be able to figure it out. The term “master” is just that clear, it doesn’t need a bunch of explanatory text. So I think this change will be manageable for most engineers.

    If the old terms were obscure / jargon, then changing them would really put people in a pickle.

  5. This is just foolish to change it. It’s called learn what your doing. MISO, MOSI, & SS are totally fine to use. If one took 2 minutes to look them up to know what they stand for it makes sense. The problem is that most Arduino people are just to dam lazy to look anything up. They are just so much in a rush for the satisfaction of getting that blinking led going they take no time at all to learn and understand what they are doing.

    Most don’t understand anything about what volts or amps are, and just just wiring up things and think every sensor is like a computer peripheral in that its all plug and play. They constantly wire up leds to GPIO pins with no resistor, Wire up relays directly to GPIO pins, and cosntantly wire up 3.3V to 5V devices. Its just a total joke how no one takes the time to learn anything anymore.

  6. Instead of wasting time rewriting historical documentation, select some date (like today) and from that date going forward the use of master and slave in all documentation will be frowned upon.

    For example you never see “degrees kelvin” in use since 1968 ( https://en.wikipedia.org/wiki/Kelvin#Usage_conventions ), should we as a society have gone back and rewriten all previous documentation and replace every mention of “degrees kelvin” with “kelvin”. It is a total waste of time and energy, fix things going forward it is the simplest and cheapest way.

    The reality is that this action will not change poverty around the world.

  7. Yeay, I think its a good idea. It’s total sexist. Everytime I get horny when I tink about it. Exactly like this slave/master thing. Thought about BDSM, got horny. Fuck

  8. I’m waiting for the non binary connector, with half pins half sockets on one side, and the opposite on the other. Then a future article in an electronics magazine about how bonkers identity politics influenced electrical connectors

  9. Crazy, next up connectors. No more male and female, didn’t you know? Gender Isa social construct. Thin skinned people have no place in engineering. Electrons don’t care about your feelings.

  10. Oh man, I’ve wracked my brain for so long about good words to replace the uncomfortable ones that I learned in school, and these are great pieces of new terminology.

    To those of us upset about this, please consider that – whatever discomfort this change induces in you – some people experience 10 or 20 times that level of discomfort with the old slavery-based terms. Maybe you can’t EMPATHIZE with people who are that uncomfortable, but I hope you can at least SYMPATHIZE with them and be glad that there’s an easy change you can make to help people feel more comfortable.

    These new terms are no more ambiguous or less technical than the old terms; in fact, I’d say they’re better from a technical standpoint.

  11. Predictably, the comments above are a shithole. But every time somebody rewrites this terminology, the end result is *clearer*:

    The new language for SPI pin labeling recommends the use of SDO/SDI (Serial Data Out/In) for single-role hardware, and COPI/CIPO for “Controller Out, Peripheral In” and “Controller In, Peripheral Out” for devices that can be either the controller or the peripheral. The change also updates the “SS” (Slave Select) pin to use “CS” (Chip Select).

    Just drop the master/slave shit across the board. It’s not cute, and it’s not even HELPFUL either.

  12. >Ban colored connectors?
    10/10

    All connectors should be multicolored! Down with the racist single color plugs!

    Which plug should I use?
    The yelloblawhired.
    The what?

  13. There does seem to be quite a lot of censoring going on for this particular story in the comments
    for me the word “Master” has no association with politics
    instead it just means someone who is an expert at they’re craft or a kung fu master

    As for empathy which seems to come up a lot in discussions like these, there’s also the possibility that different people will associate different meanings to the same words, especially in cases where there are different countries involved outside of the USA and different cultures. Empathy has to apply to everyone including the people that may not hold similar political views.

  14. Renaming tech things to remove “master” is pretty silly (gonna bet that this is a white person with a non-tech degree trying to look like they are doing something, and not a grassroots initiative from an engineer who is a person of color) but at least in this case it’s an actual slavery reference being removed (unlike with git, where the reference is to a “master copy” not a slave master.)

  15. Why are feelgood measures the tech trend du jour?

    Renaming isn’t gonna wipe away past, current and future slavery.
    Slavery could be called “forced employment” and it also still wouldn’t change the horrible nature of it itself.

    Besides, modern day wage slavery where shitty salaries pretty much forces people to stick to their current shitty jobs is a bigger atrocity than some words that can be used in multiple ways, one of which is a negative thing with a atrocious history.

  16. Well, another futile attempt to hypercorrect everything, for what exactly?
    STEM is so beautiful, so universal, really does not discriminate.
    PCB, code or any other hack does not care if you are black, white, yellow. The only thing that matters is your how clever you are, how much effort you put in, how much experience you have.

    If you are so offended by a term that no one is using in derogatory sense, maybe you should go into social fields.

    The problem (let’s be honest is fueled by racial tensions in US) is complex, and more caused by post slavery racism than by slavery instead.

    Want to combat it, seriously stop being racist, and I’m saying it in overcompensating sense too. Stop tokenizing minorities and treat this problem in much broader approach. Implement public healthcare, provide free higher level education, better fund schools in lower income neighborhoods.
    Stop inserting race in every single thing, treat all peoples like peoples.

  17. I’m okay with changing the words master and slave, but i’ll use something that has the same acronyms MOSI and MISO. Call it Main and Sub, Mike and Seth, what ever makes the most sense… i really don’t care, i just think that after working with the old terms for decades in the context, it’s going to be difficult to now “unlearn” the old terminology. Just hope people are not offended (or think someone might be offended, and attack me) when i keep going the way i was in naming my SPI signals MISO and MOSI… Maybe in a few years i have adapted to the new words, and don’t have to google every damn new acronym a few times until i remember what it stands for and how it has to be interpreted in the context of the technial application, to not offend anyone…

Comments are closed.