基于声表面波技术的煤矿安全智能监控节点设计与实现第5章Word格式文档下载.docx
- 文档编号:16196294
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:19
- 大小:230.42KB
基于声表面波技术的煤矿安全智能监控节点设计与实现第5章Word格式文档下载.docx
《基于声表面波技术的煤矿安全智能监控节点设计与实现第5章Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于声表面波技术的煤矿安全智能监控节点设计与实现第5章Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
由于S3C2410和S3C2440A的接口资源和寄存器相似,所以在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和UPLL,MPLL用于设置FCLK、HCLK、PCLK,UPLL专用于USB设备。
本文设置FCLK设为400MHz,分频比为FCLK:
HCLK:
PCLK=1:
4:
8,UCLK为48MHz。
#defineM_MDIV0x7f
#defineM_PDIV0x2
#defineM_SDIV0x1
#defineU_M_MDIV0x38
#defineU_M_PDIV0x2
#defineU_M_SDIV0x2
修改u-boot,使u-boot支持从NandFlash启动。
将nand_read.c文件拷贝入board/2440目录下,同时在Makefile文件添加对nand_read.c的编译。
OBJS:
=2440.onand_read.oflash.o
添加DM9000网卡配置。
在include/configs/2440.h下添加如下代码:
#defineCONFIG_DRIVER_DM90001
#defineCONFIG_DM9000_BASE0x20000000
#defineDM9000_IOCONFIG_DM9000_BASE
#defineDM9000_DATA(CONFIG_DM9000_BASE+4)
#defineCONFIG_DM9000_USE_16BIT
添加完uboot对2440的支持后返回uboot的顶层目录,从新编译u-boot,在uboot顶层目录下生成u-boot.bin文件,然后通过USB(UniversalSerialBus,通用串行总线)下载u-boot.bin存储于NandFlash中。
5.1.3Linux内核移植
Linux内核是Linux系统的核心部件,它为内存、外围设备、系统进程、设备驱动、文件和网络系统等设备正常工作和运行提供保证。
嵌入式设备的资源有限,在进行Linux内核移植时,根据需要对Linux内核进行裁剪和配置,使系统体积更小,运行更高效。
本文采用的Linux内核为Linux-2.6.32,Linux内核定制的步骤大致如下:
解压Linux内核源码包。
从www.kernel.org上下载Linux2.6.32.2内核版本,并将Linux2.6.32.2解压到Linux目录下。
[root@localhostlinux]#tarxzflinux-2.6.32.tar.gz
[root@localhostlinux]#ls
linux-2.6.32linux-2.6.32.tar.gz
指定交叉编译变量。
修改linux-2.6.32目录下的Makefile文件,指定目标代码平台和交叉编译器。
exportKBUILD_BUILDHOST:
=$(SUBARCH)
ARCH
?
=arm
CROSS_COMPILE?
=arm-linux-
内核配置。
使用makemenuconfig命令进入配置菜单界面,在配置菜单中对内核中的处理器、驱动、文件系统等进行选择,如图5.1所示。
图5.1Linux内核配置界面图
在linux-2.6.32目录下输入makezImage命令进行内核编译,编译完成后会在在linux-2.6.32目录下的“arch/arm/boot”目录中生成了所需的内核文件zImage。
由于u-boot在用bootm命令引导内核的时候,bootm需要读取一个64字节的文件头,来获取内核映象所针对的CPU体系结构、OS、加载到内存中的位置、在内存中入口点的位置以及映像名等信息,mkimage就是一个用于添加头文件的专用工作,制作头文件的命令如下:
mkimage–n‘CY’–Aarm–Olinux–Tkernel–Cnone–a0x30008000–e0x30008040–dzImagezImage.img
把mkimage生成的zImage.img文件下载到NandFlash中。
5.1.4文件系统制作
根文件系统是对Linux系统存储设备中的数据进行组织和管理,根文件系统的存在使Linux系统与用户之间的操作变得简单方便,Linux内核开始运行时最先挂载的文件系统即为根文件系统。
Linux系统以树状结构管理目录、文件,其他分区挂接在某个目录上,然后就可以通过这个目录来访问分区上的文件。
如图5.2所示,根文件系统挂载在根目录上,根目录就有根文件系统的目录和文件,如/bin、/etc、/usr等。
图5.2根文件系统目录结构图
构建根文件系统的步骤如下:
创建系统目录;
编译并安装内核模块;
建立动态链接库;
交叉编译Busybox;
创建etc目录下的配置文件;
制作根文件系统。
将根文件系统的镜像文件下载到NandFlash中。
Qt/Embedded和SQLite的移植相对简单,限于篇幅本文就不再叙述。
5.2CAN总线驱动程序设计实现
CAN总线模块由两部分构成:
CAN总线控制器和CAN总线收发器。
CAN总线收发器主要工作在CAN总线物理层,发送时CAN总线收发器把CAN总线控制器的逻辑信号转换成能在CAN总线物理线路上传输的差分信号,接收时CAN总线收发器把在CAN总线物理线路上传输的差分信号转换成CAN总线控制器能够识别的逻辑信号。
CAN总线控制器工作在CAN总线数据链路层,是整个CAN总线模块的核心,CAN总线控制器主要工作有:
帧的封装、帧的拆分、帧错误检测等。
CAN总线模块驱动的实现主要是CAN总线控制器驱动的实现。
5.2.1CAN总线数据格式
CAN总线中使用数据帧进行数据传输,数据帧又分为标准帧和扩展帧。
标准帧和扩展帧的主要区别在于仲裁区域的ID码长度的不同,标准帧的ID码为11位,扩展帧的ID码为29位[31]。
为尽量提高CAN总线数据传输的利用率,使ID码也携带帧信息,本文数据传送选择ID码为29位的扩展帧,扩展帧的结构如图5.3所示。
图5.3扩展帧结构图
CAN总线是通过报文标示符来判断该节点是否为目标节点,即通过CAN控制器的报文验收滤波器和报文屏蔽寄存器对比帧ID来判断是否需要接收该帧。
而CAN总线的帧ID可以自己定义,本文定义的帧ID如表5.1所示,ID.28~ID27表示帧的类型;
ID.26~ID.19表示目标节点的地址;
ID.18~ID.11表示源节点的地址;
ID.10~ID.7表示功能码;
ID.6~ID.5表示帧组码,ID.4~ID.0表示帧码。
表5.1CAN总线帧ID定义格式
字段
长度
描述
ID.28~ID.27
2bit
帧类型,01表示此帧为命令帧,10表示此帧为数据帧。
ID.26~ID.19
8bit
接收CAN报文节点的地址。
ID.18~ID.11
发送CAN报文节点的地址。
ID.10~ID.7
4bit
表示此帧的用途。
ID.6~ID.5
帧组码,00表示本帧数据没有分段;
01表示本帧为数据的第一个分组;
10表示本该帧位于数据的中间断,其位于那一段由分组数决定;
11表示本帧为数据的最后一分组。
ID.4~ID.0
7bit
分组数,若帧组码为10,表示本帧在数据中的位置,否则保留。
在MCP2515驱动程序中CAN总线报文格式定义代码如下所示。
typedefstructmcpcan_data{
unsignedcharFraType;
unsignedcharSrcId;
unsignedcharDesId;
unsignedcharFunCode;
unsignedcharFraCode;
unsignedcharFraValue;
unsignedintDataLen;
longintData[8];
}mcpcan_data;
其中FraType表示帧的类型、SrcId表示帧的发送地址、DesId表示帧的目的地址、FraCode表示帧组码、FraValue表示分组数、DataLen表示帧的数据长度、D-ata[8]表示帧传送的数据字节。
本文中SAW标签是32位的,其温度测量范围为-40~800℃,湿度测量范围为20~70%,甲烷浓度测量范围为0~75%,人员距离测量范围0~20m。
本文中温度信息需要2byte,湿度2byte,甲烷浓度2byte,人员距离2byte。
其CAN总线数据帧中数据段数据格式定义如表5.2所示。
表5.2CAN总线数据帧中数据段数据格式定义
数据类型
ID号
数据值
读卡器号
1byte
4byte
2byte
数据类型:
表示数据值的类型,其中0x01表示温度,0x02表示湿度,0x03表示甲烷浓度,0x04表示人员距离。
ID号:
表示上传数据的SAW标签的ID号。
数据值:
表示SAW标签上传的参数信息。
读卡器号:
表示上传数据的读卡器编号。
5.2.2SPI驱动程序设计
本文选用的CAN控制器是MCP2515,S3C2440A和MCP2515之间通过SPI接口进行通信,所以在介绍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次;
进行数据发送时,检测数据传输标志位(REDY)是否为“1”,若数据传输标志位为“1”,则写数据到SPTDATn,否则返回错误。
接收数据时,检测数据传输标志位(REDY)是否为“1”,若数据传输标志位为“1”,从SPRDATn读取数据,否则返回。
SPI驱动程序读函数和写函数代码如下所示。
//SPISend
BOOLSPI_SendByte(BYTEbData,BYTE*pData)
{
if(SPI_WaitTxRxReady()==FALSE)
returnFALSE;
*(unsignedchar*)rSPTDAT1=bData;
if(SPI_WaitTxRxReady()==FALSE)returnFALSE;
*pData=*(unsignedchar*)rSPRDAT1;
returnTRUE;
}
//SPIRead
BOOLSPI_ReadByte(BYTE*pData)
BOOLbRet=TRUE;
returnbRet;
5.2.3MCP2515驱动程序
MCP2515与S3C2440A采用SPI进行通信。
MCP2515提供的SPI命令有复位指令、读指令、读RX缓冲指令、写指令、装载TX缓冲指令、请求发送(RTS)指令、读状态指令、RX状态指令、位修改指令。
限于篇幅,本文仅对读指令、写指令、位修改指令进行介绍。
MCP2515的读指令时序图如图5.4所示,将SPI片选(
)引脚设置为低电平来启动读指令;
向MCP2515的数据输入引脚(SI)输入读指令(0x03);
接着向MCP2515的数据输入引脚(SI)输入读取数据的地址,地址格式为高位在前低位在后;
MCP2515的数据输出引脚(SO)输出指定地址的数据,数据格式为高位在前地位在后;
MCP2515将SPI片选(
)引脚设置为高电平结束读指令。
图5.4MCP2515读时序图
MCP2515读命令代码如下所示:
ret=MCP2515_SPI_Send(SPI_READ,&
data);
ret=MCP2515_SPI_Send(addr,&
ret=MCP2515_SPI_Send(0xff,&
ret=MCP2515_SPI_Read(&
MCP2515的写指令时序图如图5.5所示,将SPI片选(
)引脚设置为低电平来启动写指令;
向MCP2515的数据输入引脚(SI)输入写指令(0x02);
接着向MCP2515的数据输入引脚(SI)输入写入数据的地址,地址格式为高位在前低位在后;
MCP2515的数据输入引脚(SI)往指定的地址写入数据,数据格式为高位在前地位在后;
)引脚设置为高电平来结束写指令。
图5.5MCP2515写时序图
MCP2515写命令代码如下所示。
ret=MCP2515_SPI_Send(SPI_WRITE,&
ret=MCP2515_SPI_Send(arg1,&
位修改指令可以对特定状态和控制寄存器中单独的位进行置“1”或者清零。
MCP2515位修改指令时序图如图5.6所示,将SPI片选(
)引脚设置为低电平来启动位修改指令;
向MCP2515的数据输入引脚(SI)输入位修改指令(0x05);
向MCP2515的数据输入引脚(SI)输入修改的寄存器地址,地址为高位在前低位在后;
接着向MCP2515的数据输入引脚(SI)输入屏蔽字节,屏蔽字节确定允许修改寄存器中的哪一位,屏蔽字节中的“1”表示允许对寄存器中的相应位进行修改,“0”则禁止修改;
然后向MCP2515的数据输入引脚(SI)输入数据字节,数据字节确定寄存器修改的最终结果,如果屏蔽字节相应位允许修改,数据字节中的“1”表示将寄存器相应位置“1”,“0”表示将相应位清零;
)引脚设置为高电平来结束位修改指令。
位修改指令表示图如图5.7所示。
图5.6MCP2515位修改指令时序图
图5.7MCP2515位修改指令表示图
MCP2515位修改指令代码如下所示。
ret=MCP2515_SPI_Send(SPI_BITMOD,&
ret=MCP2515_SPI_Send(arg2,&
MCP2515的驱动程序的大体框架为:
申请MCP251驱动程序设备号;
设备驱动程序的初始化如分配内存、初始化工作队列等;
填充file_operations结构体;
编写file_operations结构体中相关函数代码;
释放设备号及相关内存。
file_operations结构体包括的函数如下所示。
structfile_operationsMCP2515_ops={
.open=MCP2515_open,
.read=MCP2515_read,
.write=MCP2515_write,
.ioctl=MCP251_ioctl,};
其中MCP2515_open函数主要完成中断函数的相关初始化,MCP2515的初始化等;
MCP2515_release函数主要完成设备驱动的释放;
MCP2515_read函数主要完成MCP2515数据的读取并传递给应用程序;
MCP2515_write函数主要是发送从应用程序传递过来的数据。
MCP2515的初始化过程为通过复位命令复位MCP2515;
通过位修改命令改变CAN控制寄存器(CANCTRL)的值设置MCP2515为配置模式;
通过位修改命令设置MCP2515相应的寄存器,如发送缓冲器控制寄存器(TXBnCTRL)、接收缓冲器控制寄存器(RXBnCTRL)、中断使能寄存器(CANINTE)、中断标志寄存器(CANINTF)、验收滤波寄存器(RXFn)等;
通过位修改命令改变CAN控制寄存器(CANCTRL)的值设置MCP2515为正常模式;
其初始化过程图如图5.8所示。
图5.8MCP2515初始化过程
MCP2515的报文发送过程为判断发送缓冲器中是否为空,若发送缓冲器不为空则等待;
将CAN总线报文的仲裁段的帧ID写入发送缓冲标识符寄存器(TXBn-SIDH、TXBnSIDL、TXBnEID8、TXBnEID0);
将需要发送的数据长度写入发送缓冲器数据长度码寄存器(TXBnDLC);
将此帧报文需要发送的数据写入发送缓冲器数据寄存器;
判断CAN总线是否空闲,空闲则启动发送,否则等待CAN总线空闲;
判断报文是否发生成功,成功则结束,否则从新发送。
MCP2515的报文发送流程如图5.9所示。
图5.9MCP2515报文发送流程图
MCP2515的报文接收采用的中断的方式,当检测CAN总线上有帧起始时,把该帧报文载入报文集成缓冲器;
判断该帧是否符合滤波器条件,若符合则载入报文缓冲器,否则丢弃该帧,当报文装入报文缓冲器后,MCP2515的
引脚会产生中断,通知MCU有报文需要接收;
读取报文接收缓冲器标识符寄存器中的值,即该帧报文的帧ID;
读取该帧报文的数据长度;
读取该帧报文传输的数据;
清除中断标志;
结束接收。
MCP2515的报文接收流程如下图5.10所示。
图5.10MCP2515的报文接收流程图
5.3485总线模块驱动程序设计实现
5.3.1485总线数据通信格式
由上一节CAN总线驱动程序设计可知,SAW标签采集的数据是多字节的,而UART通信一次最多只能传输8bit数据,所以在485驱动程序设计前,需要对数据信息的帧格式进行设计。
本文中485总线数据的帧格式采用MODBUS协议的RTU(RemoteTerminalUnit,远程终端设备)格式,RTU帧格式结构如表5.3所示,RTU帧格式中数据的起始和结束通过时间来判断,若3.5个字符时间内没有接收到数据则表示本帧数据结束,同时认为下一个字符为下帧数据的开始。
表5.3RTU帧格式
地址码
功能码
数据区
CRC校验
Nbyte
地址码:
485总线采用的是主机询问,从机应答的半双工通信方式,RTU帧格式中,地址用于表示从机地址,不同的从机地址不同。
只有当通信报文中地址与从机地址相匹配时,从机才应答主机的请求。
主机能够对从机的地址进行设置。
功能码:
功能码表示本次通信,从机应该执行什么操作。
功能码能表示的范围为1~127,本文只选用了其中的部分功能码,如表5.4所示。
主机发送的命令帧和从机应答的数据帧中的功能码是相同的,命令帧中的功能码表示要执行的操作,数据帧中的功能码表示从机根据主机发送的命令帧做出的响应。
表5.4功能码信息表
读/写功能
功能
01
读
读取一个或多个读卡器的工作状态
04
读取读卡器的数据信息
06
写
更改读卡器地址码
15
向一个或多个对卡其写入控制命令,控制器工作状态
数据区:
数据区是主机发送给从机的数据或从机响应主机的数据,数据区随功能码的不同而不同。
如“04”功能码表示主机要求读取读卡器的数据信息,从机响应后返回读卡器采集的数据。
对于不同的功能码,数据区的大小可以不相同。
CRC校验:
CRC校验用于判断接收的信息是否正确。
本文采用16位循环冗余校验码完成数据的校验,发送方发送16位的循环冗余校验码,接收方对接收到的校验码进行验证,若与发送方发送的校验码是一致的,则数据传输是正确的。
5.3.2MAX485驱动程序
本文中485总线采用的电平转换芯片为MAX485,MAX485与S3C2440A之间通信采用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 表面波 技术 煤矿安全 智能 监控 节点 设计 实现