资讯详情

VS1003 VS1053B电路图分析及程序和pdf下载

MP3,MP4,数码相机曾经是奢侈品。科技发展了,这些东西也就成了普通手机的附属品了。但是作为手艺人学习这些芯片了解这些高性能芯片是很有必要的。学习了解它既拓展了自己的眼界,也可以提升自己对嵌入式系统的认识。原子战舰板上就板载了一颗高性能MP3音乐播放器芯片VS1053B芯片。通过原子源码对一些参数的修改,也能欣赏美妙的音乐。这是一款真正的数字产品。还可以作为录音机使用。 VS1053是继VS1003后荷兰公司出品的又一款高性能解码芯片。该芯片可以实现对MP3/OGG/WMA/FLAC/WAV/AAC/MIDI等音频格式的解码,同时还可以支持ADPCM/OGG等格式的编码,性能相对以往的VS1003提升不少。VS1053拥有一个高性能的DSP处理器核VS_DSP,16K的指令RAM,0.5K的数据RAM,通过SPI控制,具有8个可用的通用IO口和一个串口,芯片内部还带了一个可变采样率的立体声ADC(支持咪头/咪头+线路/2线路)、一个高性能立体声DAC及音频耳机放大器。

VS1053既然是高性能DSP,也就是说它本身就可以作为主机象普通 一样使用。同普通MCU一样DSP也具有一样的最小系统,所以在电路设计中自然就必须要晶振和复位电路。通过读datasheet知道,VS1053B也有中断功能,同样有GPIO!操作寄存器可以控制时钟频率。 下面是电路图: 下面是电路图:即耳机驱动电路。 这两张电路图是战舰板原理图,电路图设计是核心技术。本人对原子的电路设计只有学习和佩服的份。其中74HC4052和TDA1308分别是用作音频选择和耳机驱动,74HC4052芯片将板载的MP3,FM收音机和STM32发出的方波信号通过程序控制做出选择;也就是说将众多音频信号集于一身可以分别单独送到耳机驱动电路输出,既节约了空间也节约了成本。设计非常精妙! 通过学习VS1053B,对电路分析能力也有提高。如果看不懂电路图,即便c语言代码分析的多么透彻也无济于事。通过学习类似VS1053B芯片的驱动,能真正提高手艺人的编程能力。通过数据手册,写出相应芯片的驱动程序实现一些简单功能是一个程序员的核心竞争力!这里涉及到许多c语言编程技巧。一句话,目前我是没有这个能力。也就只能好好学习别人源码的份了。有所收获就记录下来。 VS1053B,LCD,RDA5802收音机芯片,ADXL345重力芯片等等这些芯片,它们有一个共同点:寄存器,寄存器地址,数据帧,命令字,I2C, SPI 协议等等。学会这些外设芯片的驱动程序编写方法,才能真正发挥处理器的强大功能。 有感而发! 下面提供VS1003 VS1053B芯片的51单片机完整驱动程序和VS1053 pdf中文资料文件下载:http://www.51hei.com/f/VS1053.rar 下面是单片机程序的主要部分预览: /* * MP3模块测试程序 * * 用途:MP3模块测试程序 * vs1003 的硬件测试程序,主控芯片为STC12LE5A60S2 * 其他的微处理器(带SPI 的)只需稍加修改即可适用 * 对于不带硬SPI接口的微处理器可以用IO进行SPI的时序模拟 * * 作者 日期 备注 * Huafeng Lin 20010/09/10 新增 * Huafeng Lin 20010/09/10 修改 * */ #include "vs1003.h" #include "MusicDataMP3.c" #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define bool bit #define true 1 #define flase 0 //针对 读写板调整引脚 #define uint8 unsigned char sbit MP3_XRESET = P3^2; #define Mp3PutInReset() { MP3_XRESET = 0; } #define Mp3ReleaseFromReset() { MP3_XRESET =1; } sbit MP3_XCS = P3^3; #define Mp electControl() { MP3_XCS = 0; } #define Mp3DeselectControl() { MP3_XCS = 1; } sbit MP3_XDCS = P3^4; #define Mp3SelectData() { MP3_X S = 0; } #define Mp3DeselectData() { MP3_XDCS = 1; } sbit MP3_DREQ = P3^5; sbit c_SPI_SI = P1^5; sbit c_SPI_SO = P1^6; sbit c_SPI_CLK = P1^7; #define Macro_Set_SI_High() c_SPI_SI = 1 #define Macro_Set_SI_Low() c_SPI_SI = 0 #define Macro_Set_CLK_High() c_SPI_CLK = 1 #define Macro_Set_CLK_Low() c_SPI_CLK = 0 void _write_english_string(unsigned char X,unsigned char Y,char *s); //#define SPIWait() { while((S0SPSR & 0x80) == 0); }//等待SPI将数据发送完毕 //#define SPI_RESULT_BYTE S0SPDR //extern long volatile timeval; //用于延时的全局变量 //1ms Delayfunction //void Delay(uchar ucDelayCount) void wait(uchar ucDelayCount) { uchar ucTempCount; uchar uci; for(ucTempCount=0; ucTempCount<ucDelayCount; ucTempCount++) { // uci = 200; //Err // uci = 250; //OK uci = 230; while(uci--) { _nop_(); } } } //#define wait(x) Delay(x) /**********************************************************/ /* 函数名称 : MSPI_Init */ /* 函数功能 : 初始化SPI接口,设置为主机。 */ /* 参数 : 无 */ /* 返回值 : 无 */ /*--------------------------------------------------------*/ void MSPI_Init(void) { /* PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00005500; //选择 SPI S0SPCCR = 0x08; // SPI 时钟设置 S0SPCR = (0 << 3) | // CPHA = 0, (0 << 4) | // CPOL = 0, (1 << 5) | // MSTR = 1, (0 << 6) | // LSBF = 0, (0 << 7); // SPIE = 0, */ c_SPI_SO = 1; MP3_DREQ = 1; } /**********************************************************/ /* 函数名称 : InitPortVS1003 */ /* 函数功能 : MCU与vs1003接口的初始化 */ /* 参数 : 无 */ /* 返回值 : 无 */ /*--------------------------------------------------------*/ void InitPortVS1003(void) { MSPI_Init();//SPI口的初始化 // IODIR &= 0xfffeffff; //其他接口线的设置,其中dreq 为输入口 // IODIR |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS均为输出口 // IOSET |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS默认输出高电平 MP3_DREQ = 1; //置为输入 MP3_XRESET = 1; MP3_XCS = 1; MP3_XDCS = 1; } //uint8 SD_SPI_ReadByte(void); //void SD_SPI_WriteByte(uint8 ucSendData); //#define SPI_RecByte() SD_SPI_ReadByte() //#define SPIPutChar(x) SD_SPI_WriteByte(x) #if 1 /**********************************************************/ /* 函数名称 : SPIPutChar */ /* 函数功能 : 通过SPI发送一个字节的数据 */ /* 参数 : 待发送的字节数据 */ /* 返回值 : 无 */ /*--------------------------------------------------------*/ void SPIPutChar(unsigned char ucSendData) { // S0SPDR = c; // while((S0SPSR & 0x80) == 0);
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司