vs1011 mp3-datenstrom

Gast #486648
Lesenswert?

hey ihr da draußen!

ich brauch da mal ganz dringend eure hilfe!
ich versuche jetzt schon seit einer halben ewigkeit den vs1011 zum 
abspielen einer mp3-datei zu bringen. fat16 für die datei läuft, 
taktanpassung des vs
is richtig, register beschreiben/ lesen funktioniert super, sogar
der ominöse sinustest klappt einwandfrei!
nur bei seiner eigentlich aufgabe hakts irgendwo...

ich betreibe den vs1011 im vs1002-nativ-mode mit extra chipselects für 
cmd-interface und daten-interface. die daten werden, immer nachdem dreq 
auf high geht, schön in blöcken á 32byte und mit data-interface-cs auf 
low zum vs gesendet. nur es passiert absolut rein gar nichts!!!

ach ja: das ganze läuft in asm geschrieben auf nem mega128...

hab ich vielleicht irgendwas übersehen?? irgendwas kleingedrucktes im 
datenblatt??? ich weiss im moment echt nicht worans liegen könnte...

ich hoffe, ihr könnt mir helfen :)

glg
zero_gravity
Gast #486883
Lesenswert?

hallo,
wie schnell ist denn dein SPI takt bei der datenübertragung (max. 
4mhz)???
kleiner code ausschnitt wäre net schlecht wegen eventuellen fehlern??
an welchem port hängt das dingen ???

im notfall kann ich dir meinen code "LEIHEN"
;-)

gruss fubu
Gast #487471
Lesenswert?

hey fubu :)

zum ansteuern benutze ich das hardware-spi mit fosc/2 also genau 4mhz..
aber ich denk mal dass das kein probelm ist, da sonst alles
super funktioniert (also sinustest, register lesen/beschreiben)

hier mal das 'kernstück' aus der routine zum übertragen von mp3-daten 
zum vs:

  clr  XL
  clr  XH
read_mp3_data:
  cpi  XL, LOW(512)
  brne read_mp3_data_valid
  cpi  XH, HIGH(512)
  brne read_mp3_data_valid
  rjmp read_mp3_data_end

read_mp3_data_valid:
  clr  counter
  sbis PINB, vs1011_dreq
  rjmp read_mp3_data_valid

  ldi  YL, LOW(mp3_buffer)
  ldi  YH, HIGH(mp3_buffer)
read_mp3_data_loop_1:
  cpi  counter, 32
  breq read_mp3_data_loop_2
  call readbyte_spi
  st   Y+, rxdata
  inc  counter
  rjmp read_mp3_data_loop_1

read_mp3_data_loop_2:
  sbi  card_port, card_select
  cbi  card_port, vs1011_data_cs
  clr  counter
  ldi  YL, LOW(mp3_buffer)
  ldi  YH, HIGH(mp3_buffer)

read_mp3_data_loop_3:
  cpi  counter, 32
  breq read_mp3_data_loop_end
  ld   txdata, Y+
  call sendbyte_spi
  inc  counter
  rjmp read_mp3_data_loop_3

read_mp3_data_loop_end:
  sbi  card_port, vs1011_data_cs
  cbi  card_port, card_select
  adiw XH:XL, 32
  rjmp read_mp3_data

diese subroutine wird 8 mal innerhalb eines block-read-cmd der sd-karte 
aufgerufen... wenn ich die daten über uart raushaue ergibt sich auch im 
endeffekt die richtige datei, nur der vs will halt nicht

ach ja: wundert euch nicht über meinen schrecklichen programmier-stil ;)

glg
zero_gravity
Gast #488395
Lesenswert?

noch ne kleine frage am rande:

wenn ich mir, während des mp3-datentransfers zum vs, HDAT1 anzeigen 
lasse,
is der nach 100 übtertragenen blöcken immer noch auf 0 und nich auf FF 
und F2 oder sowas in der art...

ab wann sollte mir denn HDAT1 anzeigen, ob der stream überhaupt "valid" 
ist?
doch wohl gleich nach der übertragung des framesectors der mp3-datei, 
oder??

glg
zero_gravity
Gast #488453
Lesenswert?

hallo,

1.)hörste knacken oder ähnliches bei der übertragung deiner MP3 aufm 
kopphörer???

2.)japp nach der der ersten übertragung des Frameheaders der MP3 sollte 
da was drin stehen, normalerweise sollte da nach 100 übertragungen was 
drin sein.
Gast #489305
Lesenswert?

nee, das isses ja.
wenn da irgendwie sowas wie nen knacken oder piepsen wäre, wär das
suchen nach dem fehler ja nich so verdammt schwierig!

aber ich hab da ja nur dieses übliche ganz ganz leise 
hintergrundrauschen...

ach, es ist zum verzweifeln ^^

glg
zero_gravity
Gast #489464
Lesenswert?

hallo,
wie gesagt ich kein dir einen alten code leihen um das VS dingen zu 
testen.
hab damals auf ATMEGA32 und VS1002 gesetzt.
besser du gibst mir mal deine email, weil i wohl der einzige bin der 
helfen will !!!
das prob wird scho zu lösen sein !!!
gruss fubu
Gast #531105
Lesenswert?

hey stefan!

mein vs funktioniert jetzt wunderbar!!
ganz wichtig ist, dass du die testfunktionen wie sinustest und so für
den normalen betrieb abschaltest...

in was schreibst du denn deine programme?? ich könnt dir sonst meinen
asm-code mal rüberschicken :)

glg
zero_gravity
#531620
Lesenswert?

Moin,

ursprünglich sollte das eigentlich nen Projekt in C werden, allerdings 
bin ich dann doch wieder auf asm zurückgekommen, als ein paar 
kleinigkeiten nicht wollten.

Das ganze läuft auf AtMega. Zurzeit noch auf nem 16 später solls dann 
auf nen 128. Das mit dem Sinetest werde ich mal testen.

Ich hatte bis eben noch einen Sinetest am Start meines Programmes, den 
ich inzwischen entfernt habe, allerdings macht der VS1011 immer noch 
nichts.

Hier sind noch die wichtigen Teile des Programms, ansonsten würde ich 
mir deines gerne einmal anschauen.
1
event_I_func:
2
  sbi SPCR, SPE ;Festplatte hängt am selben PORT, z.z. noch probleme mit Atmega16, weil zu wenig IOs
3
  cbi PORTD, 6 ;geht an XCS
4
  ldi r16, 0x02
5
  rcall send_spi
6
  ldi r16, 0x00
7
  rcall send_spi
8
  ldi r16, 0b00001000
9
  rcall send_spi
10
  ldi r16, 0b00000010
11
  rcall send_spi
12
  sbi PORTD, 6
13

14
  cbi PORTD, 6
15
  ldi r16, 0x02
16
  rcall send_spi
17
  ldi r16, 0x0B
18
  rcall send_spi
19
  ldi r16, 0x00
20
  rcall send_spi
21
  ldi r16, 0x00
22
  rcall send_spi
23
  sbi PORTD, 6
24
  
25
  cbi PORTD, 6
26
  ldi r16, 0x02
27
  rcall send_spi
28
  ldi r16, 0x03
29
  rcall send_spi
30
  ldi r16, LOW( 12288 )
31
  rcall send_spi
32
  ldi r16, HIGH( 12288 )
33
  rcall send_spi
34
  sbi PORTD, 6
35
  ldi r24, LOW( 2048 )
36
  ldi r25, HIGH( 2048 )
37

38
  ldi r16, 0
39

40
  cbi PORTD, 5 ;geht an XDCS
41

42
event_I_func_zero:
43
  rcall send_spi
44
  sbiw r24, 1
45
  brne event_I_func_zero
46

47
  sbi PORTD, 5
48
  cbi SPCR, SPE
49
  ret
50

51

52
event_play:
53
  rcall event_I_func
54

55
  ldi ZL, LOW( MP3_CurrentCluster )
56
  ldi ZH, HIGH( MP3_CurrentCluster )
57

58
  ld r18, Z+
59
  ld r19, Z+
60
  ld r20, Z+
61
  ld r21, Z+
62

63
event_play2:
64
  rcall fat_get_cluster_addr
65

66
  rcall hdd_sectcount_chs
67
  rcall hdd_read_cluster
68

69
  ldi ZL, LOW( FS_ClusterSize )
70
  ldi ZH, HIGH( FS_ClusterSize )
71

72
  ld r16, Z
73
  
74
  push r16
75
event_play_cluster_loop:
76
  rcall hdd_read_datareg2
77

78
  ldi ZL, LOW( FS_WorkSector )
79
  ldi ZH, HIGH( FS_WorkSector )
80
  
81
  ldi r16, 16
82

83
event_play_send_sector:
84
  push r16
85
  ldi r16, ( 1 << SPE ) | (1 << MSTR ) | (0 << SPR1) | (0 << SPR0)
86
  out SPCR, r16
87
  cbi PORTD, 5
88
  rcall send_spi_32byte
89
  sbi PORTD, 5
90
  pop r16
91
event_play_dreq:
92
  sbis PIND, 4 ;DREQ
93
  rjmp event_play_dreq
94
  dec r16
95
  brne event_play_send_sector
96
  ldi r16, ( 0 << SPE ) | (1 << MSTR ) | (0 << SPR1) | (0 << SPR0)
97
  out SPCR, r16
98
  
99
  pop r16
100
  dec r16
101
  push r16
102
  brne event_play_cluster_loop
103
  pop r16
104

105

106
  ldi ZL, LOW( MP3_CurrentCluster )
107
  ldi ZH, HIGH( MP3_CurrentCluster )
108

109
  ld r18, Z+
110
  ld r19, Z+
111
  ld r20, Z+
112
  ld r21, Z+
113

114
  rcall fat_get_next_cluster
115

116
  cpi r19, 0xFF
117
  brlo event_play_save_cluster
118
  cpi r18, 0xF8
119
  brsh event_play_stop
120

121
event_play_save_cluster:
122
  ldi ZL, LOW( MP3_CurrentCluster )
123
  ldi ZH, HIGH( MP3_CurrentCluster )
124
  st Z+, r18
125
  st Z+, r19
126
  st Z+, r20
127
  st Z+, r21
128
  
129
  mov r16, RXByte ;Abbruch über serielle schnittstelle
130
  cpi r16, 'n'
131
  breq event_play_stop
132
  rjmp event_play2
133

134
event_play_stop:
135
  ret

--
Schwigi
Gast #531695
Lesenswert?

hallo zu faul das durchzulesen,
hier mal mein sinustest (DREQ an PB1, XDCS an PB2, XCS an PB3, SI an 
PB5, SO an PB6, SCLK an PB6). pass den code nach deinen portanschlüssen 
an und gut!! aso verwende den NEW MODE(vs1002 mode). (temp1=r16)

wenn der geht, haste alles richtig angeschlossen dann kümmern wir uns 
gerne um den rest, aber vorher^^......

gruss

Angehängte Dateien:
Gast #531701
Lesenswert?

oh looool,
wer lesen kann iss klar im vorteil^^.
der sinustest funzt ja!!! dann sach i mal du hast sicher wie ZERO 
vergessen den testmode auszustellen^^.

gruss an zero und den rest.
#532034
Lesenswert?

Moin,

ich hab auch den anderen Sinustest noch einmal laufen lassen und auch 
der erzeugt ein wundervollen Pfeifen.

Ich habe selber noch nicht geschaut und ein kleinen Fehler in dem 
Festplattenteil gefunden. Der ist allerdings jetzt raus und die 
gesendeten Daten stimmen mit der Datei überein.

Der VS1011, hat allerdings immer noch keine Lust sich irgendwie zum 
Spielen einer MP3 Datei bewegen zu lassen.

Der Test ist inzwischen auch aus und wird auch nicht mehr aktiviert.

Anbei ist noch einmal der aktuelle Quellcode zum Senden der Datei.

PD2 ist der Reset, PD4 ist DREQ, PD5 ist XDCS und PD6 ist XCS

--
Schwigi
Angehängte Dateien:
Gast #532038
Lesenswert?

hallo,
bin zu müde um deinen code zu ende zu lesen, aber dein reset timing iss 
sehr arg, schau mal ins datenblatt da musste ne zeit warten, bis dreq 
auf high ist und dann rufste deine event_i_func oder so... auf.

änder das mal und frag im code den pin ab.
so aber erstmal n8, den rest schau i moin mal an.

gruss
#532455
Lesenswert?

Moin,

ich hab jetzt den Reset am Anfang der event_play routine eingefügt und 
warte ab bis DREQ auf 0 ist und anschließen bis es wieder auf 1 ist.

Das hat allerdings nicht viel geändert, denn in der Senderoutine ist 
auch eine Überprüfung ob DREQ auf 1 ist.

Aber, jetzt schon einmal vielen dank für eure Mühen.

--
Schwigi
#533206
Lesenswert?

Moin,

Danke, für den Code.

Er hat mich auf die kleinen Fehler die in der Senderoutine waren 
aufmerksam gemacht.

ich hatte anstelle immer 32 byte zu lesen 33 gelesen, so das natürlich 
immer 1 byte gefehlt hat. Nebenher habe ich noch einen dummen Fehler mit 
VS_CLOCKF gemacht erst das LOW-Byte zu senden.

Danke für die Unterstützung.

--
Schwigi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren