SPI na GPIO ?

Oct 31, 2004 6 Replies

Ogladalem sobie wlasnie

formatting link
sie zastanawiam czy sa jakies przeciwskazania do wieszania urzadzen SPI na GPIO poza wolna praca ? Zna ktos moze jakis przykladowy kod pod Linuxa do eksperymentow ?



Pozdrawiam.


nie testowany, nie sprawdzający błędów, napisany w 5 minut kod:

#include <linux/ppdev.h>

#include <sys/ioctl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int fd;

void init(void) { int x;

fd = open("/dev/parport0", O_WRONLY); ioctl(fd, PPCLAIM, 0);

/* CS=1 CLK=0 DIN=1 */ x = 0xfe; ioctl(fd, PPWDATA, &x); }

void send(unsigned char x) { int i, j

/* CS=0 CLK=0 DIN=1 */ j = 0xfc; ioctl(fd, PPWDATA, &j);

for (i = 0; i < 8; i++, x <<= 1) { /* CS=0 CLK=0 DIN=x */ j = (x & 128) ? 0xf8 : 0xfc; ioctl(fd, PPWDATA, &j); /* CS=0 CLK=1 DIN=x */ j = j | 0x01; ioctl(fd, PPWDATA, &j);

/* CS=0 CLK=0 DIN=x */ j = j & 0xfe; ioctl(fd, PPWDATA, &j); }

/* CS=1 CLK=0 DIN=1 */ j = 0xfe; ioctl(fd, PPWDATA, &j); }

/* w. */

nie testowany, nie sprawdzający błędów, napisany w 5 minut kod:

#include <linux/ppdev.h>

#include <sys/ioctl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int fd;

void init(void) { int x;

fd = open("/dev/parport0", O_WRONLY); ioctl(fd, PPCLAIM, 0);

/* CS=1 CLK=0 DIN=1 */ x = 0xfe; ioctl(fd, PPWDATA, &x); }

void send(unsigned char x) { int i, j

/* CS=0 CLK=0 DIN=1 */ j = 0xfc; ioctl(fd, PPWDATA, &j);

for (i = 0; i < 8; i++, x <<= 1) { /* CS=0 CLK=0 DIN=x */ j = (x & 128) ? 0xfc : 0xf8; ioctl(fd, PPWDATA, &j);

/* CS=0 CLK=1 DIN=x */ j = j | 0x01; ioctl(fd, PPWDATA, &j);

/* CS=0 CLK=0 DIN=x */ j = j & 0xfe; ioctl(fd, PPWDATA, &j); }

/* CS=1 CLK=0 DIN=1 */ j = 0xfe; ioctl(fd, PPWDATA, &j); }

/* w. */

:) wiem jak sie gada z LPT, mialem raczej nadzieje na jakies API SPI gotowe :P Znalazlem w miedzy czasie cos takeigo :

formatting link
Mysle ze na upartego mozna zrobic prosty czytnik SD/MMC pod LPT na poczatek i na tym poeksperymentowac.

Pozdrawiam.

no cóż, zdawało mi się, że to właśnie dostałeś.

kiedyś wygooglałem gotowy sterownik do MMC na GPIO, tyle że przeznaczony do jakiegoś SoC, na którym chodzi Linux, więc nie powinieneś mieć z tym problemów.

w.

Problemem jest mnogosc hasel z GPIO i MMC w google :( googlalem >2h i nic nie znalazlem poza kodem na PICa (bardzo ograniczony) i tym odczytem temperatury.

Pozdrawiam.

faktycznie, teraz nie udało mi się tego znaleźć. w każdym razie przykładów odczytu kart MMC po SPI jest w sieci całe mnóstwo, głównie w odtwarzaczach MP3. przeniesienie tego na Linuksa to zwykle zamiana odwołań do SPDR na proste funkcje (w jedną stronę już podesłałem) albo sbi() i cbi() na ioctl()e.

w.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required