Hallo,
hat einer von euch schon mal MP3s mit einem VS1063A Chip abgespielt ?
Hatte den Chip vor Jahren schon einmal erfolgreich benutzt. Aber diesmal
bekomme ich keinen Ton heraus.
Hardware ist ein STM32F2 Eval Board mit dem Sparkfun Breakout Board am
SPI angeflanscht.
https://www.sparkfun.com/products/retired/11684
Hier der komplette Code, er ist einfach nachzuvollziehen.
Vielleicht kann mir jemand sagen ob ich ein Register vergessen habe zu
beschreiben oder einen Gedankenfehler beim MP3 übertragen habe.
Mit dem Code passiert am Ausgang Pin 46 und 39 des VS1063 einfach ...
nichts ...
Gruß
Ja super nen riesen Array damit der Thread schon explodiert, für sowas
gibts Dateianhänge hier.
Zum Thema:
Kommt denn überhaupt was ausm SPI raus?
Denk drann der VLSI hat getrennte ChipSelect für Control und Audiodaten.
Thorsten schrieb:> write_register(0x0B, 0xFF, 0xFF); //set volume>SCI_VOL is a volume control for the player hardware. The most significant>byte of the volume register controls the left channel volume, the low>part controls the right channel volume. The channel volume sets the>attenuation from the maximum volume level in 0.5 dB steps. Thus,>maximum volume is 0x0000 and total silence is 0xFEFE.>Note, that after hardware reset the volume is set to full volume.>Resetting the software does not reset the volume setting.>>Setting SCI_VOL to 0xFFFF will activate analog powerdown mode.
Mw E. schrieb:> Ja super nen riesen Array damit der Thread schon explodiert, für sowas> gibts Dateianhänge hier.
Sorry, hatte ich nicht dran gedacht.
Mw E. schrieb:> Kommt denn überhaupt was ausm SPI raus?Thorsten schrieb:> uint16_t mode = read_register(0x00); //result = 0x4800> uint16_t status = read_register(0x01); //result = 0x48> uint16_t clock = read_register(0x03); //result = 0x00
result entspricht den zurückgelesenen Werten
Mw E. schrieb:> Denk drann der VLSI hat getrennte ChipSelect für Control und Audiodaten.
Das habe ich auch so verstanden.
CS = CS für Control
BSYNC = CS für Daten
Macron schrieb:>>Setting SCI_VOL to 0xFFFF will activate analog powerdown mode.
Vielen Dank für diesen verständlichen Passus, den hatte ich so noch
nicht gelesen. Ich hatte aber vorher immer als Volume 20 übertragen und
erst als ich anfing zu verzweifeln habe ich an diesen Werten gespielt
:-)
Sehe ich das denn richtig dass man nach HW Reset im Prinzip nicht
anderes machen muss als das MP3 rüber schubsen ?
Thorsten schrieb:> while(1) {> for(uint32_t i=0 ; i<sizeof(HelloMP3) ; i++) {> wait_dreq();> GPIO_WriteBit(BSYNC_PORT, BSYNC_PIN, Bit_RESET);> send(HelloMP3[i]);> GPIO_WriteBit(BSYNC_PORT, BSYNC_PIN, Bit_SET);> }> }
Thorsten schrieb:> Sehe ich das denn richtig dass man nach HW Reset im Prinzip nicht> anderes machen muss als das MP3 rüber schubsen ?
Ich denke nicht. Ist bei mir schon ein paar Jährchen her, dass ich das
gemacht habe, aber in den alten Sourcen setze ich vorher SCI_CLOCKF,
aber der Default sollte schon laufen.
Wie sieht das mit
1
#define CS_PIN GPIO_Pin_15
aus? Liegt da nicht SWI oder JTAG nach dem Reset an und muss erst
wegkonfiguriert werden?
Macron schrieb:> Wie sieht das mit#define CS_PIN GPIO_Pin_15> aus? Liegt da nicht SWI oder JTAG nach dem Reset an und muss erst> wegkonfiguriert werden?Thorsten schrieb:> gpio.GPIO_Pin = CS_PIN;> gpio.GPIO_Mode = GPIO_Mode_OUT;> gpio.GPIO_Speed = GPIO_Speed_50MHz;> gpio.GPIO_OType = GPIO_OType_PP;> gpio.GPIO_PuPd = GPIO_PuPd_UP;> GPIO_Init(CS_PORT, &gpio);> GPIO_WriteBit(CS_PORT, CS_PIN, Bit_SET);
Ich bin mit meinem Latein am Ende. Ich denke der Chip hat einen Schaden,
werde mir wohl einen anderen organisieren und nochmal testen.
Thorsten schrieb:> Thorsten schrieb:>> gpio.GPIO_Pin = CS_PIN;>> gpio.GPIO_Mode = GPIO_Mode_OUT;>> gpio.GPIO_Speed = GPIO_Speed_50MHz;>> gpio.GPIO_OType = GPIO_OType_PP;>> gpio.GPIO_PuPd = GPIO_PuPd_UP;>> GPIO_Init(CS_PORT, &gpio);>> GPIO_WriteBit(CS_PORT, CS_PIN, Bit_SET);>> Ich bin mit meinem Latein am Ende. Ich denke der Chip hat einen Schaden,> werde mir wohl einen anderen organisieren und nochmal testen.
Nö, das dürfte nicht reichen.
Mit der grützigen SPL kenne ich mich nicht aus, aber (abhängig vom
Controller) Du musst das AFIO_MAPR richtig konfigurieren, damit das
funktioniert.
Beim STM32F103 z.B. ist PA15 nach dem Reset JTDI und somit nicht als IO
nutzbar.
Ich denke, das ist bei Dir dasselbe, also AlternateFunctions Clock
aktivieren, irgendwie so:
Musst Du halt in der Doku nachsehen.
Dann noch die SWJ_CFG-Bits in AFIO_MAPR richtig setzen.
Z.B. beim STM32F103:
Bits 26:24
SWJ_CFG[2:0]:
Serial wire JTAG configuration
These bits are write-only (when read, the value is undefined).
They are used to configure the SWJ and trace alternate function I/Os.
The SWJ (Serial Wire JTAG) supports JTAG or SWD access to the
Cortex debug port. The default state after reset is SWJ ON without
trace.
This allows JTAG or SW mode to be enabled by sending a specific sequence
on the JTMS / JTCK pin.
000: Full SWJ (JTAG-DP + SW-DP): Reset State
001: Full SWJ (JTAG-DP + SW-DP) but without NJTRST
010: JTAG-DP Disabled and SW-DP Enabled
100: JTAG-DP Disabled and SW-DP Disabled
Other combinations: no effect.
Macron schrieb:> aber in den alten Sourcen setze ich vorher SCI_CLOCKF,> aber der Default sollte schon laufen.
darauf habe ich mich auch verlassen
Thorsten schrieb:> //write_register(0x03, 0x60, 0x00); //set clock
nachdem ich diese Zeile einkommentiert habe läuft alles wie gewünscht.
Die SPI Frequenz habe ich noch nicht einmal angepasst.
Die Auskommentierung im Code hab ich doch glatt überlesen, weils nicht
in Syntaxhighleightiung meines Editors war =P
Siehe Kapitel 11.13 im DB.
Den internen DSP Takt muss man ordentlich aufdrehen damit der alles
decodieren kann.
Am besten auf 5x und dann noch dem DSP erlauben weiter aufdrehen zu
dürfen wenn es sein muss.
Das wäre dann 0x9800 als Registerinhalt.