SD_MMC_Howto
This document tries to collate all the bits and pieces related to adding a SD/MMC card to the biffboard.
,
Still fits perfetctly well in the original case!
Ignore the other "floating" wires in the pictures -- it's my "floating" serial connector, that can be folded back in the case.
As of today 22/10/09:
The card can be used to boot a kernel, but there are no tools to prepare cards to do so - it needs a "lilo" lke block list that is not practical to use.
There is no support for having the root filesystem on the SD card as of today, however a pivot-root is possible, but it's impractical since it would need another root file sytem somewhere to pivot, from.
It is still possible to use a card for storage, without locking up the USB port.
Prerequisites
Kynar wire.
JTAG must be disabled -- see below
biffboot requires a particular pinout to recognize the card
You need reasonably good soldering skills
Kynar wire
Some people want to use piece of electrical wire they have around, but really, for board patching, you need Kynar Wire. It's 30awg insulated wire that is easy to route, easy to solder, easy to mess up, easy to melt the insulation of etc etc, however, it's essential. You can pick a roll on eBay for a few bucks. It'll last for years and years.
Unrelated: I often do complete prototyping bits with just kynar wire. You need some, go and get it.
Disabling JTAG
There are various documents related to this, but I'll duplicate it here because it's a prerequisite, and to show how I did it on my board. The key to it is R19. I removed it by heating one side with the iron and pulling gently on the resistor with tweezers. After a couple of seconds the heat is enough to soften the solder on the other side of the resistor and it is easy to remove.
I attached some Kynar to the pad and route it to a GND pin from the nearby connector.
I used a 1.5K pulldown (the "152" in the picture); it's a 0805 SMD resitor, if you don't have any you can find whole kits of 0805 for next to nothing on eBay -- check "surelectronics" seller, for example.
How I added the resistor:
The idea is to melt the solder on the pad/pin, and approach/slide the resitor with tweezers, then remove the iron once one end of the resitor is in the melted solder.
Once that is done, add a tiny amount of solder to the other side of the resistor, and approach the end of the kynar wire. There you go, clean pulldown.
Pinout
SD card
From Biffboot page, you get some information on that, it's for straight MMC card in SPI mode, the microSD is similar.
Pin2: CLK GPIO 11
Pin3: MISO GPIO 13
Pin4: CS GPIO 9
Pin5: MOSI GPIO 12
MicroSD
The pinout is very similar, you get a couple of unused pins and one less GND to connect:
MicroSD Slot fitting
I used the cheapest PCB micro-sd slot available (£0.44 at farnell). I buy these because they are 1) cheap 2) smallest footprint -- they are not the fancy ones with push/push insert/eject etc, but they do the job for small amount of card manipulation. The fancy ones will probalby work too.
What I did was to superglue it, wrong side up to the memory IC. Use a single small drop of superglue, you don't want it to spill. The base of the slot (where the wires are) are at the top, easy to solder onto. The MicroSD is sticking out so it is easy to remove once you do the cutout in the case.
Ignore the 4 wires to the left, it's my serial port header
Without the card inserted, note I offseted the slot some too, to have a wide gap to the CPU heatsink.
Linux Configuration
Work in progress, we need a platform driver for this; right now it uses the configfs method, that is not ideal.
Install necessary modules
# modprobe gpiommc
gpiommc: Unknown symbol spi_gpio_next_id
# modprobe rdc321x_gpio
RDC321x GPIO driver: 'bank1' enabled
RDC321x GPIO driver: 'bank2' enabled
Mount configfs, if needed
# mkdir /config
# mount -t configfs configfs /config
Configure the gpiommc module
# mkdir /config/gpiommc/card
# cd /config/gpiommc/card/
# ls
gpio_chipselect max_bus_speed
gpio_chipselect_activelow register
gpio_clock spi_delay
gpio_data_in spi_mode
gpio_data_out
# echo 11 >gpio_clock
# echo 13 >gpio_data_out
# echo 9 >gpio_chipselect
# echo 12 >gpio_data_in
# echo 3 >spi_mode
Start / register the card to the kernel
# echo 1 >register
mmc_spi spi32765.0: ASSUMING 3.2-3.4 V slot power
mmc_spi spi32765.0: SD/MMC host mmc0, no DMA, no WP, no poweroff
gpio-mmc: MMC-Card "card" attached to GPIO pins di=12, do=13, clk=11, cs=9
mmc_spi spi32765.0: can't change chip-select polarity
mmc0: host does not support reading read-only switch. assuming write-enable.
mmc0: new SD card on SPI
mmcblk0: mmc0:0000 SD01G 982 MiB
mmcblk0: p1 p2
Remind busybox to create the device files
# mdev -s
# mount /dev/mmcblk0p1 /mnt/
kjournald starting. Commit interval 5 seconds
EXT3 FS on mmcblk0p1, internal journal
EXT3-fs: recovery complete.
EXT3-fs: mounted filesystem with writeback data mode.
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 9647 2780 6379 30% /
mdev 14904 0 14904 0% /dev
none 14904 0 14904 0% /dev/shm
/dev/mmcblk0p1 4039 2872 963 75% /mnt