Motivation of Software Serial

Many people seem to be using software serial (or software I2C, software SPI)
My question then becomes, "why"? Why bang them in software while you can take advantage of the native hardware on the dedicated pins (on the dedicated ICSP header)? It solve so many potential issues and make your device run faster.
Now, I understand that you might want to use the pins for other tasks, but why use software serial when the real serial pins are literally 2cm away?
First of all, because the pins are literally 2cm away I assume wire length is not a problem. Eliminating that, I can't just think of another answer.

I have never used software serial. Or software I2C. Or software SPI. I design my boards (yes) to pull SPI from the ICSP header (yes, it's a arduino leonardo/zero/due so you can only get them from there). I broke out physical RX/TX pins and physical SDA/SCL pins as well as physical CIPO/COPI/SCK/RST lines.

Like, it's not even hard to wire them up to the real serial/SPI/I2C pins. So the question to software serial then becomes, "why?"
Yes, I understand that on the UNO the serial is connected to the programmer. But that board, because how many pins on the rail is duplicates of the ICSP header (as well as the "broken" rx/tx pins) I consider that board to be "flawed". So in that case I can understand why someone might be using software serial as the real ones are "broken". Leonardo is just in every single way better.
But why use them on, say, a Mega? Why use software SPI?
I don't understand. I want those that use software bit-banged communication protocol to explain.

For when you've got more serial interfaces than hardware USARTs

1 Like

How many times have we asked newbies why they are using software serial on Mega, for Bluetooth or whatever, when there are 3 hardware UARTS going unused?

How many times have we asked newbies why they want to connect an i2c device to pins other than SDA/SCL pins, only to be told that they can't because those pins are being used by another i2c device?

I think the more common reason is ignorance. Ignorance of the concepts and the capabilities of the hardware they have in front of them.

I thought it make more sense to wire serial peripherals to the actual serial ports, no?

That's one, but it's the minority of the case here.

Correct, it does make more sense. But a newby does not know that because they are ignorant.

Bold statement.
Evidence, please.

Plural: newbies
Singular: newby or newbie?

I'm not sure! But don't see how either is worse than the other.

1 Like

"noob" / "noobs" :smiley:


I have used software serial quite a lot, with GPS trackers and the like, it works and is reliable.

To consider UNOs and the similar Pro Minis as 'flawed' is bizare, they were perfectly good and serviceable designs at the time they were released and still are and widly used for pefectly servicable projects.

There are now better boards with more hardware serial, SPI and I2C ports, but that does not make the older designs 'flawed'.


Then you don't understand very well. (there is no "programmer.")

I consider that board to be "flawed".

It's reasonable use of all of the 28pins available on the processor. And the Uno/Nano are by far the most popular Arduino boards in use, even without counting the clones and derivatives.

Leonardo is just in every single way better.

Ok. But not more popular, for whatever reason.

But why use them on, say, a Mega? Why use software SPI?

Software Serial (UART) is usually used because they're porting an Uno sketch that needed to use SW Serial to get the second serial port, and just weren't aware of the alternatives. Software SPI is probably used most often because some Uno-compatible shield "assumes" that SPI is in the Uno locations (10-13), which isn't true for many other boards. (yeah, the shield should have used the ICSP connector. But it didn't.)

Another reason is a bunch of hardware devices that are "almost SPI" but have weird issues like transaction sizes not multiples of 8bits.

Why do you care if some other users' programs are "less efficient" than they could be, because of the use of bit-banged serial protocols? If they work "adequately", that's good enough, isn't it? (Otherwise, there's a lot of other stuff to complain about, and then they start running Python.)


People are using SoftSerial because they are running out of Hardware Serial.

This happens after one, two, four... Hardware Serials. At one point of limited resources you need an alternative. SoftSerial is an alternative when you are at the end of hardware Serials.

I have never used software serial. 

This reads like you've never had the need for an implemation of several serial devices.
That's ok.
Others had the need and did therefore use Soft Serial.

oh, you have statistics about common questions here? Can you provide your figures?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.