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
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; }
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.