Forum: Mikrocontroller und Digitale Elektronik SPI Umsetzung - Verständnisfrage


von Steffen (Gast)


Angehängte Dateien:

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

von Matze (Gast)


Lesenswert?

Die Protokollbeschreibung in deiner Abbildung sieht eher nach I2E/TWI 
aus. Bei SPI gibt es normalerweise keine Adressierung auf 
Protokollebene. Die Slaveauswahl wird über eine separate Slave Select 
Leitung gemacht.
http://www.mikrocontroller.net/articles/Serial_Peripheral_Interface

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Matze,

leider hat der IC nur 2 Datenanschlüssen. Ich häng mal das Datensheet an 
:-)

von Stefan E. (sternst)


Lesenswert?

Steffen schrieb:
> leider hat der IC nur 2 Datenanschlüssen.

Eben, das ist kein SPI. Das ist I2C.

von Steffen (Gast)


Lesenswert?

Aha, und was bedeutet das für mich? Wie sprech ich den TDA an?

von Matze (Gast)


Lesenswert?

Über den I2C-Bus.

Hier findest du mehr darüber
http://www.mikrocontroller.net/articles/I2C

von Steffen (Gast)


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 :-)

von Stefan E. (sternst)


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.

von Steffen (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.