Arduinos SPI vs bibliotek med egna implementationer

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Arduinos SPI vs bibliotek med egna implementationer

Inlägg av JanErik »

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.
Senast redigerad av JanErik 30 januari 2015, 11:37:19, redigerad totalt 1 gång.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Arduinos SPI vs bibliotek med egna implementationer

Inlägg av Micke_s »

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...
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: Arduinos SPI vs bibliotek med egna implementationer

Inlägg av JanErik »

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.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Arduinos SPI vs bibliotek med egna implementationer

Inlägg av hanzibal »

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.
Användarvisningsbild
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

Inlägg av Lennart Aspenryd »

Detta verkar vara en vettig beskrivning
http://dator.wingwit.com/Hardvara/compu ... 46766.html
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Arduinos SPI vs bibliotek med egna implementationer

Inlägg av hanzibal »

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.
Användarvisningsbild
Ulf
Inlägg: 399
Blev medlem: 15 februari 2006, 14:04:03

Re: Arduinos SPI vs bibliotek med egna implementationer

Inlägg av Ulf »

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....
Skriv svar