What should we name the Electron pins?


#1

Hi folks!
We’re laying out the Electron and there’s a design question we’d love to have your input on.

The Electron has lots of pins- 18 on each side, 36 in total! We need to name those pins, and think it’s unlikely that we’ll have enough analog pins for all of the A-named pins to actually be analog inputs if we follow the current naming scheme.

The alternative is that we drop the A# = Analog, D# = Digital naming pattern and create a new one. For this new pattern we’ve been thinking about L# = Left side and R# = Right side. It no longer conveys what the pins do, but also avoids misleading people with incorrect information, like where the A-pins aren’t actually analogRead capable.

Oh, and there’s another complication- the GSM module we’re using is quite wide. If you look at the photos of the Electron from the campaign, you’ll see that there’s no space for silkscreen labels for many of the pins. D1-D10 and A1-A10 will ALL be unlabelled, so their names need to be obvious from their neighbors.

To address both these problems we’ll probably be shipping the Electrons with a reference card, so you’ll have an easy way to look up what capabilities each pin has, but we still need to pick the names.

Options:

AD: Follow the current naming scheme:

        USB
VIN  -       -  3v3
GND  -       -  RST
 TX  -       -  VBAT
 RX  -       -  GND
A13  -       -  D13 
A12  -       -  D12 
A11  -       -  D11 
A10  -       -  D10
 A9  -       -  D9
 A8  -       -  D8
 A7  -       -  D7
 A6  -       -  D6
 A5  -       -  D5
 A4  -       -  D4
 A3  -       -  D3
 A2  -       -  D2
 A1  -       -  D1
 A0  -       -  D0
        ANT

LR: Left and Right-themed alternative

        USB
VIN  -       -  3v3
GND  -       -  RST
TX   -       -  VBAT
RX   -       -  GND
L13  -       -  R13 
L12  -       -  R12 
L11  -       -  R11 
L10  -       -  R10
 L9  -       -  R9
 L8  -       -  R8
 L7  -       -  R7
 L6  -       -  R6
 L5  -       -  R5
 L4  -       -  R4
 L3  -       -  R3
 L2  -       -  R2
 L1  -       -  R1
 L0  -       -  R0
        ANT

Let us know if you prefer AD or LR in the comments, and why!


#2

how about pin 1 to pin 36?


#3

Is there a reason they still can’t be named for what they (normally) do? AnalogRead pins are A#, DACs are DACs, and all others are D#. I don’t think people will have a problem with some D# on the left side of the board.

WRT the labels, how about labels on the bottom?


#4

I highly suggest not reinventing the wheel (Ardunio nomenclature). :smile:


#5

Are you saying Arduino did re-invent the wheel or that we shouldn’t re-invent the wheel and go w/ Arduino nomenclature?


#6

Given the choice - AD.
Left and right will always cause some confusion when the board is rotated or flipped over. :open_mouth:


#7

Took me a few to figure out what WRT was!! LOL

  • Reminded me of the line from the original “Odd Couple” movie… “You leave me little notes on my pillow. … “We’re all out of cornflakes. F.U.” Took me three hours to figure out F.U. was Felix Ungar!”
    :smile:

#8

@harrisonhjones, funny! Let’s stick to AD :unamused:


#9

I suggest you also consider keeping A0-7 and D0-7 in the same location (relative to the power, reset, tx and rx pins):

       USB
VIN -       - 3v3
GND -       - RST
TX  -       - VBAT
RX  -       - GND
A7  -       - D7
A6  -       - D6
A5  -       - D5
A4  -       - D4
A3  -       - D3
A2  -       - D2
A1  -       - D1
A0  -       - D0
A8  -       - D8
A9  -       - D9
A10 -       - D10
A11 -       - D11
A12 -       - D12
A13 -       - D13
       ANT

The somewhat counter-intuitive nature of this is outweighed by the fact that the existing pins are 100% backwards compatible with the previous parts.

This way, sketches can run nominally unchanged on all 3 of particle’s devices for the 24 pins closest to the usb connector (e.g. in the same connector footprint.)

I also suggest adding silkscreen in the underside of the PCB if that is at all possible.


#10

We can make pin name compatibility work between the Photon and Electron with a flag/mode in user software, already talking about doing that.

The big downside to doing the A0-A7, then jumping down to A13-A8 is that it’ll actually look like this on the board. That’s a mighty difficult pattern to infer from.

       USB
VIN -       - 3v3
GND -       - RST
TX  -       - VBAT
RX  -       - GND
A7  -       - D7
A6  -       - D6
A5  -       - D5
    -       - 
    -       - 
    -       - 
    -       - 
    -       - 
    -       - 
    -       - 
    -       - 
    -       - 
    -       -    
A13 -       - D13
       ANT

(since we’re short on top silkscreen space… though we’ll certainly try to cram it in on the bottom)


#11

I second @harrisonhjones idea. Keep A# meaning analog and D# meaning digital across the Core/Photon/Electron.


#12

I don’t like the idea of the software compatibility flag that renames pins, in addition to it being one more thing to silently get wrong, you’ll need to also ensure that the other functions also remap, and I think that will very quickly turn into a Gordian knot.

I understand the tricky situation you are in; I fear that there is no perfect solution, just the least bad compromise.


#13

Just a thought for the A but not analog pins (which should also be possible on limited space).
How about shaped solder pads/lands (or silkscreen) - square for digital and circles for analog (maybe diamond for PWM)?

And I agree with @harrisonhjones and @sazp96, there is no need to have all pins of one side exclusive A or D.

Also since all pins can do digital, the D is a somewhat redundant info, but its place might still be used (e.g. for P as PWM) - but the original D0…D7 should still be defined for backward compatibility.

For backward compatibility I’m also thinking: "How will the underlaying (Arduino style) numbering be handled?"
Since some of the Core/Photon samples rely on the fact that Dx = x and Ax = Dx+10, this logic would break with D10…D13.


#14

#15

I like AndyW idea very much, but to prevent confusion, we could use more letters: say C & B or AA and DD

       USB
VIN -       - 3v3
GND -       - RST
TX  -       - VBAT
RX  -       - GND
A7  -       - D7
A6  -       - D6
A5  -       - D5
A4  -       - D4
A3  -       - D3
A2  -       - D2
A1  -       - D1
A0  -       - D0
B5  -       - C5
B4  -       - C4
B3  -       - C3
B2  -       - C2
B1  -       - C1
B0  -       - C0
       ANT

or

        USB
 VIN -       - 3v3
 GND -       - RST
 TX  -       - VBAT
 RX  -       - GND
 A7  -       - D7
     -  skip  -
 A1  -       - D1
 A0  -       - D0
AA5  -       - DD5
AA4  -       - DD4
AA3  -       - DD3
AA2  -       - DD2
AA1  -       - DD1
AA0  -       - DD0
       ANT

#16

I strongly agree with @AndyW


#17

AD for sure! LR is not useful, you will need to look what is L1 in documentation. However if you see A1 you directly know it is an analog input channel.


#18

I like @ryotsuke’s refinement very much.

However, the numbering of the B/C pins, creates the opportunity for a repeat of this problem if there are different pin counts for future products.


#19

for any solution you come up with please duplicate it on the back of the board. In this way if you wonder you could pop it out from the breadboard and read the backside instead of finding a reference card that is inevitably going to get lost.

This is especially important in the beginning of learning so once you decide to solder a unit into a product you have hopefully graduated from this.


#20

Not the LR. It doesn’t correspond to any chip pin naming I’ve ever seen. It does not promote clarity or obviousness My vote is AD.

But… Not being able to see the nomenclature because of the GSM module renders the issue irrelevant