main index The Beagleboard expansion connector has 14+14 pins; 22 of them can be configured in different ways.

As of Table 21 of BBSRM (page 97-98 of revision C2 PDF-manual):

This means that everyone has to select his personal preferred combination of non-overlapping pins. Example: if you need McSPI3 then you can't have MMC2 too, because MMC2 uses pin 21,19,17 that are required for MMC2.

Thus, first decide what you absolutely need, then feel free to assign all other pins. Note: we already have an UART RS232 available (but I prefer to consider it only for terminal access), and we have already an I²C available on the LCD-signals bus (I do not plan to use LCD, so I am glad to have already an I²C available, but it would be better to me to have another one, and SPI ports as well). My personal plan, in priority order, is:

  1. SPI, I²C
  2. PWM
  3. UART (tx/rx only, no cts/rts)
  4. GPIO
  5. MMC2

So I chose to allocate pins:

Good! I will then have 2 UART (a normal one and a 1.8V one), two SPI and two I²C ports (all at 1.8V), two timers/PWM pins and eight GPIO "interrupt-capable".

This is indeed quite a large set of features. Most common sensors and chips are SPI- or I²C-driven; only eight GPIOs, but we already have two buttons and four LEDs (meaning that we won't waste 5-6 GPIO lines).

Note: level converters (or logic level shifters) are needed, because 1.8V is quite uncommon for sensors (3.3V and 5V are more common).

If I want to enable MMC2 then a sacrifice is needed: a SPI port and six lines chosen between GPIO (at least four) and GPT_PWM. Example:

Pins can be reprogrammed anytime, but some care will be needed for multiplexing those ten pins. If only GPIO lines are needed, then I guess the easiest way is to use pin 21 ("GPIO_130" and "MMC2_CLKO"): when MMC2 is not needed, keeping low GPIO_130 will make the MMC card see "no clock" and leave the remaining 9 GPIO pins available for input, output and interrupts.