Arduinos SPI vs bibliotek med egna implementationer
Arduinos SPI vs bibliotek med egna implementationer
Kommer att behöva köra tre SPI-enheter på en Mega: radiomodul baserad på CC110L, ethernetmodul baserad på ENC28J60 och åskdetektor AS3935.
Nu har jag redan CC110L i användning med Panstamp-biblioteket som har egen SPI-implementation som skriver/läser Atmegans register, och Ethershield-biblioteket har också en liknande. AS3539-exemplet använder Arduinos SPI-bibliotek.
Nu är frågan om man bör skriva om de två andra biblioteken att använda Arduinos egen implementation eller kan de existera tillsammans?
Till saken hör också att AS3935 behöver Mode1 och jag kommer att behöva skifta mellan dem. Kan man pålitligt blanda in SetDataMode tillsammans med de andra implementationerna?
Man får en känsla av att biblioteken förutsätter att få vara ensamma på bussen.
Edit: AS3935 ska det ju vara, typo.
Nu har jag redan CC110L i användning med Panstamp-biblioteket som har egen SPI-implementation som skriver/läser Atmegans register, och Ethershield-biblioteket har också en liknande. AS3539-exemplet använder Arduinos SPI-bibliotek.
Nu är frågan om man bör skriva om de två andra biblioteken att använda Arduinos egen implementation eller kan de existera tillsammans?
Till saken hör också att AS3935 behöver Mode1 och jag kommer att behöva skifta mellan dem. Kan man pålitligt blanda in SetDataMode tillsammans med de andra implementationerna?
Man får en känsla av att biblioteken förutsätter att få vara ensamma på bussen.
Edit: AS3935 ska det ju vara, typo.
Senast redigerad av JanErik 30 januari 2015, 11:37:19, redigerad totalt 1 gång.
Re: Arduinos SPI vs bibliotek med egna implementationer
Beroende på hur koden är skriven så kanske du behöver skriva eget. Så länge koden är blockerande under läsning och inte använder interrupt så lär de kunna samexistera...
Re: Arduinos SPI vs bibliotek med egna implementationer
Interrupt använder nog alla men ingenting så ofta eller tidskritiskt att det inte kan vänta tills pågående SPI-operation är klar. Men jag blir ju tvungen att bara sätta en flagga för dessa interruptar och utföra det i huvudloopen.
Re: Arduinos SPI vs bibliotek med egna implementationer
Om de olika "buss-användarna" är autonoma och kapslade till arbetsättet så lär du få problem. Du måste ju på något sätt kunna kontrollera användarnas bussåtkomster så att du kan tidsmultiplexa dem utan överlapp - utan insyn/ingrepp i de olika lib:arn blir det nog svårt att ta kontrollen över hur och när bussåtkomsterna sker.
I de fall jag behövt samköra flera spi-enheter i realtidsliknande system har jag implementerat en slags central trådsäker spi-delare från vilken de olika användarna fått "checka ut" bussen, utföra sin buss-operation och sedan "checka in" bussen igen.
Istället för att låta interruptrutiner komma åt bussen direkt har jag buffrat händelsen i väntan på behandling i separat konsumtionstråd (eller main loop).
AS3935 (antar att AS3539 är en typo?) stöder ju även i2c så du kunde överväga att om möjligt använda det istället där så får du åtminstone en användare färre.
I de fall jag behövt samköra flera spi-enheter i realtidsliknande system har jag implementerat en slags central trådsäker spi-delare från vilken de olika användarna fått "checka ut" bussen, utföra sin buss-operation och sedan "checka in" bussen igen.
Istället för att låta interruptrutiner komma åt bussen direkt har jag buffrat händelsen i väntan på behandling i separat konsumtionstråd (eller main loop).
AS3935 (antar att AS3539 är en typo?) stöder ju även i2c så du kunde överväga att om möjligt använda det istället där så får du åtminstone en användare färre.
- Lennart Aspenryd
- Tidigare Lasp
- Inlägg: 12607
- Blev medlem: 1 juli 2011, 19:09:09
- Ort: Helsingborg
Re: Arduinos SPI vs bibliotek med egna implementationer
Detta verkar vara en vettig beskrivning
http://dator.wingwit.com/Hardvara/compu ... 46766.html
http://dator.wingwit.com/Hardvara/compu ... 46766.html
Re: Arduinos SPI vs bibliotek med egna implementationer
Skall tilläggas att min s.k "spi-delare" alltså växlade spi-konfig (hastighet, mode, flanker) mellan resp ut/in-checking.
@Lasp: Det är nog inte där probelemet ligger.
@Lasp: Det är nog inte där probelemet ligger.
Re: Arduinos SPI vs bibliotek med egna implementationer
Jag har inte använt SPI till mer än en enhet, än, men det kommer.
Jag hittade ett alternativ till det medskickade SPI-libet.
Minns inte var jag hittade det, men det hade en spi-session struct med som innehöll just mode, hastighet och flank. Denna struct skickades till SPI-klassen när en session för en enhet började. En ny (annan) spi-session kunde inte startas förrän den pågående hade avslutats. Jag tror att det enda som jag saknade var vilken CS-pinne som skulle användas, iaf när jag kollade den. De kan ha kallat det SPI-transaction, minnet är inte vad det borde....
Jag hittade ett alternativ till det medskickade SPI-libet.
Minns inte var jag hittade det, men det hade en spi-session struct med som innehöll just mode, hastighet och flank. Denna struct skickades till SPI-klassen när en session för en enhet började. En ny (annan) spi-session kunde inte startas förrän den pågående hade avslutats. Jag tror att det enda som jag saknade var vilken CS-pinne som skulle användas, iaf när jag kollade den. De kan ha kallat det SPI-transaction, minnet är inte vad det borde....