Sprites routermod |
Laatst bijgewerkt: Thu Nov 18 22:41:46 CET 2004. NB: Alle plaatjes zijn klikbaar. |
Wat was het idee? |
Ik had na de HCC-dagen wat tijd over (nja, over... ik geloof dat de juiste term 'studie-ontwijkend gedrag' is • Eigen versie Linux geinstalleerd • Serieele poort naar een makkelijk bereikbare plek omgelegd • Grafisch LCD toegevoegd • Aan/uitzetten van andere apparaten mogelijk gemaakt |
SLOTJUH! Al 100en mensen hebben een LCD in een comp gezet!!!11 |
Vast wel, maar mijn router is geen normale PC Om specifiek te zijn: Het is een el-cheapo merkloos 'Get.Net High Performance Wireless Router' die volgens het doosje en opschriften op het kastje door niemand in 't bijzonder gemaakt wordt. Ik heb 'm op de HCC-dagen voor E25 gekocht nadat een verkoper me verzekerde dat 't ding de hardware van een Edimax in zich had. Niet dat ik een routertje nodig had, maar het is altijd leuk om ervaring op te doen met embedded systems. |
Specs |
Specs van het beestje: CPU: Realtek RTL8181 (200MHz MIPS) Switch: Realtek RTL8305SB 5 Port Switch RF: Philips Flash: 2 MB NOR Flash RAM: 16MB SDRAM WAN Port: One 10/100BaseT Fast Ethernet LAN Ports: Four 10/100BaseT Fast Ethernet Wireless: One RP-SMA Detachable Antenna Power: 12V 1A DC Linear Power Adaptor Dat zijn dezelfde specs als een Edimax br-6104wb, de verkoper lijkt dus gelijk te hebben. Het enige verschil is het uiterlijk. Dit is de Edimax: ![]() Mijn router is hetzelfde, op de behuizing na: die is compleet egaal donkerblauwgrijszwart. |
Mod 1:Linux installeren |
Zoals hierboven staat: Er zit een MIPS-processor in het routertje. Zo'n processor kan Linux draaien. Sterker: Er stond al Linux op. Hoewel dat feit een groot geheim gehouden wordt, is de software die in de meeste van dit soort cheape routers zit stiekem gewoon good ole' Linux. Realtek heeft zich zelfs redelijk goed aan de GPL gehouden: er is een SDK door Realtek uitgegeven waarmee je zelf aan de default software kan knutselen. Jammer genoeg zitten hier een paar stukjes code bij (wireless, compiler, processor-instructies, ...) waar je de source niet van bijkrijgt. Nja, de default software was natuurlijk niet goed genoeg voor me, daarom ben ik naar deze Sourceforge-site gegaan, hier komen de mensen samen die een compleet open ontwikkelomgeving voor deze interessante chip willen maken. Nja, om een lang verhaal (wat ook stiekem eigenlijk in NOS hoort) kort te maken: Mijn router draait nu een door mezelf gecompileerde kernel en doet net alsof de HD die in mijn server zit van hemzelf is (root filesystem over NFS). 160 GB is net even wat relaxeder werken dan 2 MB. Ook zitten er wat aanpassingen in de kernel om de GPIO-pinnetjes aan te kunnen sturen, meer hierover later. |
Mod 2:Serieele poort makkelijk bereikbaar maken |
Dit idee is niet origineel: op de eerder genoemde Sourceforge-site staat een halve howto. Waar het basically om gaat is dat je de draadjes van een header naar een MAX232 laat lopen, waarna er gewoon seriele data uitkomt:![]() Ziet er simpel uit, niewaar? Dat was het ook bijna. Er zit namelijk geen 5V in de router, dus heb ik een 78L05 gepakt om van de 12V die uit de adapter komt een stabiele 5V te maken. ![]() De 78l05 op een strategische plek in de voeding gesoldeerd ![]() De header. Contra-header? Waar is dat voor nodig? ![]() In deze glob hotglue en draden zit ook nog een SMD-MAX232 verstopt. ![]() En dan hebben we natuurlijk ook nog de broodnodige DB9 header. Merk op dat ik de hardware handshake, die ook op de header zat, maar even heb gelaten voor wat 'ie is. |
Mod 3:LCD aansluiten |
Zoals in de RT8181-datasheet aangegeven staat, is het chipje uitgerust met een 16-tal General Purpose I/O pinnetjes. Dat zijn pinnetjes die je als uitgang of als ingang kan configureren en softwarematig kan aansturen. In mijn router (en in de meeste routers geloof ik) is alleen GPIOB9 aangesloten, en wel aan het reset-knopje. De rest is vrij te gebruiken. Het nadeel is dat de pinnetjes verder niet aangesloten zijn, het was dus nodig om met hele fijne draadjes rechtstreeks op de chip zelf te solderen. Uiteindelijk heb ik er maar een kwak hot glue overheen gedaan om alles goed vast te zetten: ![]() De draden. Solderen aan die RTL8181 is een kloteklus kan ik je vertellen. Aan 3 van die pinnetjes heb ik een LPH7653 gehangen (E2,- op www.voti.nl), da's een klein grafisch LCDtje van 97x35 pixels, die per I2C aangestuurd wordt. Dat LCDtje past nog net in de behuizing: ![]() LCD, voorkant. ![]() LCD, achterkant. Het LCD is vastgezet met hot glue. Mijn 133t Dremel skillz zijn helaas niet helemaal optimaal wbt. plastic bewerken, dus dat is een van de aspecten die wat minder goed gelukt is. Het LCD heeft buiten 5V en 3V ook nog een negatieve spanning van minimaal -8V nodig. Gelukkig kon ik -12V aftappen van de MAX232. Nadat ik het LCD aangesloten had merkte ik echter op dat mijn router spontaan superonstabiel was: hij bootte maar 50% van de tijd helemaal door, waarna 'ie met een beetje pech binnen 10 min crashte. Lcd weggehaald: Router stabiel. Wat blijkt nou, de RTL8181 leest tijdens het booten een aantal configuratieopties (snelheid RAM etc) af uit de stand van de GPIO-pinnen. Na het booten waren de GPIO-pinnen wel weer vrij te gebruiken. Op de print zelf zaten de pinnetjes vast aan pull-up en pull-down weerstanden om de juiste configuratie in te stellen. Mijn oplossing: Ik heb een buffer tussen de uitgangen en het LCD gestopt, zodat het LCD de niveaus van de GPIO-pinnen niet meer kan aantasten: op deze manier boot het beestje wel goed. ![]() 74HC573 op z'n kop, misbruikt als buffer Nadeel ervan is echter wel dat ik geen ingangen meer heb; als ik die zou willen zou ik nog een eindje logica moeten toevoegen. Anyway; LCD aangesloten, stukje software inelkaargezet (later port ik gLCD wel naar MIPS) en nu heb ik beeld: ![]() Het LCD, werkend. Natuurlijk is het backlight software-controlled. |
Mod 4:Restant GPIO-pinnetjes naar buiten werken |
Ik had nog een zut GPIO-pinnetjes over en ik heb besloten die naar buiten te werken via een simpele header:![]() Header. Wederom hotglue pwnage. Op deze header staat ook nog 5V. Ik gebruik at the moment 1 GPIO pinnetje om mijn mp3speelbak aan en uit te zetten, de rest is nog vrij. |
Pics! |
![]() De hippe, maar non-informatieve doos waar het apparaat in zat. ![]() Voorkant. ![]() Achterkant, incl. 4-poorts ingebouwde switch en WAN-poort. ![]() De onderkant, met een zeer informatief stickertje. |
Conclusie |
Ik heb dit vooral gedaan om een beetje vertrouwd te raken met Linux op een embedded system, en eigenlijk ook voor een groot gedeelte omdat het gewoon leuk speelgoed is |
[ Voor 3% gewijzigd door Sprite_tm op 24-10-2007 17:45 ]
Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog