一步一步和我走,进入缤纷的嵌入式世界(连载1)
来源:互联网 发布:软件开发前景 编辑:程序博客网 时间:2024/05/02 02:43
(本文系原创,转载请注明出处,谢谢)
大二的时候,我接触嵌入式这个词,虽然之前我已经有了近4年的C/C++设计经验。对嵌入式这个词汇还是无比的陌生,如今到管理嵌入式开发团队。想想恍如昨日做梦一样。若干年前,接触电脑可能还是个比较新鲜的事物,如今是不算什么了;可是说起嵌入式,恐怕就没PC那么熟悉了吧。大多数人眼中的嵌入式难道就是CPU+Linux? 国内许多培训机构,让连个C/C++都没搞清楚的人搞起 Linux 移植,搞嵌入式,真是一夜之间千树万树梨花开啊……
本人不才,我眼中的嵌入式世界不是大多数人眼中的Linux,诚然,嵌入式引入Linux这样的系统,无疑给嵌入式带来更多的用户体验、开发体验和全新的产品概念。但不能忽略,Linux不是万试万灵的药,很多时候我们需要VxWorks、uC/OS-II、RTEMS、WinCE,甚至是简单的不能再简单的前后台系统。所以,我特来CSDN找个部落格格,专门向大家讨论和学习嵌入式方面的内容,如嵌入式的软硬件开发、嵌入式的项目管理等。
就由我抛出个石块,连载一个简单的音乐播放器的制作过程,先为博客开个头吧,希望喜欢嵌入式的朋友向我拍砖,多多支持一下。
一个简单的音乐播放器,先大致的列举一下这个小播放器有哪些功能。
1. 首先能播放不少于4分钟的音乐或人声;
2. 音乐和人声的质量不能太差,采样频率不低于22KHz;
3. 音乐和人声都是单声道;
4. 音量尽可能的大;
5. 电脑的MP3能下载到该音乐模块上播放;
6. 可以由按键控制其播放、暂停;
7. 可以通过电脑控制其播放、暂停;
8. 音乐播放器可以用4.5V的电池或电池组工作;
9. 可以使用6V的低压直流电源工作;
10.BOM成本和开发成本尽可能的低。
好了,这份粗糙的功能列表就是我们努力的方向了,开始整体方案的设计。
1. 市面上流行很多音乐模块,但是采样率多集中在8KHz、12KHz、16KHz,诸如Winbond华邦Voice & Speech语音芯片、凌阳的SPCE061A。Winbond的芯片还不错,价格不贵,但是质量只能满足一般的电话级音质,想达到一个比较好的效果,令人担忧;SPCE061A号称语音单片机,内部DA只有10Bit,卖36块大洋,简直是抢。让我们做个比这个更好的……华邦的Voice&Speech芯片原理比较特别,有兴趣的可以了解一下。市面上大多数像SPCE061A的这种方案,首先将音频压缩成数字格式,然后通过CPU解码输出到DA上,信号经过放大后推动扬声器发声。我们就选定这个思路往下做。
2. 如果直接使用MP3解码,那么工作量必然加大。并且,通常能对MP3解码的CPU在 30MIPS以上。这样的CPU市面上可见的,ARM7是首选,一般这样的ARM都在3美金以上,那么整体的方案的成本就比较高。如果不压缩,单声道PCM音频,22KHz,16Bit,240秒将达到10Mbytes。显然这样会增加存储器的成本,压缩的优势明显,综合各种压缩算法,比较好的是ADPCM,算法的复杂度适中,对CPU的要求不高,压缩率也是非常可观,若是4bit压缩的话,约为PCM的0.25倍,22KHz,16Bit,240秒那么只有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 Micro的LM3S101。周立功代理,和他们代理砍了砍价,12块RMB搞定。
4. 有个设计难点,LM3S101有1个SPI接口,但是没有I2S接口,如何与I2S接口的DAC连接。通过仔细研究I2S的时序图,发现其和SPI接口非常相像,只是多了一个选择左右声道的信号。这里提出一个假设,可不可以通过硬件的SPI口加上一个GPIO,模拟I2S的接口。必须要使用硬件的SPI口,因为22KHz、16Bit的左右声道数据(单声道,左右声道数据一样),带宽达到704Kbps,这个速度对任何用软件模拟SPI的单片机来说都是个不小的负担。LM3S101的SPI输出带宽可到10Mbps,这下放心了。
5. Nandflash选择M25P32,意法半导体的,8块钱,4MBytes,可存360秒的22KHz、4Bit、单声道的ADPCM音频。这里又有个问题,LM3S101只有一个硬件SPI口,这里有两种设计,一种和DAC共用SPI口,片选隔开;另一种是软件模拟一个SPI口,一般音频DAC不带片选口,如果要用片选信号隔开,需要外加逻辑电路,为了减少成本,考虑使用软件模拟SPI口,使用4个GPIO。
6. DAC有很多选则,这里选择便宜的82V731,16Bit双声道,选它因为便宜RMB 0.8元,并且比其他的I2S的DAC少了一个同步时钟线,上面我们说到,I2S是SPI+GPIO模拟出来的,根本无法提供一个同步时钟线,那么这里就有优势了。
7. 和电脑直接连接有很多方式:USB、UART、以太网甚至可以是蓝牙和IrDA。但是从成本的考虑,无论是BOM成本还是开发成本,使用UART显然是成本最低的,需要加一颗MAX3232做电平转换,选他主要是CPU是3.3V的电平,支持115200bps的波特率。
8. 放大器件选择TI的TPA0253,5V可到1W,3V可到0.3W,价格也不贵,0.7个美金。
9. 归总一下我们的思路:使用CPU将一种压缩音频格式从存储器件往DAC搬。CPU选择:LM3S101;存储器选择:M25P32;DAC选择:82V731;放大器件选择:Tpa0253。CPU与M25P32使用4个GPIO模拟SPI接口,至少要达到88Kbps的效率;CPU与DAC使用硬件SPI+GPIO口模拟的方式,带宽至少达到704Kbps;CPU与电脑使用UART口连接。
10.这里讲一下工具链:ARM的开发工具很多,考虑到使用调试的方便,采用IAR公司的EWARM Kickstart平台,32KB以下代码尺寸完全免费(晕,LM3S101的程序空间只有8KB)。个人觉得比ADS、RDS都好用,他号称拥有全球最先进的C-SPY调试器,不过姑且听之吧。我使用了蛮长时间的,的确是有点份量。PC端的工具那就用VC平台吧。原理图和PCB均使用Allegro制作。
今天晚上就到这吧,累了,下次我们说说具体硬件设计……(To be continued…)
(本文系原创,转载请注明出处,谢谢)
- 一步一步和我走,进入缤纷的嵌入式世界(连载1)
- 一步一步和我走,进入缤纷的嵌入式世界(连载2)
- 一步一步和我走,进入缤纷的嵌入式世界(连载3)
- 一步一步和我走,进入缤纷的嵌入式世界(连载4)
- 一步一步和我一起走,进入缤纷的嵌入式世界(连载5)
- 一步一步和我一起走,进入缤纷的嵌入式世界(连载6)
- 篇1:进入嵌入式世界
- 缤纷乐——我的快乐
- 移动互联网的新宠:Android之缤纷世界
- 我和我的世界
- 他和她的缤纷颜色
- 一步一步进入React的世界(React+Webpack+ES6组合配置)
- 一步一步进入React的世界(React+Webpack+ES6组合配置)
- 严谨 认真,一步一步的走
- 从0到1起步-跟我进入堆外内存的奇妙世界
- 从0到1起步-跟我进入堆外内存的奇妙世界
- 从0到1起步-跟我进入堆外内存的奇妙世界
- Android跟随Linux进入嵌入式世界
- 转贴一篇 - 一个毕业十年程序员的故事
- POSIX pthread线程库的封装-主动对象
- 嵌入式Linux启动过程中的问题积累
- 模式、框架之我见
- 黑客书架上出现频率最高的9部半书籍
- 一步一步和我走,进入缤纷的嵌入式世界(连载1)
- 无题
- 学习JavaScript 的必备
- Euler Project Problem 6
- C语言打印“杨辉三角”
- 高效率的全组合算法
- ORACLE SQL性能优化系列(一)
- JAVA 面向对象??
- DHC log 2009-2-24