Karta SD w La fonerze, czyli jak zrobić sobie więcej miejsca na pakiety
Ostatnia zmiana: 2013-11-26 18:43
La Fonera (w wersji FON2100A/B/C) dysponuje złączem na krawędzi płytki na którym wyprowadzone są sygnały GPIO. Można do nich dołączyć różne rzeczy; jedną z nich jest karta SD (czyli robimy tzw. SD-MOD).
Hardware
Potrzebne są:
- La Fonera (model FON2100A/B/C w tym przypadku)
- złącze kart SD lub czytnik kart SD
- kawałek 6 lub 7 żyłowej taśmy (takiej jak od dysku PATA)
La Fonera
Z urządzenia należy usunąć kilka elementów (R117, R118, R119, R120 na spodzie oraz C142, C143, C144, C145 na górze płytki przy krawędzi złącza SW1). Są one zbędne i wprowadzają zakłócenia na gpio, więc należy je usunąć (wylutować).
SD
Jeżeli nie mamy samego złącza SD można kupić na allegro tanie i popularne czytniki kart SD - rozebrać go i wylutować wszystkie elementy oprócz złącza. Płytka przydatna jest w lutowaniu kabelków do złącza, więc należy ją zostawić. Ew. można użyć adaptera SD / microSD i przewody przylutować bezpośrednio do adaptera.
Połączenie
Karta SD ma 9 styków numerowanych w następujący sposób
..9 1 2 3 4 5 6 7 8
..._________________
../ # # # # # # # # |
./ # # # # # # # # |
.|# |
Natomiast złącze SW1 w La Fonera oznaczone jest następująco:
|
|____________
|
| port RJ45
|____________
|
| **
| * 1
| * 2
| * 3
| * 4
| * 5
| * 6
| **
|
|
Nie wnikając w szczegóły oznaczeń, kartę SD (złącze) należy podłączyć do fonery w następujący sposób
Karta SD La Fonera
9
1 CS 6 (GPIO 7)
2 DI 5 (GPIO 1)
3 GND GND
4 VDD 3 (+3,3v)
5 CLK 2 (GPIO 4)
6 GND GND
7 DO 1 (GPIO 3)
8
Dodatkowo złącze 3 i 6 karty SD należy połączyć razem i do masy (GND) La Fonery (czyli np. jeden z czterech dużych punków złącza J3 poniżej SW1 - patrz zdjęcia).
Złącza 8 i 9 karty SD (skrajne) należy zostawić niepodłączone.
Oryginalne rozwiązanie podaje jeszcze potrzebę wlutowania rezystora 10KOhm pomiędzy DO i VDD (złącza 7 i 4 karty SD lub 1 i 3 SW1 fonery). W moim rozwiązaniu brakuje tego rezystora, ale jeżeli będą jakiekolwiek problemy z dostępem do karty należy go wlutować.
Software
Trzeba skompilować OpenWrt Kamikaze/trunk z svn (w tym przypadku: r10937), pamiętając o zaznaczeniu pakietu kmod-mmc-over-gpio (w
Kernel modules/Other modules - inne potrzebne zaznaczą się samodzielnie). Oczywiście, aby mieć pożytek z tego, należy jeszcze zaznaczyć jeszcze moduły do obsługi systemów plików i stron kodowych, czyli w sumie:
kmod-mmc-over-gpio
kmod-fs-vfat
kmod-fs-ext2
kmod-fs-ext3
kmod-nls-base
kmod-nls-cp437
kmod-nls-iso8859-1
Dodatkowo oczywiście to co jest nam potrzebne: serwer ftp, http, klient torrenta itd.
Uwaga: domyślnie plik /etc/init.d/mmc_over_gpio zawiera definicje wykorzystywanych gpio. Problem w tym, jedno z nich definiuje gpio5, które w la fonerze powiązane jest z resetem. Zostawiając taki wpis spowodujemy, że fonera będzie się cały czas rebotowała! Należy więc PRZED kompilację zakomentować linię
add_device "default" 5 4 3 7 0
i dodać nową zgodnie z naszą definicją wykorzystywanych gpio czyli
add_device "default" 1 3 4 7 0
w pliku
package/mmc_over_gpio/files/mmc_over_gpio.init. Tak przygotowane środowisko należy skompilować i zainstalować firmware na fonerze.
Dla Kamikaze 8.09 wystarczy zainstalować w/w pakiety wraz z zależnościami.
Aktualizacja: powyższy opis dotyczy starszej wersji trunka lub 8.09. W obecnym trunku konfigurację wykonuje się w pliku /etc/config/mmc_over_gpio
Testowanie
Uruchomienie
/etc/init.d/mmc_over_gpio enable
/etc/init.d/mmc_over_gpio start
Po uruchomieniu w logu (dmesg) powinny pojawić się m.in. następujące informacje:
mmc_spi spi32766.0: ASSUMING 3.2-3.4 V slot power
mmc_spi spi32766.0: SD/MMC host mmc0, no DMA, no WP, no poweroff
spi-gpio-mmc: MMC-Card "default" attached to GPIO pins 1,3,4,7
mmc_spi spi32766.0: can't change chip-select polarity
mmc0: problem reading switch capabilities, performance might suffer.
mmc0: new SD card on SPI
mmcblk0: mmc0:0000 SD 1960448KiB
mmcblk0: p1
(w tym przypadku w złączu była 2GB karta SD GOODRAM). Jak widać została znaleziona jedna partycja, więc można ją podmontować (wcześniej należy upewnić się, że załadowane są odpowiednie strony kodowe)
mkdir -p /hdd
insmod nls_base
insmod nls_cp437
insmod nls_iso8859-1
i samo montowanie
mount -t vfat /dev/mmcblk0p1 /hdd
Sukces! Teraz można już normalnie korzystać z karty i postawić serwerek FTP, małe WWW czy ctorrenta (lub zbierać logi z aircracka, ale to już inny temat).
W przypadku błędów należy najpierw upewnić się, że właściwie zostały zlutowane kabelki i nie ma zwarcia pomiędzy poszczególnymi sygnałami.
Wydajność
Niestety, wydajność nie jest najlepszą stroną rozwiązania ponieważ wykorzystywane są porty GPIO do sterowania kartą, a sam sterownik jest dość uniwersalny, żeby można było samodzielnie ustalić piny.
Testy wykonałem w następujący sposób: La Fonera z zamontowaną kartą SD, postawiony serwer FTP (vsftpd, pełny dostęp do anonymousa, jako root wskazany punkt montowania karty). Testy polegały na przesłaniu ok 25MB pliku zawierające binarne dane losowe na kartę a później odczyt tego pliku. Oto wyniki:
ftp> mput test.bin
mput test.bin? y
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
25721919 bytes sent in 404.54 secs (62.1 kB/s)
ftp> lcd /tmp/
Local directory now /tmp
ftp> mget test.bin
mget test.bin? y
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test.bin (25721919 bytes).
226 File send OK.
25721919 bytes received in 414.85 secs (60.6 kB/s)
ftp>
Czyli jak widać ok 60 kilobajtów /s. Szybko to nie jest, ale pewnie znajdą się zastosowania SD gdzie szybkość nie ma aż takiego znaczenia. Obciążenie procesora na La Fonerze podczas transmisji sięgało 92%.
Zakończenie
Rozwiązanie
nie jest hot-plug, czyli nie można karty wyjmować i wkładać podczas pracy systemu.
Jeden obrazek za tysiąc słów, czyli:

(kliknij, aby powiększyć)

(kliknij, aby powiększyć)

(kliknij, aby powiększyć)

(kliknij, aby powiększyć)