软件平台用RT-Thread
界面用RT-Thread GUI,需要在上面写radio的应用程序
wma软解码器,待完成
aozima 2010-03-23添加
wma解码:(非常紧急)
目前耗费资源太大,还用不起来.但这个问题不解决,在白名单下,这个东西只能成为一个摆设.
网络不稳定:(非常紧急)
目前RADIO的网络还不稳定,应该是软件上面的问题,具体原因还待查明.
此问题不彻底解决,继续进行下去的工作价值不大.
目录播放:
能够在文件浏览器中选择目录进行播放这个目录下所有的mp3文件。可以考虑,在文件浏览器中,当按下enter键时,弹出一个选择菜单,菜单项包括:
界面优化:
对初始主界面进行优化(取消渐变色?),能够比较好的进行电台播放状态的更新
在USB联机视图上添加图标;
显示电台名称及多电台列表.
及无法读取资源文件时自动联机并试图修复
https://club.rt-thread.org/ask/question/296&p=2929#p2929.html
还需要完成:
2010-01-01 从存储设备完成IAP功能,欢迎认领…. [降低紧急程度,先暂停]
aozima 2010-03-24添加:
下载附件 player.pdf
mp3软解占用资源比想象中的大很多,也比当时纯软解占用资源大很多(当时是50%左右)。
优化需要:
mp3 decoder数据放片内SRAM中,开辟了一块2560 2 2的memoy pool,helix mp3 decoder数据也放于片内SRAM。
-O3优化编译
经过这样做之后,decode的速度大于播放的速度,声音也连续流畅了(但破音存在,播放同一首mp3及此mp3转换而成的wav,在相同的地方存在破音)。
最关键的问题,目前播放是基于I2S中断方式的,每发送一个short就产生一次中断。试过DMA方式,但加入DMA后(DMA1_Channel5),却对SDIO的DMA2_Channel4造成影响,不解中。
调程序是这样的,有时候意想不到的顺利,有时候意想不到的难以捉摸。
对于这个mp3解码,我们的bottom line就是如果软解总是有若干个小问题牵涉较多精力的话,先上VS1053。这样既省掉这一块的问题,又给其他模块留出了足够的硬件资源。这样争取了时间,降低了难度。当然缺点就是增加了30元的成本,但这也给持续改进留下了机会(比如等软解成熟了,将其放在第二版上)。不知楼主意下如何。
另外,按照LZ定义的软件模块构架,我们是否可以将一些模块分给一些有能力并且乐意参与的网友,由楼主做总体协调并定义出模块接口,从而使这些模块能够并行进行? 按照ourdev上关于这个主题的访问量和回复量,我相信会有相当数量的资深网友愿意参与进来。这是我想到的一个建议。
谢谢楼上建议,本来是打算如果要启用硬解的话,那么这个项目还不如不做,所以软解非常关键。
重新试过了,代码不需要优化(-O0)软解也没什么问题。现在是SD卡用DMA方式,I2S也用DMA方式,能够正常播放,还需要解决破音的问题。
进行到这个地步,确实需要仔细的规划规划了,在软件上今天会把模块划分出来,以及如何对这个系统进行优化的方案也拿出来,优化过后,这个系统会是一个非常棒的系统!
软件的框架图
[attach]0[/attach]
(软件部分设计遵循从粗到细的方式进行层层分解,通过这个也能够看到一个系统,它完整的软件是如何设计出来的)
模块分为几个部分
基础组件部分:
RTOS Kernel:非RT-Thread莫属。RT-Thread做为一套完善、稳定的实时操作系统,对于这个应用完全能够适用。通过使用RT-Thread来作为网络收音机的操作系统,大家也能够了解、熟悉、甚至是精通如何使用RT-Thread编程,如何使用RT-Thread来构建商业产品的基础平台。
文件系统:使用RT-Thread内置的DFS虚拟文件系统,目前这个DFS虚拟文件系统包装的是EFSL,以后根据情况可能会换一换,但对上层应用是感觉不到下面文件系统已经被替换(换成另一FAT文件系统实现或另一非FAT文件系统,上层都感觉不到),以后的版本应该会支持Nand Flash。
TCP/IP协议栈:LwIP轻型TCP/IP协议栈,目前和RT-Thread的整合已经非常完善了,对应用层提供了标准的socket接口,并且LwIP自身支持多种协议,例如ICMP, IGMP, DHCP, ppp等。
图形用户界面:RTGUI,这个还没怎么露面,参与这个项目的应该会提前见到它的身影。这个项目应该只会使用到它的基本功能(网络收音机项目包含一个320x240的TFT屏,5向导航键,无触摸屏,主要采用键盘操作)。
USB Mass Storage:U盘,采用STM32 USB固件库来实现一个完整的U盘,使得能够直接从电脑上操作播放器上的文件。在通过U盘操作文件时,系统自动停止播放,关闭打开的文件,不再操作文件,直到断开USB连接。
网络播放应用部分:
UI: Information Workbench,用于显示系统的一些信息,例如USB连接状态,电池状态,当前日期、时间等。
UI: Player Workbench,用于显示播放器界面。界面不会做得太过复杂,毕竟软解已经耗费了很多资源,想做视频动画效果估计芯片的能力已经跟不上了。需要包括:播放视图;网络电台列表更新视图;收藏列表视图;当前播放列表视图;
UI: Home Workbench,这个实际上是RTGUI的应用管理器,用于启动其他的应用,当前活动应用的列表等,一个workbench等于一个应用。
player模块,播放控制的核心模块。用于控制播放何种格式,何种来源。还有就是通常意义的控制操作,前进、后退、暂停、停止等。
mp3 codec模块,也就是mp3软解库,ID3TAG是需要的。
wav模块,提供wav音频格式的信息解析,及提供音频数据。
wma模块,wma软解库,必须是针对ARM定点优化过的解码库算法。。
netstream模块,网络音频流模块,它会包含几个子模块:http流,rtsp流等。
为了管理STM32F103ZE宝贵的片内SRAM资源,还需要一个sram buffer管理模块,形成一个类似cache的模块,部分的缓冲将直接从它上面分配出来。
设备驱动部分:
codec驱动,wm8753驱动,向上层应用提供设备名为snd的抽象设备接口。
keyboard驱动,五向导航键驱动,只用于RTGUI中。
LCD驱动,FSMC接口的LCD驱动,只用于RTGUI中。
网卡驱动,DM9000驱动
STM32的电源管理,会把RT-Thread设备管理模块的电源管理部分实现了。
http://upload.wikimedia.org/wikipedia/commons/0/01/Mp3filestructure.svg,好像要FireFox才能打开svg的图形格式文件
Bernard, 很高兴看到软件方面的进展!
关于硬件方面不知道是否已开始。如果需要画线路图,请把与软件相关的pin脚定义列一下:-
— STM32F103ZET6与SRAM,NANDFLASH的连接(参照某个开发板schematic?)。
— SD card 连接 SDIO, SDcard detect用哪个GPIO?
— DM9000A 使用8 bit还是16bit方式? 它的控制端引脚用哪些GPIOs?
— TFT LCD的型号是否确定为34元的那个? 控制端引脚用哪些GPIOs合适?
— WM8753与STM32F103ZET6的I2S如何连接的?同样控制端引脚用哪些GPIOs合适?
— Buttons 用哪些GPIOs?
— 电源管理用哪个AD口和GPIO控制口?
— 是否要将MCU的pin都引出(2.54mm距)以兼容一个开发板的功能?
其实,最好的方式就是你是用的哪块开发板来调的软件模块,我们的线路图就按照那块开发板来走。这样确定软硬件接口会简单些。
Bernard, 我来画图吧。请将相关硬件接口细节传给我。 wanghar@163.com
sch大概3-4天。PCB大概4-5天。 我用PADS2005 SP3。