APP下载

基于ARM和Linux的肺音采集器的研究

2011-01-26李文锋张西学李俊民刘龙清

中国医疗器械杂志 2011年4期
关键词:存储器采集器内核

【作 者】陆 强,李文锋,张西学,李俊民, 刘龙清

泰山医学院信息工程学院,山东,泰安,271016

肺音是呼吸系统在换气过程中产生的声音的总称,蕴含着呼吸系统的病理学、生理学信息。自发明听诊器后,肺音听诊一直是呼吸系统疾病诊断的基本方法。

如何实时有效地采集肺音,并进行显示与存储,是这种诊断方法实现的前提。针对这个问题,在分析当前国内外先进的肺音信号采集技术的基础上,开发了基于ARM和Linux的肺音采集器。

1 肺音采集器硬件部分

肺音采集器整体结构如图1所示。肺音采集模块的硬件以ARM的S3C2440芯片为核心,以驻极体话筒为声音信号传感器,音频芯片采用UDA1341TS。由于S3C2440和UDA1341TS都提供了IIS音频解码接口,在设计时将两者的IIS信号引脚直接连接。

1.1 系统控制模块

S3C2440微处理器是三星公司为手持设备而设计的一款处理器。它采用了发展的ARM920T内核,0.13μm的CMOS标准宏单元和存储单元。主要功能模块有电源管理模块、片上时钟发生器、RTC、IIS数字音频总线接口、4通道DMA、扩展内存控制器、3通道UART、USB模块、定时器模块和24路外部中断源。

1.2 音频接口模块

模数转换芯片为Philip公司推出的UDA1341TS。它采用了先进的Sigma-delta过采样技术,工作电压范围为2.4~3.6V。由于其功耗特别低,非常适合于MP3、MD播放器等低功耗场合的应用。UDAl341TS芯片除了提供模数转换功能外,还具有L3接口、IIS(Inter-IC Sound bus)接口和麦克风扬声器接口。

在音频信号采集系统中,L3接口分别连到S3C2440的3个通用数据输出引脚上。S3C2440通过向这个通用端口发送数据来对UDA1341TS进行初始化。图2所示为S3C2440与UDA1341TS连接图,图中CDCLK、I2SSCLK、I2SLRCK、I2SSDI、I2SSDO、L3MODE、LSCLOCK和L3DATA引脚连接到S3C2440。

1.3 Flash接口电路

Flash存储器是一种可在系统进行电擦写,掉电后信息不丢失的存储器。Flash存储器作为一种非易失性存储器,是用于装载系统的Bootloader程序、操作系统、数据和应用程序的核心。

本系统NANDFlash芯片K9F1216,是SAMSUNG公司生产的采用NAND技术的大容量、高可靠的Flash存储器。该器件采用三星公司的CMOS浮置门技术和与非存储结构,工作电压2.7-3.6V,存储容量为32MX16位。图3所示为S3C2440与Flash连接图。

图2 S3C2440与UDA1341TS连接图Fig 2. Connection Between S3C2440 and UDA1341TS

图3 S3C2440与Flash连接图Fig 3. Connection Between S3C2440 and Flash

2 肺音采集器软件部分

系统的软件设计首先需要搭建软件平台,即Bootloader、Linux内核、文件系统配置;然后进行驱动程序的设计与加载;最后根据具体需要设计应用软件,完成所要求的功能。

2.1 交叉编译环境

交叉编译是在一个平台上生成另一个平台上的可执行代码。交叉编译环境是一个由编译器、链接器等组成的综合开发环境。Linux环境下使用GNU工具完成编译、链接等过程,包括针对目标系统的编译器gcc、针对目标系统的标准c库glibc、针对目标系统的二进制工具binutils和针对目标系统的Linux内核头文件等。

在本系统中使用的是cross-3.3.2交叉编译器工具链。在Linux下解压后即生成编译所需的工具,然后在环境变量PATH中添加路径。

2.2 BootLoader的加载

BootLoader是在操作系统内核运行之前的一段程序,相当于PC上的BIOS。通过BootLoader,可以完成对硬件的初始化,包括初始化CPU、堆栈和存储器等;把内核从NANDFlash复制到SDRAM,然后启动;下载映像文件并写入Flash等。

本系统的BootLoader采用U-Boot,首先要下载源码包u-boot-1.1.6,在Linux下解压后即得到全部U-Boot源程序。U-Boot源码通过GCC和Makefile组织编译。Makefile从功能上分成两部分,一部分用来编译生成uboot.bin文件,另一部分用来执行每种board相关的配置。编译流程为执行make smdk2440_config传入ARCH,CPU,BOARD,SOC参数,mkconfig根据参数将include头文件夹相应的头文件夹连接好,生成config.h。然后执行make分别调用各个子目录的Makefile生成所有的obj文件和obj库文件。最后连接所有目标文件,生成镜像文件。

2.3 Linux内核的移植

Linux内核是Linux操作系统的核心,也是整个Linux功能体现。它是用C语言编写,符合POSIX标准。本系统采用的内核为linux-2.6.30.4。其移植的具体步骤如下:

(1) 首先修改根目录下的Make fi le文件。在根目录下的Makefile文件中,首先要指定所移植的硬件平台以及所使用的交叉编译器。

(2) 使用“make menuconfig”菜单方式,来配置内核。配置时尽量剪裁内核,需要注意CPU的型号、串口的设置和肺音系统各个模块的设置。

(3) 配置好后保存退出,执行指令:make zImage。交叉编译得到内核映像名为zImage的文件,然后将其下载到目标板上运行。

2.4 文件系统的移植

文件系统指文件存在的物理空间。在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构。主要内容包括应用程序,对应目录为/bin,/sbin,/usr/bin,/usr/sbin;设备文件,对应目录为/dev;脚本和配置文件,对应目录为/etc;库文件,对应目录为/lib,/usr/lib,/usr/share。常见文件有cramfs,romfs,jffs和yaffs。本系统采用yaffs文件系统。其具体步骤为:

(1) 下载busybox,通过make menucon fi g修改并配置busybox;

(2) 执行指令make install;

(3) 新建目录root_2.6.30.4,把busybox下的bin、sbin、usr和linuxrc拷入新建目录下,建立dev、etc、home、lib、opt和proc等文件目录,并配置内容;

(4) 制作映像文件,烧写到主板中运行。

2.5 驱动程序设计

这里重点介绍一下UDA1341驱动程序。在Linux系统中,有两类音频设备驱动框架;即OSS和ALSA。前者包括dsp和mixer字符设备接口,在用户空间的编程中,完全使用文件操作;后者以card和组件为主线,在用户的编程空间中使用alsalib。本系统选用OSS框架。

在本系统中,驱动程序的主要任务是控制音频数据在硬件中流动,并为音频应用程序提供标准接口,系统包括设备的注册和卸载模块、声音的录制和播放和mixer混音器设备接口模块。

2.5.1 设备的注册和卸载模块

本模块包括对与L3接口相连的I/O口和与IIS接口相连的GPIO口的设置,对UDA1341的初始化,对DMA通道的选择和初始化,并且通过register_sound_dsp()和register_sound_mixer()函数注册音频设备和混音器设备。

2.5.2 声音的录制和播放模块

声音的录制和播放主要通过dsp设备接口函数实现,向该设备写数据,就是播放声音,向该设备读数据,就是录制声音。对设备的打开、读写和控制函数在 fi le_operations结构中进行了定义,结构体如下:

对设备的打开、读写、控制和关闭函数分别对应open()、read()、write()、ioctl()和release()函数。2.5.3 混音器设备接口模块

mixer混音器的功能是将多个信号组合或者叠加在一起。混音器的操作不符合读写模式,因为大部分操作是通过ioctl()系统调用,来实现诸音量的调节、高低音的控制、FM合成器的控制和放音音量的控制。函数原形为static int sound_mixer_ioctl

2.6 应用程序设计

本系统应用程序主要实现肺音信号的采集、存储和播放功能。程序流程图如图4所示。

图4 程序流程图Fig 4. Flow chart of Program

3 实验

利用所构建的系统,进行了肺音的采集实验。采集时,要求环境安静,正常人采用坐姿势,将驻极体一端放在采集人身上,采集呼吸音信号。所采集到的肺音波形如图5所示。

利用该信号,可以得到肺音特征。通过算法,还可以很容易地得到肺音信号的时域和频域参数。

图5 肺音信号波形Fig 5. Waveform of Lung Sound

4 结束语

本研究利用ARM和Linux技术,成功实现了对肺音信号的采集,并可以将信号进行直观地显示。为医生提供了一种有效的诊断工具。

[1] 范爱华,卞春华,宁新宝, 等. 基于ARM的无线心电监测仪Flash存储器[J]. 中国医疗器械杂志, 2008, 32(6): 416-418.

[2] 牛海军, 万明习, 王素品. 不同种类肺音信号的双谱分析[J]. 仪器仪表学报, 2001, 22(5): 486-490.

[3] 吕萍, 闵一建, 钱铁群. 运动前后肺音信号的提取与频谱分析[J].陕西师范大学学报, 2005, 33(3): 62-64.

[4] 刘志芳, 阮建雯, 刘志彦. 基于ARM_Linux的嵌入式数控系统设计[J]. 机床与液压, 2009, 37(10): 188-190.

[5] 马毓昭, 柴新禹, 任秋实. 基于S3C2410的Q开关Nd_YAG激光器控制系统的研究与设计[J]. 中国医疗器械杂志, 2007, 31(6): 411-414.

[6] 赵仓明, 穆煜. 嵌入式Linux应用开发教程[M]. 北京: 人民邮电出版社, 2009

猜你喜欢

存储器采集器内核
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
静态随机存储器在轨自检算法
COVID-19大便标本采集器的设计及应用
活化非遗文化 承启设计内核
基于Cortex-M4的油气管道微功耗数据采集器软件设计应用
基于ZigBee的大型公共建筑能耗采集器设计
基于LabVIEW的多数据采集器自动监控软件设计与开发
SKEE—— 针对ARM架构的轻量级Linux内核安全执行环境
任意2~k点存储器结构傅里叶处理器