SPI Umsetzung - Verständnisfrage

Gast #2151988
Lesenswert?
• ▲
▼
Hallo zusammen,

ich möchte einen TDA7348 per SPI ansprechen. Nun habe ich Hartware 
seitig aufgebaut und versuch mich nun an einem ersten Test. Ich muss 
dazu sagen, dass ich bisher nur EEproms per SPI angesprochen haben. Nach 
dem Datenblatt gibt es eine Adress, eine Subadresse und einen 
Datenblock. (s.Bild) Ich finde nun aber keinen Wert für R/W. Wenn ich 
Daten an den TDA senden möchte, ist das dann Write? Unklar ist mir auch 
noch ob ich ACK sende oder bekomm ich das als Bestätigung? Was mach ich 
mit den "x" Bits bei Subadresse? Oder sende ich nur 4bit?

Zum Test habe ich einfach die EEprom Code Teile genommen und geändert. 
Kann das so funkrionieren?
1
int tda7348_write_byte(uint8_t saddr, uint8_t buf) {
2
  uint8_t n = 0;
3

4
restart:
5
  if (n++ >= MAX_TRIES)
6
    return -1;
7
begin:
8

9
  // start
10
  TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
11
  while (!(TWCR & (1 << TWINT)));
12
  if (TW_STATUS == TW_MT_ARB_LOST) goto begin;
13
  if ( (TW_STATUS != TW_REP_START) && (TW_STATUS != TW_START)) {
14
    return -1;
15
  }
16

17
  // send 0x440
18
  // 0x440 = 1000100 0
19
  // 7 bits:   <chip address>
20
  // last bit: <R/W> 0W? 1R?
21
  TWDR = 0x440;
22
  TWCR = (1 << TWINT) | (1 << TWEN);
23
  while (!(TWCR & (1 << TWINT)));
24
  if (TW_STATUS == TW_MT_SLA_NACK) goto restart;
25
  if (TW_STATUS == TW_MT_ARB_LOST) goto begin;
26
  if (TW_STATUS != TW_MT_SLA_ACK) goto error;
27
  
28
  // send 4 bits subaddress
29
  TWDR = saddr >> 4;
30
  TWCR = (1 << TWINT) | (1 << TWEN);
31
  while (!(TWCR & (1 << TWINT)));
32
  if (TW_STATUS != TW_MT_DATA_ACK) goto error;
33

34
  // send 8 bits Data
35
  TWDR = buf;
36
  TWCR = (1 << TWINT) | (1 << TWEN);
37
  while (!(TWCR & (1 << TWINT)));
38
  if (TW_STATUS != TW_MT_DATA_ACK) goto error;
39

40
quit:
41
  // send stop condition
42
  TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
43
  return 1;
44

45
error:
46
  // send stop condition
47
  TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
48
  return -1;
49
}

Vielen Danke Steffen
Angehängte Dateien:
Gast #2152083
Lesenswert?
• ▲
▼
achso, ich glaub da hab ich mich vertan. Bin davon ausgegangen, dass 
sind die gleichen Übertragunssachen. Trotzdem versteh ich das noch nicht 
so richtig. Zuerst sende ich ein Start. Ok. Dann die ChipAdresse OK. Was 
ist aber R/W für ein Wert? Und wie sende ich ACK? oder bekomm ich das 
als Bestätigung? Was mach ich mit den "X" bits? Sende ich da nur 4bit?
Sorry für so viele Fragen :-)
#2152084
Lesenswert?
• ▲
▼
Steffen schrieb:
> Aha, und was bedeutet das für mich? Wie sprech ich den TDA an?

Deine Postings sind irgendwie ein Rätsel für mich. Du bist überrascht, 
dass es I2C ist (und kannst damit anscheinend nichts anfangen), dein 
Code ist aber I2C-Code. Du sagst, du hättest damit bereits erfolgreich 
ein EEprom angesprochen, stellst aber andererseits Fragen, die 
eigentlich I2C-Grundwissen sind.
Gast #2152092
Lesenswert?
• ▲
▼
Naja das ist schon zu lange her, ich komm nur ab und an mal zum Basteln. 
Und nun hab ich mir halt in den Kopf gesetzt das ich einen Klangregler 
bauen möchte wo ich auch die Quellen umschalten kann. Da bin ich bei dem 
TDA hängen geblieben. Den hab ich aus nem alten Gerät ausgebaut. Sorry 
wenn ich so "dumme" Anfänger fragen habe.

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.