Forum: Mikrocontroller und Digitale Elektronik VS1003b SPI reagiert nicht.


von Der Albi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo.
Ich versuche schon ewig meinen VS1003b Mp3-Decoder-Chip zum laufen zu
bringen.
Bisher habe ich es "geschafft", einen HardwareReset durchzuführen.
Wie im Datenblatt geschrieben geht das DREQ nach 1.35ms auf high.

Jetzt versuche ich das SPI-Interfache zum laufen zu bringen. aber der
Chip reagiert nicht. Weder kann ich lesen, noch kann ich schreiben.
Den Schreib-Versuch wollte ich mit einem SoftwareReset überprüfen. Laut
Datenblatt sollte sich da auch das DREQ ändern. Aber es bleibt auf
gleichem Pegel.
Mein Leseversuch versucht einfach SCI_MODE auszulesen. jedoch empfange
ich immer 0. (obwohl ich 0x0800 empfangen müsste)

Pin-Mäßig ist jetzt alles Korrekt angeschlossen. Die TestSpannungen an
den Pins (z.B. GBUF, RCAP, VCO sind mit sinnvollen Spannungen belegt)
Damit sind denke ich Hardwareschäden ausgeschlossen.. oder nicht?

Die SPI-Schnittstelle läuft zur Zeit mit einen 256tel des AVR-16MHz
Takts. (Weil die Kabel recht lang sind - den Takt kann ich ja
hochschrauben wenns dann Funktioniert)

Entweder es ist ein Timing problem oder ein HardwareProblem.
Ich habe mit einen Urururururalt Oszi gepfrüft: Das Clocksignal sieht
sinnvoll aus. Das SI hat denke ich auh sinnvolle Werte. Das CS taktet
auch um die Clock herum... Nur der SO und der DREQ bleibt stumm.
Beim lesen allerdings sind auf dem Oszi kleine Unebenheiten auf der
DREQ-Leitung zu sehen. Diese Unebenheiten sind synchron zu den Bytes
die gesendet werden.
Dabei fällt mir noch ein:  Aus der SI-Leitung sende ich in der Regel
eine 3 (lesen) die Adrese (0 - SCI_MODE) und dann 2 weitere Nullen um
die Datenbytes zu empfangen. Trotzdem befinden sich aud ler Leitung im
Byte-Abstand kleine Flanken. (obwohl es alles 0 sein müsste)..

Hat jemadn von euch einen VS1003 oder VS1002 in betrieb genommen und
auch solche Phänomene beobachtet? Ich bin langsam am Verzweifeln....

MFG

von Der Albi (Gast)


Lesenswert?

push

von Rooney B. (rooney)


Lesenswert?

Hab zwar mit AVR nicht wirklich was am Hut, aber ich denke mal dass der
Controller mit 5V versorgt wird, der VS1003 jedoch mit 3.3V...

Ich verwende folgende C Routinen. Lass dich nicht von der Bezeichnung
VS1002 verwirren, verwende auf meinem Board auch den VS1003 hab aber
damals noch auf dem VS1002 entwickelt.

Initalisiert wird die SPI Schnittstelle mit setupSPI(); Anschließend
folgt das VS1002_init(); Mit VS1002_SPI(unsigned char); schreib ich
bzw. lies ich ein Byte über die SPI. Wennst den gesamten C Code zur
Ansteuerung des VS1003 benötigst, dann gib mir Bescheid.

void VS1002_reset (void)
{
  unsigned char i = 0;

  VS1002_SPI_XRESET  = 1;
  Delay_us(10);
  VS1002_SPI_XRESET = 0;
  VS1002_SPI(0xFF);
  Delay_us(1);
  VS1002_xDCS(HIGH);
  VS1002_xCS(HIGH);
  VS1002_SPI_XRESET = 1;

  VS1002_writeReg(REG_VOL, 0x0000);
  Delay_cycles(10);
  while(!VS1002_DREQ);
  VS1002_writeReg(REG_CLOCKF, 0x3000);
  VS1002_writeReg(REG_MODE, 0x0804);
  VS1002_writeReg(REG_VOL, 0xFEFE);
  Delay_cycles(10);
  while(!VS1002_DREQ);  //wait for startup
  VS1002_xDCS(LOW);
  for(i = 0; i < 17; i++)
  {
    VS1002_SPI(0);
  }
  VS1002_xDCS(HIGH);
  VS1002_writeReg(REG_VOL, 0x2020);

}

unsigned char VS1002_SPI (unsigned char txData)
{
     unsigned char rxData = 0x00;

     SSP1BUF = txData;
  while((PIR1 & 0x08) != 0x08);
  PIR1 &= ~0x08;
  rxData = SSP1BUF;
  Delay_us(10);
     return rxData;
}

void VS1002_init (void)
{
  deassertCS();
  Delay_ms(200);
  VS1002_reset();
  Delay_ms(200);
}

void setupSPI (void)
{
  //setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);
  SSP1STAT = 0xC0;
  SSP1CON1 = 0x31;
  PIR1 &= ~0x08;
}

von Der Albi (Gast)


Lesenswert?

hmmh das einzige, das du groß anders machst ist deine ResetSequenz:

  VS1002_SPI_XRESET  = 1;
  Delay_us(10);
  VS1002_SPI_XRESET = 0;
  VS1002_SPI(0xFF);
  Delay_us(1);
  VS1002_xDCS(HIGH);
  VS1002_xCS(HIGH);
  VS1002_SPI_XRESET = 1;

ich hatte den ResetPin nur auf 0 und dann wieder auf 1 gesetzt.
Ich hab deins mal übernommen, aber geändert hat sich nix...
warum sendest du das 0xff ? Und was macht das deassertCS() ? ich
vermute die CS-Leitungen auf high...

btw: du hast komsiche Registerbezeichnungen ;-)

MFG
PS: schick mir mal ne email, wenn du Lust hast

von Rooney B. (rooney)


Lesenswert?

Na ja auf die Registerbezeichnungen musst nicht wirklich acht geben,
sind PIC spezifische Dinge...

Ja, deassertCS´() wird verwendet um sämtliche CS Signale auf High zu
ziehen. Zur Info: Bei mir hängen 8 SPI Devices am Bus.

Warum ich 0xFF raustakte weiß ich nicht mehr, ich hab leider kein
Kommentar hinzugefügt ;-)

Ich werd dir den Code im Laufe der nächsten Tage schicken sobald ich
wieder in der Firma.

von Der Albi (Gast)


Lesenswert?

Danke. Hat sich erledigt. Das ganze lag daran, dass meine Adapterplatine
einfach mieß war. viel lötaugen hatten keine verbindung zum Chip... hat
sich jetzt erledigt. Mit SCLK und CS -Leitung klappts halt doch besser
;)

Nuja. jetzt hab ich solange dran rumgespielt, bis der Chip kaputt war
:'(

Kennt jemand einen deutschen Vertreiber für die dinger, oder muss ich
die wieder aus Finnland bestellen? (Dauert halt lange...)

MFG

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.