English
Language : 

VS1053B Datasheet, PDF (57/79 Pages) List of Unclassifed Manufacturers – Ogg Vorbis/MP3/AAC/WMA/MIDI AUDIO CODEC
VLSI
Solution y
VS1053b preliminary
VS1053B
9. OPERATION
9.11 Extra Parameters
The following structure is in X memory at address 0x1e00 (note the different location than in VS1033)
and can be used to change some extra parameters or get useful information. The chip ID is also easily
available.
#define PARAMETRIC_VERSION 0x0003
struct parametric {
/* configs are not cleared between files */
u_int32 chipID;
/*1e00/01 Initialized at reset for your convenience */
u_int16 version; /*1e02 - structure version */
u_int16 config1; /*1e03 ---- ---- ppss RRRR PS mode, SBR mode, Reverb */
u_int16 playSpeed; /*1e04 0,1 = normal speed, 2 = twice, 3 = three times etc. */
u_int16 byteRate; /*1e05 average byterate */
u_int16 endFillByte; /*1e06 byte value to send after file sent */
u_int16 reserved[16]; /*1e07..15 file byte offsets */
u_int32 jumpPoints[8]; /*1e16..25 file byte offsets */
u_int16 latestJump; /*1e26 index to lastly updated jumpPoint */
u_int32 positionMsec /*1e27-28 play position, if known (WMA, Ogg Vorbis) */
s_int16 resync;
/*1e29 > 0 for automatic m4a, ADIF, WMA resyncs */
union {
struct {
u_int32 curPacketSize;
u_int32 packetSize;
} wma;
struct {
u_int16 sceFoundMask; /*1e2a SCE’s found since last clear */
u_int16 cpeFoundMask; /*1e2b CPE’s found since last clear */
u_int16 lfeFoundMask; /*1e2c LFE’s found since last clear */
u_int16 playSelect; /*1e2d 0 = first any, initialized at aac init */
s_int16 dynCompress; /*1e2e -8192=1.0, initialized at aac init */
s_int16 dynBoost;
/*1e2f 8192=1.0, initialized at aac init */
u_int16 sbrAndPsStatus; /*0x1e30 1=SBR, 2=upsample, 4=PS, 8=PS active */
} aac;
struct {
u_int32 bytesLeft;
} midi;
struct {
s_int16 gain; /* 0x1e2a proposed gain offset in 0.5dB steps, default = -12 */
} vorbis;
} i;
};
Notice that reading two-word variables through the SCI WRAMADDR and SCI WRAM interface is
not protected in any way. The variable can be updated between the read of the low and high parts. The
problem arises when both the low and high parts change values. To determine if the value is correct, you
should read the value twice and compare the results.
The following example shows what happens when bytesLeft is decreased from 0x10000 to 0xffff and
the update happens between low and high part reads or after high part read.
Address
0x1e2a
0x1e2b
0x1e2a
0x1e2b
Read Invalid
Value
0x0000 change after this
0x0000
0xffff
0x0000
Address
0x1e2a
0x1e2b
0x1e2a
0x1e2b
Read Valid
Value
0x0000
0x0001 change after this
0xffff
0x0000
No Update
Address Value
0x1e2a 0x0000
0x1e2b 0x0001
0x1e2a 0x0000
0x1e2b 0x0001
Version 0.5, 2007-12-03
57