ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:230.42KB ,
资源ID:3290757      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3290757.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于声表面波技术的煤矿安全智能监控节点设计与实现第5章.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于声表面波技术的煤矿安全智能监控节点设计与实现第5章.docx

1、基于声表面波技术的煤矿安全智能监控节点设计与实现第5章第五章 煤矿安全智能监控节点软件设计煤矿安全智能监控节点软件设计包括嵌入式Linux系统移植、CAN总线驱动设计、485驱动驱动程序设计、嵌入式数据库设计、GUI界面显示设计。5.1嵌入式Linux系统的移植煤矿安全智能监控节点的核心控制芯片是S3C2440A,所以嵌入式Linux系统的移植是基于S3C2440A的移植。嵌入式Linux系统的移植包括BootLoader移植、Linux内核移植和文件系统的制作。5.1.1 交叉编译环境的建立交叉编译环境就是代码在宿主机上编写和编译,却能在目标板上能运行的环境。本文的宿主机操作系统为Red H

2、at Enterprise Linux 5,交叉编译器的版本采用arm-linux-gcc-4.3.2。从网上下载arm-linux-gcc.4.3.2.tgz到 Linux系统下,解压arm-linux-gcc.4.3.2.tgz,把arm-linux-gcc安装到/usr/local/arm/4.3.2目录即可。tar xzvf arm-linux-gcc-4.3.2 C /export PATH=/usr/local/arm/4.3.2/bin:$PATH5.1.2 BootLoader的移植BootLoader类似于PC机中的BIOS程序,它是在嵌入式系统上电后运行的第一段小程序。通过

3、这段小程序,可以初始化硬件设备、建立内存空间映射图,将系统的软硬件环境带到一个合适的状态,最终为启动操作系统内核准备好正确的环境30。目前,常用于ARM处理器的BootLoader有三种:u-boot、ARMboot、 RedBoot,u-boot由于其具有灵活性高、技术成熟、功能齐全等优点被广泛应用。 所以本文采用u-boot,版本为u-boot-2010-03。u-boot的移植步骤如下:下载解压u-boot源码包。本文采用u-boot-2010-03版本,可以到u-boot官方网站去下载名为u-boot-20-10-03.tar.bz2的u-boot源码包,解压u-boot源码包。添加u

4、-boot对S3C2440A的支持。进入u-boot根目录,在u-boot根目录下的 Makefile中添加:smdk2440_config : unconfig $(MKCONFIG) $(:_config=) arm arm920t smdk2440 NULL s3c24x0其中arm表示CPU的架构(ARCH),arm920t表示CPU的类型,smdk2440表示S3C2440A的目录,NULL表示开发商,s3c24x0表示CPU型号。修改定义交叉编译工具链。CROSS_COMPILE = arm-linux拷贝S3C2440A相关文件。由于S3C2410和S3C2440A的接口资源和寄

5、存器相似,所以在S3C2410定义的基础上修改S3C2440A。进入u-boot-2010-03/board目录新建2440目录再将samsung/smdk2410目录复制到2440目录下,将2440目录下的smdk2410重命名为smdk2440,其目录下的smdk2410.c重命名为smdk24-40.c,目录下将include/configs中的smdk2410.h复制为smdk2440.h。修改系统时钟,设置CPU频率(FCLK)。S3C2440A采用12MHz的晶振,但S3C2440A可以通过时钟控制逻辑的PLL使工作频率达400MHz。S3C2440A有两个MPLL:MPLL和UP

6、LL,MPLL用于设置FCLK、HCLK、PCLK,UPLL专用于USB设备。本文设置FCLK设为400MHz,分频比为FCLK:HCLK:PCLK=1:4:8,UCLK为48MHz。#define M_MDIV 0x7f #define M_PDIV 0x2#define M_SDIV 0x1#define U_M_MDIV 0x38#define U_M_PDIV 0x2#define U_M_SDIV 0x2修改u-boot,使u-boot支持从Nand Flash启动。将nand_read.c文件拷贝入 board/2440目录下,同时在Makefile文件添加对nand_read.c

7、的编译。OBJS:=2440.o nand_read.o flash.o添加DM9000网卡配置。在include/configs/2440.h下添加如下代码:#define CONFIG_DRIVER_DM9000 1#define CONFIG_DM9000_BASE 0x20000000#define DM9000_IO CONFIG_DM9000_BASE#define DM9000_DATA (CONFIG_DM9000_BASE + 4)#define CONFIG_DM9000_USE_16BIT添加完uboot对2440的支持后返回uboot的顶层目录,从新编译u-boot,在

8、 uboot顶层目录下生成u-boot.bin文件,然后通过USB(Universal Serial Bus,通用串行总线)下载u-boot.bin存储于Nand Flash中。 5.1.3 Linux内核移植Linux内核是Linux系统的核心部件,它为内存、外围设备、系统进程、设备驱动、文件和网络系统等设备正常工作和运行提供保证。嵌入式设备的资源有限,在进行Linux内核移植时,根据需要对Linux内核进行裁剪和配置,使系统体积更小,运行更高效。本文采用的Linux内核为Linux-2.6.32,Linux内核定制的步骤大致如下:解压Linux内核源码包。从www.kernel.org上下

9、载Linux2.6.32.2内核版本,并将Linux2.6.32.2解压到Linux目录下。rootlocalhost linux# tar xzf linux-2.6.32.tar.gz rootlocalhost linux# lslinux-2.6.32 linux-2.6.32.tar.gz指定交叉编译变量。修改linux-2.6.32目录下的Makefile文件,指定目标代码平台和交叉编译器。export KBUILD_BUILDHOST := $(SUBARCH)ARCH?= armCROSS_COMPILE ?= arm-linux-内核配置。使用make menuconfig命

10、令进入配置菜单界面,在配置菜单中对内核中的处理器、驱动、文件系统等进行选择,如图5.1所示。图5. 1 Linux内核配置界面图在linux-2.6.32目录下输入make zImage命令进行内核编译,编译完成后会在在linux-2.6.32目录下的“arch/arm/boot”目录中生成了所需的内核文件zImage。由于u-boot在用bootm命令引导内核的时候,bootm需要读取一个64字节的文件头,来获取内核映象所针对的CPU体系结构、OS、加载到内存中的位置、在内存中入口点的位置以及映像名等信息,mkimage就是一个用于添加头文件的专用工作,制作头文件的命令如下:mkimage

11、n CY A arm O linux T kernel C none a 0x30008000 e 0x30008040 d zImage zImage.img把mkimage生成的zImage.img文件下载到Nand Flash中。5.1.4文件系统制作根文件系统是对Linux系统存储设备中的数据进行组织和管理,根文件系统的存在使Linux系统与用户之间的操作变得简单方便,Linux内核开始运行时最先挂载的文件系统即为根文件系统。Linux系统以树状结构管理目录、文件,其他分区挂接在某个目录上,然后就可以通过这个目录来访问分区上的文件。如图5.2所示,根文件系统挂载在根目录上,根目录就有根

12、文件系统的目录和文件,如/bin、/etc、/usr等。图5. 2 根文件系统目录结构图构建根文件系统的步骤如下:创建系统目录;编译并安装内核模块;建立动态链接库;交叉编译Busybox;创建etc目录下的配置文件;制作根文件系统。将根文件系统的镜像文件下载到Nand Flash中。Qt/Embedded和SQLite的移植相对简单,限于篇幅本文就不再叙述。5.2 CAN总线驱动程序设计实现CAN总线模块由两部分构成:CAN总线控制器和CAN总线收发器。CAN总线收发器主要工作在CAN总线物理层,发送时CAN总线收发器把CAN总线控制器的逻辑信号转换成能在CAN总线物理线路上传输的差分信号,接

13、收时CAN总线收发器把在CAN总线物理线路上传输的差分信号转换成CAN总线控制器能够识别的逻辑信号。CAN总线控制器工作在CAN总线数据链路层,是整个CAN总线模块的核心,CAN总线控制器主要工作有:帧的封装、帧的拆分、帧错误检测等。CAN总线模块驱动的实现主要是CAN总线控制器驱动的实现。5.2.1 CAN总线数据格式CAN总线中使用数据帧进行数据传输,数据帧又分为标准帧和扩展帧。标准帧和扩展帧的主要区别在于仲裁区域的ID码长度的不同,标准帧的ID码为11位,扩展帧的ID码为29位31。为尽量提高CAN总线数据传输的利用率,使ID码也携带帧信息,本文数据传送选择ID码为29位的扩展帧,扩展帧

14、的结构如图5.3所示。图5. 3 扩展帧结构图CAN总线是通过报文标示符来判断该节点是否为目标节点,即通过CAN控制器的报文验收滤波器和报文屏蔽寄存器对比帧ID来判断是否需要接收该帧。而CAN总线的帧ID可以自己定义,本文定义的帧ID如表5.1所示,ID.28ID27表示帧的类型;ID.26ID.19表示目标节点的地址;ID.18ID.11表示源节点的地址;ID.10ID.7表示功能码;ID.6ID.5表示帧组码,ID.4ID.0表示帧码。表5. 1 CAN总线帧ID定义格式字段长度描述ID.28ID.272bit帧类型,01表示此帧为命令帧,10表示此帧为数据帧。ID.26ID.198bit

15、接收CAN报文节点的地址。ID.18ID.118bit发送CAN报文节点的地址。ID.10ID.74bit表示此帧的用途。ID.6ID.52bit帧组码,00表示本帧数据没有分段;01表示本帧为数据的第一个分组;10表示本该帧位于数据的中间断,其位于那一段由分组数决定;11表示本帧为数据的最后一分组。ID.4ID.07bit分组数,若帧组码为10,表示本帧在数据中的位置,否则保留。在MCP2515驱动程序中CAN总线报文格式定义代码如下所示。typedef struct mcpcan_dataunsigned char FraType;unsigned char SrcId;unsigned

16、char DesId; unsigned char FunCode;unsigned char FraCode;unsigned char FraValue;unsigned int DataLen;long int Data8; mcpcan_data;其中FraType表示帧的类型、SrcId表示帧的发送地址、DesId表示帧的目的地址、FraCode表示帧组码、FraValue表示分组数、DataLen表示帧的数据长度、D-ata8表示帧传送的数据字节。本文中SAW标签是32位的,其温度测量范围为-40800,湿度测量范围为2070%,甲烷浓度测量范围为075%,人员距离测量范围020m

17、。本文中温度信息需要2byte,湿度2byte,甲烷浓度2byte,人员距离2byte。其CAN总线数据帧中数据段数据格式定义如表5.2所示。表5. 2 CAN总线数据帧中数据段数据格式定义数据类型ID号数据值读卡器号1byte4byte2byte1byte数据类型:表示数据值的类型,其中0x01表示温度,0x02表示湿度,0x03表示甲烷浓度,0x04表示人员距离。ID号:表示上传数据的SAW标签的ID号。数据值:表示SAW标签上传的参数信息。读卡器号:表示上传数据的读卡器编号。5.2.2 SPI驱动程序设计本文选用的CAN控制器是MCP2515,S3C2440A和MCP2515之间通过SP

18、I接口进行通信,所以在介绍MCP2515之前,首先介绍SPI驱动程序的设计。S3C2440A提供两路的SPI接口:SPI0和SPI1。由于S3C2440A自带SPI接口,这简化了SPI驱动程序。SPI驱动程序的配置步骤为:设置端口映射,通过Linux内核提供的ioremap()函数对SPI寄存器的地址进行映射;对SPI的各端口寄存器进行初始化,设置S3C2440A对应的I/O口为SPI模式;通过SPPREn寄存器配置SPI的传输速率;通过SPCON来配置合理的SPI接口模式,本文SPI配置为SPI接口为主设备,数据的读写为查询模式。写数据0XFF到SPTDAT-n寄存器10次;进行数据发送时,

19、检测数据传输标志位(REDY)是否为“1”,若数据传输标志位为“1”,则写数据到SPTDATn,否则返回错误。接收数据时,检测数据传输标志位 (REDY)是否为“1”,若数据传输标志位为“1”,从SPRDATn读取数据,否则返回。SPI驱动程序读函数和写函数代码如下所示。/SPI SendBOOL SPI_SendByte(BYTE bData, BYTE* pData)if(SPI_WaitTxRxReady()=FALSE) return FALSE;*(unsigned char *)rSPTDAT1 = bData;if(SPI_WaitTxRxReady()=FALSE) retur

20、n FALSE;*pData = *(unsigned char *)rSPRDAT1;return TRUE;/SPI ReadBOOL SPI_ReadByte(BYTE *pData)BOOL bRet = TRUE; if(SPI_WaitTxRxReady()=FALSE) return FALSE;*pData = *(unsigned char *)rSPRDAT1;return bRet;5.2.3MCP2515驱动程序MCP2515与S3C2440A采用SPI进行通信。MCP2515提供的SPI命令有复位指令、读指令、读RX缓冲指令、写指令、装载TX缓冲指令、请求发送(RTS

21、)指令、读状态指令、RX状态指令、位修改指令。限于篇幅,本文仅对读指令、写指令、位修改指令进行介绍。MCP2515的读指令时序图如图5.4所示,将SPI片选()引脚设置为低电平来启动读指令;向MCP2515的数据输入引脚(SI)输入读指令(0x03);接着向MCP2515的数据输入引脚(SI)输入读取数据的地址,地址格式为高位在前低位在后;MCP2515的数据输出引脚(SO)输出指定地址的数据,数据格式为高位在前地位在后;MCP2515将SPI片选()引脚设置为高电平结束读指令。图5. 4 MCP2515读时序图 MCP2515读命令代码如下所示:ret = MCP2515_SPI_Send(

22、SPI_READ, &data);ret = MCP2515_SPI_Send(addr, &data);ret = MCP2515_SPI_Send(0xff, &data);ret = MCP2515_SPI_Read(&data);MCP2515的写指令时序图如图5.5所示,将SPI片选()引脚设置为低电平来启动写指令;向MCP2515的数据输入引脚(SI)输入写指令(0x02);接着向MCP2515的数据输入引脚(SI)输入写入数据的地址,地址格式为高位在前低位在后;MCP2515的数据输入引脚(SI)往指定的地址写入数据,数据格式为高位在前地位在后;MCP2515将SPI片选()引脚

23、设置为高电平来结束写指令。图5. 5 MCP2515写时序图MCP2515写命令代码如下所示。ret = MCP2515_SPI_Send(SPI_WRITE, &data);ret = MCP2515_SPI_Send(addr, &data);ret = MCP2515_SPI_Send(arg1, &data);位修改指令可以对特定状态和控制寄存器中单独的位进行置“1”或者清零。MCP2515位修改指令时序图如图5.6所示,将SPI片选()引脚设置为低电平来启动位修改指令;向MCP2515的数据输入引脚(SI)输入位修改指令(0x05);向MCP2515的数据输入引脚(SI)输入修改的寄

24、存器地址,地址为高位在前低位在后;接着向MCP2515的数据输入引脚(SI)输入屏蔽字节,屏蔽字节确定允许修改寄存器中的哪一位,屏蔽字节中的“1”表示允许对寄存器中的相应位进行修改,“0”则禁止修改;然后向MCP2515的数据输入引脚(SI)输入数据字节,数据字节确定寄存器修改的最终结果,如果屏蔽字节相应位允许修改,数据字节中的“1”表示将寄存器相应位置“1”,“0”表示将相应位清零;MCP2515将SPI片选()引脚设置为高电平来结束位修改指令。位修改指令表示图如图5.7所示。图5. 6 MCP2515位修改指令时序图图5. 7 MCP2515位修改指令表示图MCP2515位修改指令代码如下

25、所示。ret = MCP2515_SPI_Send(SPI_BITMOD, &data);ret = MCP2515_SPI_Send(addr, &data);ret = MCP2515_SPI_Send(arg1, &data);ret = MCP2515_SPI_Send(arg2, &data);MCP2515的驱动程序的大体框架为:申请MCP251驱动程序设备号;设备驱动程序的初始化如分配内存、初始化工作队列等;填充file_operations结构体;编写file_operations结构体中相关函数代码;释放设备号及相关内存。file_operations结构体包括的函数如下所示

26、。struct file_operations MCP2515_ops = .open = MCP2515 _open,.read = MCP2515 _read,.write = MCP2515 _write,.ioctl = MCP251_ioctl,;其中MCP2515_open函数主要完成中断函数的相关初始化,MCP2515的初始化等;MCP2515_release函数主要完成设备驱动的释放;MCP2515_read函数主要完成MCP2515数据的读取并传递给应用程序;MCP2515_write函数主要是发送从应用程序传递过来的数据。MCP2515的初始化过程为通过复位命令复位MCP2

27、515;通过位修改命令改变CAN控制寄存器(CANCTRL)的值设置MCP2515为配置模式;通过位修改命令设置MCP2515相应的寄存器,如发送缓冲器控制寄存器(TXBnCTRL)、接收缓冲器控制寄存器(RXBnCTRL)、中断使能寄存器(CANINTE)、中断标志寄存器(CANINTF)、验收滤波寄存器(RXFn)等;通过位修改命令改变CAN控制寄存器(CANCTRL)的值设置MCP2515为正常模式;其初始化过程图如图5.8所示。图5. 8 MCP2515初始化过程MCP2515的报文发送过程为判断发送缓冲器中是否为空,若发送缓冲器不为空则等待;将CAN总线报文的仲裁段的帧ID写入发送缓

28、冲标识符寄存器(TXBn-SIDH、TXBnSIDL、TXBnEID8、TXBnEID0);将需要发送的数据长度写入发送缓冲器数据长度码寄存器(TXBnDLC);将此帧报文需要发送的数据写入发送缓冲器数据寄存器;判断CAN总线是否空闲,空闲则启动发送,否则等待CAN总线空闲;判断报文是否发生成功,成功则结束,否则从新发送。MCP2515的报文发送流程如图5.9所示。图5. 9 MCP2515报文发送流程图MCP2515的报文接收采用的中断的方式,当检测CAN总线上有帧起始时,把该帧报文载入报文集成缓冲器;判断该帧是否符合滤波器条件,若符合则载入报文缓冲器,否则丢弃该帧,当报文装入报文缓冲器后,

29、MCP2515的引脚会产生中断,通知MCU有报文需要接收;读取报文接收缓冲器标识符寄存器中的值,即该帧报文的帧ID;读取该帧报文的数据长度;读取该帧报文传输的数据;清除中断标志;结束接收。MCP2515的报文接收流程如下图5.10所示。图5. 10 MCP2515的报文接收流程图5.3 485总线模块驱动程序设计实现5.3.1 485总线数据通信格式由上一节CAN总线驱动程序设计可知,SAW标签采集的数据是多字节的,而UART通信一次最多只能传输8bit数据,所以在485驱动程序设计前,需要对数据信息的帧格式进行设计。本文中485总线数据的帧格式采用MODBUS协议的RTU(Remote Te

30、rminal Unit,远程终端设备)格式,RTU帧格式结构如表5.3所示,RTU帧格式中数据的起始和结束通过时间来判断,若3.5个字符时间内没有接收到数据则表示本帧数据结束,同时认为下一个字符为下帧数据的开始。表5. 3 RTU帧格式地址码功能码数据区CRC校验1byte1byteNbyte2byte地址码:485总线采用的是主机询问,从机应答的半双工通信方式,RTU帧格式中,地址用于表示从机地址,不同的从机地址不同。只有当通信报文中地址与从机地址相匹配时,从机才应答主机的请求。主机能够对从机的地址进行设置。功能码:功能码表示本次通信,从机应该执行什么操作。功能码能表示的范围为1127,本文

31、只选用了其中的部分功能码,如表5.4所示。主机发送的命令帧和从机应答的数据帧中的功能码是相同的,命令帧中的功能码表示要执行的操作,数据帧中的功能码表示从机根据主机发送的命令帧做出的响应。表5. 4 功能码信息表功能码读/写功能功能01读读取一个或多个读卡器的工作状态04读读取读卡器的数据信息06写更改读卡器地址码15写向一个或多个对卡其写入控制命令,控制器工作状态数据区:数据区是主机发送给从机的数据或从机响应主机的数据,数据区随功能码的不同而不同。如“04”功能码表示主机要求读取读卡器的数据信息,从机响应后返回读卡器采集的数据。对于不同的功能码,数据区的大小可以不相同。CRC校验:CRC校验用于判断接收的信息是否正确。本文采用16位循环冗余校验码完成数据的校验,发送方发送16位的循环冗余校验码,接收方对接收到的校验码进行验证,若与发送方发送的校验码是一致的,则数据传输是正确的。5.3.2 MAX485驱动程序本文中485总线采用的电平转换芯片为MAX485,MAX485与S3C2440A之间通信采用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1