Forum: Mikrocontroller und Digitale Elektronik VS1063 MP3 abspielen


von Thorsten (Gast)


Lesenswert?

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ß
1
#define DREQ_PORT      GPIOA
2
#define DREQ_PIN      GPIO_Pin_11
3
4
#define CS_PORT        GPIOA
5
#define CS_PIN        GPIO_Pin_15
6
7
#define BSYNC_PORT      GPIOA
8
#define BSYNC_PIN      GPIO_Pin_8
9
10
#define RESET_PORT      GPIOA
11
#define RESET_PIN      GPIO_Pin_12
12
13
uint8_t HelloMP3[] = {
14
  0xFF,0xF2,0x40,0xC0,0x19,0xB7,0x00,0x14,0x02,0xE6,0x5C, /* ..@.......\ */
15
  0x01,0x92,0x68,0x01,0xF1,0x5E,0x03,0x08,0xF0,0x24,0x80, /* ..h..^...$. */
16
  0x05,0x9E,0x20,0xC6,0xFC,0x12,0x32,0x5C,0xBF,0xF9,0xB9, /* .. ...2\... */
17
  0x20,0x4A,0x7F,0x85,0xEC,0x4C,0xCD,0xC7,0x27,0xFE,0x5C, /*  J...L..'.\ */
18
  0x34,0x25,0xCB,0xE6,0xFF,0xFF,0x8E,0x42,0xE1,0xA0,0x5E, /* 4%.....B..^ */
19
  0xCA,0x6E,0x30,0x9F,0xFF,0xF8,0xC2,0x12,0x84,0xB9,0x7C, /* .n0.......| */
20
  0xDC,0x61,0x09,0x4A,0x7F,0xFF,0xFF,0xF9,0x7D,0x32,0x51, /* .a.J....}2Q */
21
  0x09,0x7C,0xE1,0xA5,0x6E,0xB4,0xFF,0xFF,0xFF,0xFF,0xD3, /* .|..n...... */
22
  0x34,0x41,0x91,0xF0,0x11,0x8F,0x00,0x0F,0x81,0x9C,0x10, /* 4A......... */
23
  0xEE,0x59,0xCE,0x56,0x67,0xFF,0xF2,0x42,0xC0,0xEC,0x53, /* .Y.Vg..B..S */
24
  0x09,0x15,0xF9,0xAA,0xA8,0x0D,0xD9,0x40,0x00,0xCA,0x34, /* .......@..4 */
25
  0x53,0xD9,0x18,0xAB,0x7D,0xF7,0x89,0x3F,0x11,0x38,0x94, /* S...}..?.8. */
26
  0x82,0x59,0x93,0x20,0x6A,0x0C,0xEE,0x8E,0x58,0xFA,0x38, /* .Y. j...X.8 */
27
  0x82,0xCA,0xF0,0x58,0xBB,0xDA,0x0C,0x50,0x56,0x1F,0xBB, /* ...X...PV.. */
28
  0x18,0x5D,0x8B,0x9F,0xDA,0x71,0x4F,0xFF,0xBD,0xFE,0xEF, /* .]...qO.... */
29
  0x69,0x36,0x86,0x3C,0x50,0xBB,0x0A,0x07,0x89,0x54,0xF0, /* i6.<P....T. */
30
  0x88,0x9F,0x90,0x95,0x30,0x94,0x2E,0x7E,0xF0,0x64,0x96, /* ....0..~.d. */
31
  0x79,0x08,0x3E,0x20,0x97,0x28,0x34,0x9C,0x09,0x7F,0xD2, /* y.> .(4.... */
32
  0xC0,0x01,0x75,0xF8,0x05,0x6B,0x5F,0x41,0x17,0x0B,0xE7, /* ..u..k_A... */
33
  0xFF,0xF2,0x40,0xC0,0x61,0xE5,0x0B,0x16,0x09,0xC6,0xC5, /* ..@.a...... */
34
  0x74,0x7B,0xCC,0x94,0x7A,0xF7,0x80,0x76,0xB2,0xD2,0xF8, /* t{..z..v... */
35
  0x39,0x06,0x38,0xFD,0x71,0xC5,0xDE,0x3A,0x38,0xBF,0xD5, /* 9.8.q..:8.. */
36
  0xF7,0x12,0x37,0xCB,0xF5,0x63,0x0C,0x9B,0xCE,0x77,0x25, /* ..7..c...w% */
37
  0xED,0xFB,0x3D,0x6B,0x35,0xF9,0x6D,0xD7,0xF9,0x2C,0xD1, /* ..=k5.m..,. */
38
  0x97,0x15,0x87,0x93,0xA4,0x49,0x4A,0x18,0x16,0x07,0xA1, /* .....IJ.... */
39
  0x60,0xF7,0x52,0x94,0xDB,0x02,0x16,0x70,0xB2,0xD8,0x80, /* `.R....p... */
40
  0x30,0xC2,0x94,0x40,0x81,0x74,0x5A,0x19,0x7A,0x80,0x60, /* 0..@.tZ.z.` */
41
  0x41,0x21,0x46,0x95,0xD5,0xC4,0x40,0xD2,0x01,0xC0,0x01, /* A!F...@.... */
42
  0xDA,0xD9,0xA0,0xB1,0x01,0xFF,0xF2,0x42,0xC0,0x82,0x10, /* .......B... */
43
  0x0B,0x12,0xF9,0x9E,0xC9,0x7E,0x7A,0xC6,0x95,0x55,0x09, /* .....~z..U. */
44
  0x8B,0x19,0x5E,0x8B,0x26,0xCA,0xEB,0x68,0x8A,0x05,0x8F, /* ..^.&..h... */
45
  0x36,0xA5,0xA5,0x03,0xB8,0x9C,0xED,0x24,0x51,0x59,0x90, /* 6......$QY. */
46
  0xF6,0xC5,0x7D,0xB5,0xAD,0xAF,0xF6,0x3B,0x18,0xEF,0x3F, /* ..}....;..? */
47
  0xFF,0xFF,0x4E,0xDE,0x16,0x66,0x0B,0xAA,0x33,0x23,0xDD, /* ..N..f..3#. */
48
  0x9C,0x4E,0x6E,0x55,0x22,0x9D,0xA2,0x40,0xA6,0x36,0x31, /* .NnU"..@.61 */
49
  0x69,0xA5,0xE1,0xD9,0x7F,0xF7,0xC6,0xCC,0x48,0x00,0x0E, /* i.......H.. */
50
  0x90,0x16,0x00,0x0F,0xDE,0x6E,0x80,0x11,0x0C,0x9A,0x4F, /* .....n....O */
51
  0x56,0xDB,0x88,0xD3,0xB2,0x1C,0x00,0xE0,0x2E,0x3E,0xAC, /* V........>. */
52
  0xFF,0xF2,0x40,0xC0,0x1C,0xE5,0x19,0x13,0x31,0x4E,0xCD, /* ..@.....1N. */
53
  0x9E,0xC3,0x06,0x71,0x03,0x85,0xE5,0xB5,0x6D,0x88,0x50, /* ...q....m.P */
54
  0x8E,0x0E,0x17,0x3B,0x19,0xFB,0x4E,0x3B,0x99,0xEF,0x4C, /* ...;..N;..L */
55
  0x9E,0xF7,0x7B,0x31,0x7C,0x3C,0x5F,0xFF,0xF4,0xF8,0xE3, /* ..{1|<_.... */
56
  0x92,0x42,0x07,0x8E,0x83,0x8E,0x0F,0x05,0x08,0x91,0xA3, /* .B......... */
57
  0x16,0xE2,0xDF,0xB7,0x62,0x60,0x48,0x31,0x3C,0xFF,0xD4, /* ....b`H1<.. */
58
  0x9E,0x0C,0x68,0x00,0x77,0x54,0xE3,0x1E,0x05,0xC5,0xF8, /* ..h.wT..... */
59
  0xEA,0x8D,0x82,0x9D,0x08,0xA9,0x06,0x8D,0x1E,0x5D,0x7C, /* .........]| */
60
  0x7F,0x08,0xC0,0x50,0x45,0x42,0xD0,0x36,0xF8,0xB2,0x4D, /* ...PEB.6..M */
61
  0x53,0x0C,0x80,0x3B,0x4D,0xFF,0xF2,0x42,0xC0,0x2F,0x3C, /* S..;M..B./< */
62
  0x25,0x19,0x29,0xFE,0xBC,0x2E,0xC4,0xD0,0x99,0x4C,0x48, /* %.)......LH */
63
  0xB0,0x9C,0x49,0xD2,0x1A,0x2D,0x02,0xC2,0x79,0x69,0x16, /* ..I..-..yi. */
64
  0x92,0xA8,0xC5,0xAB,0x45,0x5A,0x68,0xE8,0x75,0x57,0xCD, /* ....EZh.uW. */
65
  0xF1,0xB9,0xAA,0x13,0x88,0xE4,0x87,0x42,0x15,0xB3,0x58, /* .......B..X */
66
  0xF5,0xA3,0x46,0xB1,0xCF,0xD3,0x59,0x7E,0xBA,0xB5,0xA7, /* ..F...Y~... */
67
  0x6B,0x0B,0x17,0x57,0x6B,0x5C,0x4A,0xCD,0x53,0x76,0x2A, /* k..Wk\J.Sv* */
68
  0x1D,0x28,0xC5,0x1C,0x76,0x5C,0xDD,0x0A,0x00,0x4B,0xC0, /* .(..v\...K. */
69
  0x1B,0xCA,0xA8,0xE9,0x81,0x5B,0xA6,0xDC,0xA4,0x59,0x13, /* .....[...Y. */
70
  0xFC,0xBA,0x8F,0x98,0x79,0x44,0x25,0xC9,0x35,0x38,0xCA, /* ....yD%.58. */
71
  0xFF,0xF2,0x40,0xC0,0xB9,0x7D,0x1A,0x13,0x79,0x6A,0xC8, /* ..@..}..yj. */
72
  0x3E,0xC4,0x46,0x94,0x8D,0x3C,0x67,0x85,0xB1,0xA8,0x89, /* >.F..<g.... */
73
  0xC0,0xF2,0xE6,0x2F,0x9D,0x7C,0xC9,0xB4,0xBE,0xCF,0xE1, /* .../.|..... */
74
  0x7D,0xFE,0x1F,0x03,0x00,0x12,0x84,0x72,0x8C,0xE7,0xD8, /* }......r... */
75
  0x5E,0xC9,0xA9,0x01,0xBA,0x9B,0xC4,0x10,0x5C,0x70,0x2E, /* ^.......\p. */
76
  0x6C,0x48,0xE7,0x8C,0x15,0x0B,0x06,0x01,0xE5,0xFF,0xFF, /* lH......... */
77
  0xD4,0x0D,0x00,0x0F,0xCE,0x58,0x95,0x61,0xA8,0x9E,0x7B, /* .....X.a..{ */
78
  0x19,0x98,0xB0,0xF0,0xC6,0x72,0x82,0xD5,0x27,0x06,0x47, /* .....r..'.G */
79
  0x41,0x22,0x0F,0x65,0x93,0xC9,0x8A,0x09,0x19,0x48,0x1B, /* A".e.....H. */
80
  0xBD,0xD6,0x64,0x1A,0xAC,0xFF,0xF2,0x42,0xC0,0xF1,0x11, /* ..d....B... */
81
  0x25,0x14,0x22,0x06,0xBC,0x0E,0xD4,0x4E,0x99,0x90,0xA8, /* %."....N... */
82
  0xD8,0xB7,0xAD,0x5D,0x3E,0xAF,0x6E,0xBE,0x66,0x83,0xA4, /* ...]>.n.f.. */
83
  0xE3,0xC2,0xE0,0x29,0x43,0x87,0x5F,0x4F,0x27,0x9C,0x2C, /* ...)C._O'., */
84
  0xD0,0x91,0xF3,0x87,0x9B,0x54,0xED,0xD1,0xB4,0xF3,0x39, /* .....T....9 */
85
  0x87,0x22,0x06,0x86,0x0D,0x71,0xE4,0x6F,0x2A,0x08,0x04, /* ."...q.o*.. */
86
  0xC0,0x03,0x2A,0xB1,0xE2,0x05,0x4D,0x64,0xA1,0x9C,0xA6, /* ..*...Md... */
87
  0x0D,0x41,0xA6,0xF2,0x7A,0xC1,0x30,0xC3,0x38,0x26,0x09, /* .A..z.0.8&. */
88
  0x50,0x08,0xC4,0xF6,0x30,0x0C,0xA6,0xA9,0x17,0x00,0x13, /* P...0...... */
89
  0x0C,0xDC,0xC4,0x2F,0x28,0xEB,0x3F,0xCD,0x7A,0x3D,0x2F, /* .../(.?.z=/ */
90
  0xFF,0xF2,0x40,0xC0,0x18,0x6F,0x2E,0x13,0xA1,0xF2,0xBC, /* ..@..o..... */
91
  0x36,0xCB,0x4E,0x99,0x6E,0xFC,0xEE,0xC5,0xF0,0xA0,0xB7, /* 6.N.n...... */
92
  0x92,0xD4,0xEE,0x79,0x7C,0x50,0x5D,0xE5,0x04,0x94,0xA9, /* ...y|P].... */
93
  0x76,0xCF,0x6C,0x70,0xDD,0x0D,0xD4,0xEE,0xED,0x98,0xE8, /* v.lp....... */
94
  0xC8,0x35,0x36,0x7A,0x0C,0x05,0x80,0x03,0xBC,0xBE,0x91, /* .56z....... */
95
  0x00,0x7C,0xAE,0x65,0xB8,0x91,0xA3,0x33,0xBA,0x68,0x60, /* .|.e...3.h` */
96
  0xD4,0x1A,0x66,0xF8,0x43,0xA0,0x20,0x89,0xE7,0x80,0xD8, /* ..f.C. .... */
97
  0x1E,0x4F,0xA0,0x04,0x60,0x06,0x0A,0xA4,0x91,0x24,0xFA, /* .O..`....$. */
98
  0x9F,0x57,0x53,0xF4,0x7A,0xDB,0x5F,0x56,0xE3,0x6E,0x0B, /* .WS.z._V.n. */
99
  0x8B,0x3A,0x1C,0xF9,0x5E,0xFF,0xF2,0x42,0xC0,0xB1,0x00, /* .:..^..B... */
100
  0x38,0x14,0x09,0xEE,0xB4,0x36,0xD3,0x4E,0x99,0xA4,0x78, /* 8....6.N..x */
101
  0x94,0x73,0xC4,0x66,0x30,0xF5,0xEA,0xDB,0xBA,0x67,0x67, /* .s.f0....gg */
102
  0x95,0x6B,0xAB,0x68,0x5D,0x08,0xA1,0x39,0x56,0xAB,0x1E, /* .k.h]..9V.. */
103
  0xD5,0x03,0xE8,0x01,0x70,0x00,0xB3,0x93,0x33,0x19,0x8C, /* ....p...3.. */
104
  0x61,0x8F,0xBB,0x5D,0x24,0x12,0x63,0xD3,0x4B,0x5D,0x91, /* a..]$.c.K]. */
105
  0x08,0x43,0x22,0x56,0x1A,0xC5,0x10,0x21,0x84,0xA8,0xEA, /* .C"V...!... */
106
  0x80,0xBF,0x16,0x8E,0x3D,0x46,0x18,0x9C,0x6E,0x9A,0x91, /* ....=F..n.. */
107
  0xE6,0xC9,0x6F,0xD2,0x7D,0x27,0xD7,0xE9,0x6B,0xFF,0x0A, /* ..o.}'..k.. */
108
  0x03,0x43,0x89,0xD5,0xBF,0x52,0x97,0x0A,0x25,0x95,0x0D, /* .C...R..%.. */
109
  0xFF,0xF2,0x40,0xC0,0xF5,0xC3,0x41,0x13,0x81,0xEE,0xA8, /* ..@...A.... */
110
  0x5E,0xD3,0x44,0x98,0xFC,0xCF,0x97,0xF9,0x58,0xB5,0x33, /* ^.D.....X.3 */
111
  0xB1,0x85,0x47,0x86,0xD7,0x98,0x01,0x3B,0xA3,0x4F,0x7E, /* ..G....;.O~ */
112
  0x04,0xA6,0xC3,0x39,0x21,0x70,0x27,0x62,0xB5,0x18,0x10, /* ...9!p'b... */
113
  0x09,0x99,0x00,0x8B,0x7E,0xF2,0xBF,0x52,0x18,0x26,0x30, /* ....~..R.&0 */
114
  0x1C,0xB0,0x01,0x49,0x30,0xE0,0xC3,0x11,0x46,0x05,0xCC, /* ...I0...F.. */
115
  0x49,0x14,0x28,0xB2,0xED,0x4B,0x57,0x5A,0x2F,0xB7,0x46, /* I.(..KWZ/.F */
116
  0x63,0x34,0xD2,0xDA,0x9F,0x56,0x32,0xB7,0xA2,0x25,0xFF, /* c4...V2..%. */
117
  0x94,0x28,0x33,0x7F,0x3B,0xC4,0x50,0xEC,0xB1,0xE2,0x26, /* .(3.;.P...& */
118
  0xA1,0xB7,0x07,0x7F,0xFB,0xFF,0xF2,0x42,0xC0,0x67,0x6A, /* .......B.gj */
119
  0x4C,0x13,0xF9,0x6A,0x90,0x7E,0xDB,0x44,0x94,0x3F,0xFF, /* L..j.~.D.?. */
120
  0x14,0xD6,0x2A,0xFF,0xFF,0xC1,0x34,0x8C,0x48,0x22,0x00, /* ..*...4.H". */
121
  0x06,0x8F,0x21,0xFD,0x64,0x60,0x04,0x92,0x42,0xEA,0x74, /* ..!.d`..B.t */
122
  0x32,0x37,0xAA,0x5A,0x9F,0x67,0x01,0x8B,0x3F,0x37,0x31, /* 27.Z.g..?71 */
123
  0xDD,0x06,0x3C,0x01,0x34,0x30,0xE0,0x5C,0x78,0x78,0xCB, /* ..<.40.\xx. */
124
  0xD6,0xF1,0x31,0x8A,0x69,0x61,0x93,0x92,0x42,0xCE,0x4B, /* ..1.ia..B.K */
125
  0xC5,0x02,0x4E,0x73,0xC6,0x24,0x30,0xCD,0x08,0x66,0xC6, /* ..Ns.$0..f. */
126
  0x35,0xAB,0xA2,0x3D,0x2F,0xB3,0xBD,0x34,0x87,0x13,0xEE, /* 5..=/..4... */
127
  0x71,0x45,0x68,0xFA,0xEA,0x05,0x84,0x41,0x36,0x4C,0x9A, /* qEh....A6L. */
128
  0xFF,0xF2,0x40,0xC0,0xC9,0x92,0x56,0x13,0xD0,0x6E,0x70, /* ..@...V..np */
129
  0x54,0xD3,0xCC,0x28,0x06,0xD7,0x0E,0xA4,0x1D,0x9C,0x9D, /* T..(....... */
130
  0xD9,0xA9,0x88,0x7B,0xB5,0xA3,0x56,0xB7,0x4B,0x4B,0x5A, /* ...{..V.KKZ */
131
  0x9B,0x2C,0xA9,0xAD,0x6F,0x99,0x6C,0xC0,0x4C,0x14,0x14, /* .,..o.l.L.. */
132
  0xEF,0xB4,0x20,0x91,0x5F,0xBC,0x81,0x41,0x41,0x5D,0xD4, /* .. ._..AA]. */
133
  0x20,0xBD,0x05,0x1A,0x6F,0xE2,0x68,0x56,0x41,0x41,0x57, /*  ...o.hVAAW */
134
  0xF9,0xBF,0x89,0x82,0x8E,0xC7,0x8F,0x0A,0x0A,0x09,0x37, /* ..........7 */
135
  0xF1,0x05,0x0A,0x0A,0x0A,0x0A,0x09,0x05,0x37,0xFF,0x10, /* ........7.. */
136
  0x50,0x50,0x53,0x65,0xFF,0xFF,0xFD,0x75,0xDF,0xFF,0xFF, /* PPSe...u... */
137
  0x68,0x4F,0xFF,0x84,0x70,0xFF,0xF2,0x42,0xC0,0x27,0x50, /* hO..p..B.'P */
138
  0x5F,0x17,0xE8,0x82,0x3C,0x11,0x58,0x18,0x01,0x55,0x48, /* _...<.X..UH */
139
  0xBC,0x52,0xFC,0x4A,0x4C,0x3C,0xD5,0xF6,0x11,0x2D,0xBF, /* .R.JL<...-. */
140
  0xEA,0x03,0x5C,0x57,0x29,0xBF,0xC3,0x75,0x1C,0xE6,0xDD, /* ..\W)..u... */
141
  0xBF,0xED,0xEF,0xD0,0x98,0x77,0x71,0x95,0x73,0xFF,0xED, /* .....wq.s.. */
142
  0x54,0xBE,0xD5,0xEE,0xAE,0xC2,0xD5,0x0B,0xFF,0xF1,0x97, /* T.......... */
143
  0x8A,0xE4,0x42,0x09,0x99,0xB1,0xEA,0x94,0xDC,0x78,0xB5, /* ..B......x. */
144
  0x34,0x0F,0xF1,0x8F,0xFC,0x15,0xF6,0xFA,0xB1,0x47,0xA9, /* 4........G. */
145
  0x6C,0x67,0x43,0x8B,0xF2,0x76,0x22,0xED,0xDA,0x85,0xBA, /* lgC..v".... */
146
  0x2F,0xC7,0xF9,0xCF,0xFC,0xDB,0x46,0x2E,0x50,0x0A,0x84, /* /.....F.P.. */
147
  0xFF,0xF2,0x40,0xC0,0xC6,0x4A,0x59,0x28,0x2B,0x19,0xE0, /* ..@..JY(+.. */
148
  0x01,0x89,0x78,0x00,0x52,0x85,0x3C,0x8E,0x54,0x9A,0x48, /* ..x.R.<.T.H */
149
  0x5A,0x72,0x32,0x94,0xBF,0x43,0x4F,0x24,0x53,0x4B,0xEC, /* Zr2..CO$SK. */
150
  0x4B,0x99,0x0E,0x66,0x1F,0xFF,0xCE,0x7F,0xFF,0x3F,0x10, /* K..f.....?. */
151
  0xAE,0x82,0x62,0x71,0x34,0x18,0x59,0x9B,0x51,0xC7,0x59, /* ..bq4.Y.Q.Y */
152
  0xCE,0xEE,0xA5,0xFE,0x02,0xBB,0x30,0x91,0x49,0xD5,0x4B, /* ......0.I.K */
153
  0xF3,0xDC,0x9A,0xA9,0x57,0x8E,0x72,0x10,0xC0,0x5D,0x60, /* ....W.r..]` */
154
  0x67,0xFC,0x7D,0xD6,0xBA,0xDD,0xB3,0x8B,0x5A,0x0A,0x4C, /* g.}.....Z.L */
155
  0x41,0x4D,0x45,0x33,0x2E,0x39,0x33,0xAA,0xAA,0xAA,0xAA, /* AME3.93.... */
156
  0xAA,0xAA,0xAA,0xAA,0xAA,0x54,0x41,0x47,0x48,0x65,0x6C, /* .....TAGHel */
157
  0x6C,0x6F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, /* lo          */
158
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, /*             */
159
  0x20,0x20,0x20,0x20,0x20,0x50,0x61,0x6E,0x75,0x2D,0x4B, /*      Panu-K */
160
  0x72,0x69,0x73,0x74,0x69,0x61,0x6E,0x20,0x50,0x6F,0x69, /* ristian Poi */
161
  0x6B,0x73,0x61,0x6C,0x6F,0x20,0x20,0x20,0x20,0x20,0x20, /* ksalo       */
162
  0x20,0x20,0x56,0x53,0x44,0x53,0x50,0x20,0x54,0x65,0x73, /*   VSDSP Tes */
163
  0x74,0x69,0x6E,0x67,0x20,0x20,0x20,0x20,0x20,0x20,0x20, /* ting        */
164
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, /*             */
165
  0x20,0x20,0x20,0x4D,0x50,0x33,0x20,0x48,0x65,0x6C,0x6C, /*    MP3 Hell */
166
  0x6F,0x2C,0x20,0x57,0x6F,0x72,0x6C,0x64,0x21,0x20,0x20, /* o, World!   */
167
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, /*             */
168
  0x00, /* . */
169
};
170
171
static void wait_dreq(void) {
172
  while(GPIO_ReadInputDataBit(DREQ_PORT, DREQ_PIN) == Bit_RESET) {
173
    asm("NOP");
174
  }
175
}
176
177
static uint8_t send(uint8_t byte) {
178
  SPI_SendData(SPI3, byte);
179
  while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY));
180
  while (!SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE));
181
  while (!SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE));
182
  return SPI_ReceiveData(SPI3);
183
}
184
185
static void write_register(uint8_t address, uint8_t high, uint8_t low){
186
  wait_dreq();
187
  GPIO_WriteBit(CS_PORT, CS_PIN, Bit_RESET);
188
  send(0x02);
189
  send(address);
190
  send(high);
191
  send(low);
192
  wait_dreq();
193
  GPIO_WriteBit(CS_PORT, CS_PIN, Bit_SET);
194
}
195
196
uint16_t read_register(uint8_t address){
197
  uint16_t result;
198
  wait_dreq();
199
  GPIO_WriteBit(CS_PORT, CS_PIN, Bit_RESET);
200
  send(0x03);
201
  send(address);
202
  result = send(0xFF)<<8;
203
  wait_dreq();
204
  result |= send(0xFF);
205
  wait_dreq();
206
  GPIO_WriteBit(CS_PORT, CS_PIN, Bit_SET);
207
  return result;
208
}
209
210
int main(void) {
211
  GPIO_InitTypeDef gpio;
212
  SPI_InitTypeDef spi;
213
214
  timer_init();
215
216
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
217
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
218
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
219
220
  GPIO_StructInit(&gpio);
221
222
  gpio.GPIO_Pin = RESET_PIN;
223
  gpio.GPIO_Mode = GPIO_Mode_OUT;
224
  gpio.GPIO_Speed = GPIO_Speed_50MHz;
225
  gpio.GPIO_OType = GPIO_OType_PP;
226
  gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
227
  GPIO_Init(RESET_PORT, &gpio);
228
  GPIO_WriteBit(RESET_PORT, RESET_PIN, Bit_RESET);
229
230
  gpio.GPIO_Pin = BSYNC_PIN;
231
  gpio.GPIO_Mode = GPIO_Mode_OUT;
232
  gpio.GPIO_Speed = GPIO_Speed_50MHz;
233
  gpio.GPIO_OType = GPIO_OType_PP;
234
  gpio.GPIO_PuPd = GPIO_PuPd_UP;
235
  GPIO_Init(BSYNC_PORT, &gpio);
236
  GPIO_WriteBit(BSYNC_PORT, BSYNC_PIN, Bit_SET);
237
238
  gpio.GPIO_Pin = CS_PIN;
239
  gpio.GPIO_Mode = GPIO_Mode_OUT;
240
  gpio.GPIO_Speed = GPIO_Speed_50MHz;
241
  gpio.GPIO_OType = GPIO_OType_PP;
242
  gpio.GPIO_PuPd = GPIO_PuPd_UP;
243
  GPIO_Init(CS_PORT, &gpio);
244
  GPIO_WriteBit(CS_PORT, CS_PIN, Bit_SET);
245
246
  gpio.GPIO_Pin = DREQ_PIN;
247
  gpio.GPIO_Speed = GPIO_Speed_50MHz;
248
  gpio.GPIO_Mode = GPIO_Mode_IN;
249
  gpio.GPIO_PuPd = GPIO_PuPd_UP;
250
  GPIO_Init(DREQ_PORT, &gpio);
251
252
  timer_delay(1000);
253
254
  gpio.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
255
  gpio.GPIO_Mode = GPIO_Mode_AF;
256
  gpio.GPIO_Speed = GPIO_Speed_50MHz;
257
  gpio.GPIO_PuPd = GPIO_PuPd_UP;
258
  GPIO_Init(GPIOC, &gpio);
259
260
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3);
261
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3);
262
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3);
263
264
  SPI_StructInit(&spi);
265
  spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
266
  spi.SPI_Mode = SPI_Mode_Master;
267
  spi.SPI_DataSize = SPI_DataSize_8b;
268
  spi.SPI_CPOL = SPI_CPOL_Low;
269
  spi.SPI_CPHA = SPI_CPHA_1Edge;
270
  spi.SPI_NSS = SPI_NSS_Soft;
271
  spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;  //937,5kHz
272
  SPI_Init(SPI3,&spi);
273
  SPI_Cmd(SPI3, ENABLE);
274
275
  timer_delay(500);
276
  GPIO_WriteBit(RESET_PORT, RESET_PIN, Bit_SET);
277
  timer_delay(500);
278
279
280
  uint16_t mode = read_register(0x00);  //result = 0x4800
281
  uint16_t status = read_register(0x01);  //result = 0x48
282
  uint16_t clock = read_register(0x03);  //result = 0x00
283
284
285
  write_register(0x0B, 0xFF, 0xFF);  //set volume
286
  //write_register(0x03, 0x60, 0x00);  //set clock
287
  uint16_t test_volume = read_register(0x0B);  //result = 0xFFFF
288
289
  while(1) {
290
    for(uint32_t i=0 ; i<sizeof(HelloMP3) ; i++) {
291
      wait_dreq();
292
      GPIO_WriteBit(BSYNC_PORT, BSYNC_PIN, Bit_RESET);
293
      send(HelloMP3[i]);
294
      GPIO_WriteBit(BSYNC_PORT, BSYNC_PIN, Bit_SET);
295
    }
296
    }
297
    return 0;
298
}

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

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.

von Macron (Gast)


Lesenswert?

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.

von Thorsten (Gast)


Lesenswert?

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);
>     }
>     }

von Macron (Gast)


Lesenswert?

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?

von Thorsten (Gast)


Lesenswert?

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.

von Macron (Gast)


Lesenswert?

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:
1
RCC_APB1PeriphClockCmd(RCC_APB1Periph_AFIO, ENABLE);
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.

von Thorsten (Gast)


Lesenswert?

Also ich habe den CS gerade nochmal nachgemessen, der funktioniert genau 
wie gewünscht.

Nutze beim debuggen das SWD Interface (PA13, PA14)

von Thorsten (Gast)


Lesenswert?

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.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

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.

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.