一步一步和我走,进入缤纷的嵌入式世界(连载1)

来源:互联网 发布:软件开发前景 编辑:程序博客网 时间:2024/05/02 02:43

(本文系原创,转载请注明出处,谢谢

大二的时候,我接触嵌入式这个词,虽然之前我已经有了近4年的C/C++设计经验。对嵌入式这个词汇还是无比的陌生,如今到管理嵌入式开发团队。想想恍如昨日做梦一样。若干年前,接触电脑可能还是个比较新鲜的事物,如今是不算什么了;可是说起嵌入式,恐怕就没PC那么熟悉了吧。大多数人眼中的嵌入式难道就是CPU+Linux? 国内许多培训机构,让连个C/C++都没搞清楚的人搞起 Linux 移植,搞嵌入式,真是一夜之间千树万树梨花开啊……

 

本人不才,我眼中的嵌入式世界不是大多数人眼中的Linux,诚然,嵌入式引入Linux这样的系统,无疑给嵌入式带来更多的用户体验、开发体验和全新的产品概念。但不能忽略,Linux不是万试万灵的药,很多时候我们需要VxWorksuC/OS-IIRTEMSWinCE,甚至是简单的不能再简单的前后台系统。所以,我特来CSDN找个部落格格,专门向大家讨论和学习嵌入式方面的内容,如嵌入式的软硬件开发、嵌入式的项目管理等。

 

就由我抛出个石块,连载一个简单的音乐播放器的制作过程,先为博客开个头吧,希望喜欢嵌入式的朋友向我拍砖,多多支持一下。

 

一个简单的音乐播放器,先大致的列举一下这个小播放器有哪些功能。

1.   首先能播放不少于4分钟的音乐或人声;

2.   音乐和人声的质量不能太差,采样频率不低于22KHz

3.   音乐和人声都是单声道;

4.   音量尽可能的大;

5.   电脑的MP3能下载到该音乐模块上播放;

6.   可以由按键控制其播放、暂停;

7.   可以通过电脑控制其播放、暂停;

8.   音乐播放器可以用4.5V的电池或电池组工作;

9.   可以使用6V的低压直流电源工作;

10.BOM成本和开发成本尽可能的低。

 

好了,这份粗糙的功能列表就是我们努力的方向了,开始整体方案的设计。

1.   市面上流行很多音乐模块,但是采样率多集中在8KHz12KHz16KHz,诸如Winbond华邦Voice & Speech语音芯片、凌阳的SPCE061AWinbond的芯片还不错,价格不贵,但是质量只能满足一般的电话级音质,想达到一个比较好的效果,令人担忧;SPCE061A号称语音单片机,内部DA只有10Bit,卖36块大洋,简直是抢。让我们做个比这个更好的……华邦的Voice&Speech芯片原理比较特别,有兴趣的可以了解一下。市面上大多数像SPCE061A的这种方案,首先将音频压缩成数字格式,然后通过CPU解码输出到DA上,信号经过放大后推动扬声器发声。我们就选定这个思路往下做。

2.   如果直接使用MP3解码,那么工作量必然加大。并且,通常能对MP3解码的CPU 30MIPS以上。这样的CPU市面上可见的,ARM7是首选,一般这样的ARM都在3美金以上,那么整体的方案的成本就比较高。如果不压缩,单声道PCM音频,22KHz16Bit240秒将达到10Mbytes。显然这样会增加存储器的成本,压缩的优势明显,综合各种压缩算法,比较好的是ADPCM,算法的复杂度适中,对CPU的要求不高,压缩率也是非常可观,若是4bit压缩的话,约为PCM0.25倍,22KHz16Bit240秒那么只有2.5Mbytes了。

3.   采用ADPCM,那么可选的CPU就非常多了,但是考虑到音质的问题,需要外置DAC,一般音频的外置DAC使用的是I2S接口,具有这个接口的芯片都是3个美金以上。另外,要求可更换音乐,那么音乐需要合适的存储器来存储,现在比较廉价的是NandFlash,并口的NandFlash,要么硬件上有Nandflash接口,要么通过IO软件做个Nandflash接口,一个要求硬件有专门的接口;一个要求硬件有超多的IO口,IO口还要满足一定的速率;Norflash可以不用考虑,基本上和并口Nandflash一样的问题,成本还不如并口Nandflash。所以,考虑串口的Nandflash,一般串口的Nandflash都是SPI接口。这里从开发工具、开发难度、整体成本考虑,选择号称1个美金的ARM,美国Luminary MicroLM3S101。周立功代理,和他们代理砍了砍价,12RMB搞定。

4.   有个设计难点,LM3S1011SPI接口,但是没有I2S接口,如何与I2S接口的DAC连接。通过仔细研究I2S的时序图,发现其和SPI接口非常相像,只是多了一个选择左右声道的信号。这里提出一个假设,可不可以通过硬件的SPI口加上一个GPIO,模拟I2S的接口。必须要使用硬件的SPI口,因为22KHz16Bit的左右声道数据(单声道,左右声道数据一样),带宽达到704Kbps,这个速度对任何用软件模拟SPI的单片机来说都是个不小的负担。LM3S101SPI输出带宽可到10Mbps,这下放心了。

5.   Nandflash选择M25P32,意法半导体的,8块钱,4MBytes,可存360秒的22KHz4Bit、单声道的ADPCM音频。这里又有个问题,LM3S101只有一个硬件SPI口,这里有两种设计,一种和DAC共用SPI口,片选隔开;另一种是软件模拟一个SPI口,一般音频DAC不带片选口,如果要用片选信号隔开,需要外加逻辑电路,为了减少成本,考虑使用软件模拟SPI口,使用4GPIO

6.   DAC有很多选则,这里选择便宜的82V731,16Bit双声道,选它因为便宜RMB 0.8元,并且比其他的I2SDAC少了一个同步时钟线,上面我们说到,I2SSPI+GPIO模拟出来的,根本无法提供一个同步时钟线,那么这里就有优势了。

7.   和电脑直接连接有很多方式:USBUART、以太网甚至可以是蓝牙和IrDA。但是从成本的考虑,无论是BOM成本还是开发成本,使用UART显然是成本最低的,需要加一颗MAX3232做电平转换,选他主要是CPU是3.3V的电平,支持115200bps的波特率。

8.   放大器件选择TITPA02535V可到1W3V可到0.3W,价格也不贵,0.7个美金。

9.   归总一下我们的思路:使用CPU将一种压缩音频格式从存储器件往DAC搬。CPU选择:LM3S101;存储器选择:M25P32DAC选择:82V731;放大器件选择:Tpa0253CPUM25P32使用4GPIO模拟SPI接口,至少要达到88Kbps的效率;CPUDAC使用硬件SPI+GPIO口模拟的方式,带宽至少达到704KbpsCPU与电脑使用UART口连接。

10.这里讲一下工具链:ARM的开发工具很多,考虑到使用调试的方便,采用IAR公司的EWARM Kickstart平台,32KB以下代码尺寸完全免费(晕,LM3S101的程序空间只有8KB)。个人觉得比ADSRDS都好用,他号称拥有全球最先进的C-SPY调试器,不过姑且听之吧。我使用了蛮长时间的,的确是有点份量。PC端的工具那就用VC平台吧。原理图和PCB均使用Allegro制作。

今天晚上就到这吧,累了,下次我们说说具体硬件设计……(To be continued…)

(本文系原创,转载请注明出处,谢谢)