PIC med Ethernet och SD-kort
PIC med Ethernet och SD-kort
Jag såg denna: PIC Ethernet Board
och blev lite sugen på att göra en egen PIC server.
Någon som gjort något liknande projekt och har tips på lämpliga och billiga ethernet kretser? Lite kod kunde ju också vara trevligt att titta på.
Det hade varit kul om man kunde lägga data på SD-kort, men vad jag läst så måste man skriva 512 byte i taget vilket är mer än det RAM-minne som finns tillgängligt på PICar så det blir lite klurigt hur man ska skriva data. Om någon har interfacat ett SD-kort med PIC så vore det kul att se hur detta är gjort, gärna lite kod där med.
och blev lite sugen på att göra en egen PIC server.
Någon som gjort något liknande projekt och har tips på lämpliga och billiga ethernet kretser? Lite kod kunde ju också vara trevligt att titta på.
Det hade varit kul om man kunde lägga data på SD-kort, men vad jag läst så måste man skriva 512 byte i taget vilket är mer än det RAM-minne som finns tillgängligt på PICar så det blir lite klurigt hur man ska skriva data. Om någon har interfacat ett SD-kort med PIC så vore det kul att se hur detta är gjort, gärna lite kod där med.
Innan någon annan gör det...
Hur mycket har du letat hos www.microchip.com ??
> 512 byte i taget vilket är mer än det RAM-minne som finns tillgängligt på PICar
Var har du fått det ifrån ???
Hur mycket har du letat hos www.microchip.com ??
> 512 byte i taget vilket är mer än det RAM-minne som finns tillgängligt på PICar
Var har du fått det ifrån ???
Angående SD-kort
-------------------
Här är exempelkod (skriven för AVR men är nog inte så svår att porta): avrlib mmc
Datablad: Samsung mmc
Bra guide med mycket info: Elm-chan mmc
Man kan ställa om blocklängden (CMD16). I SDHC kort är den dock låst till 512 bytes eftersom man där anger adressen i sektorer istället för bytes.
-------------------
Här är exempelkod (skriven för AVR men är nog inte så svår att porta): avrlib mmc
Datablad: Samsung mmc
Bra guide med mycket info: Elm-chan mmc
Man kan ställa om blocklängden (CMD16). I SDHC kort är den dock låst till 512 bytes eftersom man där anger adressen i sektorer istället för bytes.
Senast redigerad av strombom 2 augusti 2008, 13:02:34, redigerad totalt 1 gång.
finns ju pic:ar med inbyggd ethernet nu. PIC18 Ethernet
Ta en titt på dataflash också, elfa har t.e.x AT45DB041B-SI
Ger halv megabyte datautrymme och mycket enklare att kommunicera än SDHC. Finns inget som hindrar att du har SDkortshåller också förvisso.
Ta en titt på dataflash också, elfa har t.e.x AT45DB041B-SI
Ger halv megabyte datautrymme och mycket enklare att kommunicera än SDHC. Finns inget som hindrar att du har SDkortshåller också förvisso.
Jag tackar för alla intressanta svar.
Först får jag ursäkta att jag kollade RAM-minnet på stenålders PICar. Finns mycket riktigt betydligt mer nu för tiden. Snart så man kan kalla en PIC för mikroprocessor
Stort tack till strombom som skickade många intressant SD-korts länkar. Ska kolla dess noggrannare.
Micke_S: mycket trevlig PIC det där...någon som har exempel kod för PIC med inbyggd ethernet? Är det lika krångligt som med USB i PIC eller är det något som man kan fixa relativt snabbt och smidigt? (Jag tröttnade på att implementera USB i PIC för det var för jobbigt. Jag menar bara man läser i databladet att det förutsätter att man kan USB protokollet blir man ju avskräckt)
Först får jag ursäkta att jag kollade RAM-minnet på stenålders PICar. Finns mycket riktigt betydligt mer nu för tiden. Snart så man kan kalla en PIC för mikroprocessor

Stort tack till strombom som skickade många intressant SD-korts länkar. Ska kolla dess noggrannare.
Micke_S: mycket trevlig PIC det där...någon som har exempel kod för PIC med inbyggd ethernet? Är det lika krångligt som med USB i PIC eller är det något som man kan fixa relativt snabbt och smidigt? (Jag tröttnade på att implementera USB i PIC för det var för jobbigt. Jag menar bara man läser i databladet att det förutsätter att man kan USB protokollet blir man ju avskräckt)
Rick81: Om du kör med microC så finns det inbyggt stöd för de nya PIC18FxxJ60 processorerna.
Men det programmet kostar ifs pengar om man nu inte hittar något annat sätt att fixa det på...
http://www.mikroe.com/
Men det programmet kostar ifs pengar om man nu inte hittar något annat sätt att fixa det på...

http://www.mikroe.com/
> finns ju pic:ar med inbyggd ethernet nu.
Men å andra sidan så får man ett mycket mindre antal olika
modeller at välja på, än om man kör med den lösa Ethernet kretsen.
Jag är inte helt säker, men jag tror inte att TCPIP programvaran
blir så där väldigt mycket enklare bara för att Ethernet hårdvaran
sitter i samma krets istället för i en separat, men kanske. Man slipper
ett extra SPI steg i alla fall. Men mindre än 64-Pin TQFP verkar man
inte komma...
Men å andra sidan så får man ett mycket mindre antal olika
modeller at välja på, än om man kör med den lösa Ethernet kretsen.
Jag är inte helt säker, men jag tror inte att TCPIP programvaran
blir så där väldigt mycket enklare bara för att Ethernet hårdvaran
sitter i samma krets istället för i en separat, men kanske. Man slipper
ett extra SPI steg i alla fall. Men mindre än 64-Pin TQFP verkar man
inte komma...
Går aldeles utmärkt att köra TCP/IP och http på en "stenålderspic" bara programminnet är tillräckligt stort.
RAMet är i princip ointressant, med rätt teknik.
Vill minnas att den första webservern utveklades för en 86a eller nått sånt.
18F452 (40-pin DIL) och dess ersättare räcker långt.
Det stora problemet med TCP/IP/Ethernet är att kontrollsummorna som räknas på hela paketet ( strax över 1500 byte) ligger i början, vilket kan skapa problem om man utgår i från att man måste ha hela paketet i minnet, vilket man inte behöver.
Det fina i det hela är att man behöver inte hålla hela paketet i minnet, man behöver i princip inget minne alls.
Grejjen går ut på att man utnytjar ethernetkretsens buffertminne, både vid sändning och mottagning.
Vid sändning skickar man paketet till ethernetkretsen, och "on the fly" sas, räknar kontrollsumman, sedan återställer man adresspekaren och skriver kontrollsumman och skickar iväg paketet.
För att speeda upp det hela, kan man, för html-sidorna använda förberäknade kontrollsummor, "addera" kontrollsumman för förändringen, och skicka den.
Vid mottagning, gör man i princip samma sak, kontrollera om det är rätt mottagare, kontrollräkna kontrollsumman, om bägge är rätt, processar man paketet, som fortfarande ligger i ethernetkretsens buffert.
Har läst nånstans om en webbserver, som ligger i en av de minsta picarna (under 1000 ord pm, och nått tiotal byte ram)
Dunkels stack lär gå att pressa in under 512 ord har jag hört, dock rätt handikappad.
Har själv skruvat ihop en server för mitt "lilla" projekt, i en 18F8722, tar just nu ca 19 kord, men då ingår HTTP och FTP server, mail-klient, plus en del annat.
Har fn implementerat TCP och UDP samt SMTP, förutom MAC-Lagret, ARP och IP.
Nästa steg är DHCP, både klient och ev server.
Bträffande SD så är det iofs inte speciellt svårt, så länge man inte ger sig på att implementera FAT.
SD och använder sig bl.a. av nåt I2C liknande protolkoll (förutom USB) vill jag minnas, så det är bara att skriva i princip.
Vill man ha det PC-läsbart och inte känner för att implementera FAT, så kan man göra det "the dirty way", dvs använda förformaterade minnen med, skapa filen på kortet med en PC, hacka kortet, för att ta reda på absoluta adresser till filen i fråga samt äve de ställen i FAT som håller reda på start/stopp/storlek och ev datum, hårdkoda dessa adresser, sedan är det bara att skriva, och vips har man ett PC-kompatibelt SD-kort.
Vill man implementera FAT, så finns det några mer eller mindre PD-versioner att tillgå, annars kan man hämta hem hela specen från MS, vilket är gratis, så länge man inte börjar sälja produkten (då får man ev betala en licens till MS).
Gissar dock att man behöver gå upp till PIC24 eller hellre PIC32 för att det skall bli nån vidare bra lösning om man vill ha hela FATen implementerad.
De FATonChip jag sett hitills och även de flesta PD lösningar brukar vilja ha en ARM eller liknande
RAMet är i princip ointressant, med rätt teknik.
Vill minnas att den första webservern utveklades för en 86a eller nått sånt.
18F452 (40-pin DIL) och dess ersättare räcker långt.
Det stora problemet med TCP/IP/Ethernet är att kontrollsummorna som räknas på hela paketet ( strax över 1500 byte) ligger i början, vilket kan skapa problem om man utgår i från att man måste ha hela paketet i minnet, vilket man inte behöver.
Det fina i det hela är att man behöver inte hålla hela paketet i minnet, man behöver i princip inget minne alls.
Grejjen går ut på att man utnytjar ethernetkretsens buffertminne, både vid sändning och mottagning.
Vid sändning skickar man paketet till ethernetkretsen, och "on the fly" sas, räknar kontrollsumman, sedan återställer man adresspekaren och skriver kontrollsumman och skickar iväg paketet.
För att speeda upp det hela, kan man, för html-sidorna använda förberäknade kontrollsummor, "addera" kontrollsumman för förändringen, och skicka den.
Vid mottagning, gör man i princip samma sak, kontrollera om det är rätt mottagare, kontrollräkna kontrollsumman, om bägge är rätt, processar man paketet, som fortfarande ligger i ethernetkretsens buffert.
Har läst nånstans om en webbserver, som ligger i en av de minsta picarna (under 1000 ord pm, och nått tiotal byte ram)
Dunkels stack lär gå att pressa in under 512 ord har jag hört, dock rätt handikappad.
Har själv skruvat ihop en server för mitt "lilla" projekt, i en 18F8722, tar just nu ca 19 kord, men då ingår HTTP och FTP server, mail-klient, plus en del annat.
Har fn implementerat TCP och UDP samt SMTP, förutom MAC-Lagret, ARP och IP.
Nästa steg är DHCP, både klient och ev server.
Bträffande SD så är det iofs inte speciellt svårt, så länge man inte ger sig på att implementera FAT.
SD och använder sig bl.a. av nåt I2C liknande protolkoll (förutom USB) vill jag minnas, så det är bara att skriva i princip.
Vill man ha det PC-läsbart och inte känner för att implementera FAT, så kan man göra det "the dirty way", dvs använda förformaterade minnen med, skapa filen på kortet med en PC, hacka kortet, för att ta reda på absoluta adresser till filen i fråga samt äve de ställen i FAT som håller reda på start/stopp/storlek och ev datum, hårdkoda dessa adresser, sedan är det bara att skriva, och vips har man ett PC-kompatibelt SD-kort.
Vill man implementera FAT, så finns det några mer eller mindre PD-versioner att tillgå, annars kan man hämta hem hela specen från MS, vilket är gratis, så länge man inte börjar sälja produkten (då får man ev betala en licens till MS).
Gissar dock att man behöver gå upp till PIC24 eller hellre PIC32 för att det skall bli nån vidare bra lösning om man vill ha hela FATen implementerad.
De FATonChip jag sett hitills och även de flesta PD lösningar brukar vilja ha en ARM eller liknande
Sorry, ingen kod och inga scheman, patent mm.
Använder RTL8019 fn. Funderar dock på att byta till en 100Mb Krets.
Har inte hittat nån vettig 1Gb än.
Innan nån annan gör sig lustig över att köra en PIC på ett 1Gb Nätverks.
Naturligtvis kan man inte förvänta sig att kunna stream 1Gb med en 10MIPS processor, det är fullständigt omöjligt, går i princip inte ens att streama i 10Mb/s.
MEN, varje paket skickas med den högre hastigheten, vilket gör kommunikationen snabbare, sedan att jag kanske inte kan skicka mer än nått hundratal paket per sekund, har ingen betydelse, packet går iväg med full bandbredd.
Som en start kan du kika poå uCHIP's PICDEM.Net, den gamla versionen med RTL8019.
Den nya använder ENC, vill jag minnas, alternativt nån med PIC med inbyggd MAC.
Sedan finns det rätt många mer eller mindre färdiga projekt på nätet.
En av dem är Adam Dunkel's uIP, eller vad den heter.
Jeremy Bantam (tror jag han heter) har också gjort en, dessutom har han skrivit en bra bok.
Lite länkar:
http://www.iosoft.co.uk
http://www.picoweb.net
http://www.unusualresearch.com/tinytcp/tinytcp.htm
http://www.sics.se/~adam/uip/index.php/Main_Page
Nödvändigt är att läsa, riktigt mycket, annars har man inte chans att först vad som händer, och varför.
Skaffa några bra böcker, den från IOSOFT rekommenderas, finns även några svenska, som ger en hyffsad inblick i TCP/IP/Ethernet.
Nödvändigt är också att kunna alla RFC, helst utantill, ungefär som "gångertabellen", samma gäller kretsarna.
Använder RTL8019 fn. Funderar dock på att byta till en 100Mb Krets.
Har inte hittat nån vettig 1Gb än.
Innan nån annan gör sig lustig över att köra en PIC på ett 1Gb Nätverks.
Naturligtvis kan man inte förvänta sig att kunna stream 1Gb med en 10MIPS processor, det är fullständigt omöjligt, går i princip inte ens att streama i 10Mb/s.
MEN, varje paket skickas med den högre hastigheten, vilket gör kommunikationen snabbare, sedan att jag kanske inte kan skicka mer än nått hundratal paket per sekund, har ingen betydelse, packet går iväg med full bandbredd.
Som en start kan du kika poå uCHIP's PICDEM.Net, den gamla versionen med RTL8019.
Den nya använder ENC, vill jag minnas, alternativt nån med PIC med inbyggd MAC.
Sedan finns det rätt många mer eller mindre färdiga projekt på nätet.
En av dem är Adam Dunkel's uIP, eller vad den heter.
Jeremy Bantam (tror jag han heter) har också gjort en, dessutom har han skrivit en bra bok.
Lite länkar:
http://www.iosoft.co.uk
http://www.picoweb.net
http://www.unusualresearch.com/tinytcp/tinytcp.htm
http://www.sics.se/~adam/uip/index.php/Main_Page
Nödvändigt är att läsa, riktigt mycket, annars har man inte chans att först vad som händer, och varför.
Skaffa några bra böcker, den från IOSOFT rekommenderas, finns även några svenska, som ger en hyffsad inblick i TCP/IP/Ethernet.
Nödvändigt är också att kunna alla RFC, helst utantill, ungefär som "gångertabellen", samma gäller kretsarna.
Kan annars rekommendera http://www.ftpmicro.com, En italienare som gjort
Schema och kod för att köra Microchips 18f97j60 tillsammans med ett FAT-formaterat SD kort. Färdiga kort finns att köpa.
Har byggt vidare på den själv, nån form av ögonblicksstatus fanns på
borttagen men trafiken sänkte min router.
Kortet, som är 2,5x4cm tvålagers ytmonterat med 0603 komponenter, är tillverkat i Kina av PCBCart.com
/&&
Schema och kod för att köra Microchips 18f97j60 tillsammans med ett FAT-formaterat SD kort. Färdiga kort finns att köpa.
Har byggt vidare på den själv, nån form av ögonblicksstatus fanns på
borttagen men trafiken sänkte min router.
Kortet, som är 2,5x4cm tvålagers ytmonterat med 0603 komponenter, är tillverkat i Kina av PCBCart.com
/&&
Senast redigerad av jas39 1 augusti 2008, 16:42:40, redigerad totalt 1 gång.
Försökte mig på ett projekt med att porta ett FAT biblotek+SD till en pic för många år sen. koden var i C så tänkte väll "hur svårt kan det va" då falerade allt på att det inte går att direkt adressera 512byte minne med 8bitars addressering(byta bank i mitten blev struligt). Finns säkert nått bra kompilator trix för detta eller så är det löst nu men då kom jag aldrig över den tröskeln.