Raspberry Pi 2 + SPI + ADS8332 sendet keine Daten

Gast #4316937
Lesenswert?
• ▲
▼
Hi,

hab wieder ein Problem mit dem Raspberry Pi 2. Und zwar möchte ich einen 
AD Wandler (ADS8332 , TI, http://www.ti.com/product/ads8332) mittels SPI 
ansprechen.

Leider sendet mein Raspberry zwar Daten die scheinbar auch beim ADC 
ankommen, nur sendet dieser nix zurück bzw die MISO Leitung geht 
lediglich auf high.

Habe mir das ganze mal auf dem Oszi angesehen :
Bild 1 : MOSI + SCLK
Bild 2 : MOSI + CS
BILD 3 : MOSI + MISO

Habe das ganz mal mit einem Atmel versucht und da funktioniert das 
wunderbar.
Bild 4 : MOSI + MISO

Bei beiden Programmen (AVR, Raspberry) habe ich 0xd000 gesendet.

Der AVR scheint die MOSI Leitung standardmäßig auf High zu ziehen was 
der Raspberry Pi nicht macht. Desweiteren ist mir aufgefallen, dass der 
AVR zwischen den zwei Bytes nochmal kurz auf High geht.

Habe mich bei dem ganzen nach spidev_test.c 
(https://www.kernel.org/doc/Documentation/spi/spidev_test.c) gerichtet.
1
int spi_open_device()
2
{
3
  int fd, ret;
4

5
  fd = open("/dev/spidev0.0", O_RDWR);
6
  mode = SPI_MODE_2;
7

8
  if(fd<0) {
9
    output_error("SPI : Kein Zugriff \n");
10
    return -1;
11
  }
12

13
  ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);
14
  if(ret < 0) {
15
    output_error("SPI : can't set mode SPI_IOC_WR_MODE \n");
16
    return -1;
17
  }
18

19
  ret = ioctl(fd, SPI_IOC_RD_MODE, &mode);
20
  if(ret < 0) {
21
      output_error("SPI : can't set mode SPI_IOC_RD_MODE \n");
22
      return -1;
23
    }
24

25
  ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &mode);
26
  if(ret < 0) {
27
      output_error("SPI : can't set mode SPI_IOC_WR_BITS_PER_WORD\n");
28
      return -1;
29
    }
30
  ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &mode);
31
  if(ret < 0) {
32
      output_error("SPI : can't set mode SPI_IOC_RD_BITS_PER_WORD \n");
33
      return -1;
34
    }
35
  ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
36
  if(ret < 0) {
37
      output_error("SPI : can't set speed SPI_IOC_WR_MAX_SPEED_HZ\n");
38
      return -1;
39
    }
40
  ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);
41
  if(ret < 0) {
42
      output_error("SPI : can't set speed SPI_IOC_RD_MAX_SPEED_HZ\n");
43
      return -1;
44
    }
45
  printf("SPI Mode : %d   Speed : %d \n", mode, speed);
46

47
  return fd;
48
}[c/]
49

50
und das senden mittels 
51

52
[c]
53
uint8_t tx[2], rx[2];
54
  tx[0] = 0xd0;
55
  tx[1] = 0x00;
56
  struct spi_ioc_transfer tr =
57
  {
58
  .tx_buf = (unsigned long)tx,
59
  .rx_buf = (unsigned long)rx,
60
  .len = 2,
61
  .delay_usecs = 100,
62
  .speed_hz = speed,
63
  .bits_per_word = 8,
64
};
65

66
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.