基于ARM的实验数据海量存储系统的设计
时间:04-28
来源:互联网
点击:
引言
随着科学技术的不断发展.数据的存储和传输在嵌入式系统有了越来越重要的地位。海量数据存储是当前科技发展中的—个热点领域.它的应用也变的日益广泛。
设计嵌入式海量数据采集存储系统首先需要考虑的问题是软硬件接口的设计。只有软硬件接口定义清晰.协同工作顺利。才能保证软件与硬件组合为一个系统。软硬件接口设计又分为2个具体的问题:一是硬件接口连线的定义是否合理;二是软件上如何正确地收、发信息以及交换数据。必须选择合理的CPU来解决这两个问题。ARM核CPU以其高性能、小体积、低功耗和多供应源的出色结合而著名.它的另—个显著优点是易移植各种嵌人式实时操作系统.对于海量存储系统,这是非常必要的。此外,SD卡存储技术.目前设计成熟、应用广泛目使用极为简捷。
因此,本设计选择基于ARM的嵌入式结构作为海量存储的控制系统.使用高效便捷的CAN-BUS作为数据采集通道.采用SD卡作为存储介质.同时也为以后进一步完善系统功能提供了良好的解决方案。下面将围绕基于ARM的汽车实验数据海量存储系统的硬件设计和软件设计展开论述。
1 系统硬件设计
1.1 系统总体设计
通过分析系统的功能,根据模块的实际需要,设计中选用了具有CAN-BUS以及SD/MMC卡管理功能的高性能ARM处理器:LPC2378。LPC2378是一款基于ARM7的微控制器,十分适用于需要串行通信的场合.且其内部包含CAN通道。所以需要考虑针对CAN总线的接口设计及其隔离电路的设计(详述见下文)。在它的基础上.再配上电源以及存储器等芯片,就构成了一个完整的嵌入式系统。系统总体框图如图1所示:
图1 系统总体框图
1.2 SD存储卡接口设计
本次方案选定的LPC2378微控制器内部带有SD卡控制器,支持SD卡的SD总线模式.因此.我们可以直接使用该控制器来访问卡。接口电路(如图2所示)包括4个部分:
图2 SD存储卡接口电路
1.SD总线:如图所示。微控制器的P0.22、P2.11、P2.12、P2.13、P0.20根据引脚功能.直接连接到卡座的相应接口。
2.SD卡ESD保护电路:如图所示.在卡座的数据总线DAT0-DAT3、时钟线CLK和命令线CMD上.使用了—个ESD保护器件PESD5VOL6U。这是—个专用于SD/MMC卡的ESD保护器件。它的作用是:当卡插人或拔出时,保护卡不受高压静电的损害。
3.卡供电控制:用可控方式给卡供电,这是为了防止SD卡进入不确定状态时,可以通过重新上电给卡复位。可控电路采用P型MOS管2SJ355.由ARM的GPIO口 P0.25进行控制。当P0.25输出高电平时。2SJ355断开卡的电源;当P0.25输出低电平时,2SJ355导通VCC3.3电源给卡供电。采用2sJ355的目的是当它开通时。管子上的压降比较小.在保证SD/MMC卡工作允许电压的情况下。也可以使用其它P型的MOS管。
4.卡检测电路:卡检测电路包括两部分.卡是否完全插入到卡座中和卡是否写保护。检测信号以两个引脚的电平方式输出。当卡插入到位时.卡座的CARD—INSERT脚由于卡座内部触点连接到GND,输出低电平:当卡拔出时.该引脚由于上掩电阻的存在而输出高电平。该输出由ARM的输入引脚P2.5来检测。卡是否写保护的检测原理与此相同。
2 系统驱动程序设计
鉴于本系统的高实时性要求.在模块软件设计前首先在LPC2378上移植了μC/OS-II。μc/OS-II是一个高性能的嵌入式实时操作系统。能高效地实现任务切换、任务调度、任务问通信、同步、互斥、实时时钟管理、中断管理等功能。μC/OS-II也是—个移植性很强的操作系统.系统移植时只需要修改和硬件有关的源代码即可。
2.1 系统软件流程
使用定时中断方式采集CAN总线中的数据。在μC/OS-Ⅱ主函数中建立一个空闲任务TASK0.配置和初始化定时器0和实时时钟,启动多任务操作系统.并记录其启动时间。接着在TASK0任务中初始化ADC、定时器等系统硬件,创建控制、存储采样信息的信号量和消息邮箱.并创建SD卡文件写入任务、采样任务和FS文件管理系统任务。其中,文件管理任务的优先级最高.SD卡写入任务最低。而采样任务是由中断服务程序(ISR)控制的.定时器时间到后,触发中断,ISR即发送信号量给采样任务,随即开始一次硬件采样。SD卡文件写入任务和采样任务的流程图分别如图3、图4所示。
图3 SD卡文件写入任务流程图
图4 采样任务流程图
在采样中有两个问题需要注意.首先是所有的采样值都必须加上采样时问的数据,方便后期的实验结果分析.所以在硬件设计中使用到了LPC2378的实时时钟功能(RTC)。第二个问题是FS文件系统管理任务在控制SD卡写入任务时.是以ASCII码的形式往SD卡中写入数据,因此在数据存储前比较将A/D采样结果转换成ASCⅡ码。
2.2 CAN总线初始化设计
CAN控制器的寄存器比较多.但其通信流程与常规通信接口UART大体是一致的.所以初始化CAN的过程,包括对CAN的时钟频率.CAN的引脚一级波特率的设置等。需要注意的是。所有设置必须要在CAN控制器处于复位模式下时进行。
初始化CAN控制器使用函数CAN_Init().它包括了两路的CAN控制器的同时配置。
CAN总线的初始化程序关键代码:
void CAN_Init(unsigned char Ch,unsigned long Baud)
{
unsigned long addr
/*配置CAN控制器引脚*/
PCONP |=0x01L<<13; /*打开CAN控制器电源*/
PINSEL0&=~(Ox03L<<0); /*通道IRD*/
PINSEL0 |=(0xO1L<<o);
PINSEL0&=~(Ox03L<<2); /*通道ITD*/
PINSEL0 |=(0x01L<<2);
...
addr=(unsigned long)(&CAN1BTR)+Ch*CANOFFSET;
RGE(addr)=Baud; /*获取CH路的CANIBTR寄存器地址.并设定波特率*/
...
}
2.3 SD/MMC接口的初始化设计
SD接口的初始化在TASK0任务中进行.其功能通过调用SDCammand函数实现。SDCammand函数包括底层SD驱动程序和操作系统上层接口程序。SDCammand函数的关键代码如下:
uint16 SDCammand(uint8 Cammand,void * Parameter)
{
/*定义相关变量*/
switch(cammand)
{
case DISK_INIT: /*设备初始化*/
SD_Initialize(&sds); /*完成SD卡的硬件初始化*/
case DISK_CLOSE: /*关闭驱动器.移除驱动程序*/
case DISK_READ_SECTOR:⋯/*读扇区*/
case DISK_WRITE_SECTOR:⋯/*写扇区*/
...
}
retum rt; /*rt负责返回各种底层驱动返回值*/
}
随着科学技术的不断发展.数据的存储和传输在嵌入式系统有了越来越重要的地位。海量数据存储是当前科技发展中的—个热点领域.它的应用也变的日益广泛。
设计嵌入式海量数据采集存储系统首先需要考虑的问题是软硬件接口的设计。只有软硬件接口定义清晰.协同工作顺利。才能保证软件与硬件组合为一个系统。软硬件接口设计又分为2个具体的问题:一是硬件接口连线的定义是否合理;二是软件上如何正确地收、发信息以及交换数据。必须选择合理的CPU来解决这两个问题。ARM核CPU以其高性能、小体积、低功耗和多供应源的出色结合而著名.它的另—个显著优点是易移植各种嵌人式实时操作系统.对于海量存储系统,这是非常必要的。此外,SD卡存储技术.目前设计成熟、应用广泛目使用极为简捷。
因此,本设计选择基于ARM的嵌入式结构作为海量存储的控制系统.使用高效便捷的CAN-BUS作为数据采集通道.采用SD卡作为存储介质.同时也为以后进一步完善系统功能提供了良好的解决方案。下面将围绕基于ARM的汽车实验数据海量存储系统的硬件设计和软件设计展开论述。
1 系统硬件设计
1.1 系统总体设计
通过分析系统的功能,根据模块的实际需要,设计中选用了具有CAN-BUS以及SD/MMC卡管理功能的高性能ARM处理器:LPC2378。LPC2378是一款基于ARM7的微控制器,十分适用于需要串行通信的场合.且其内部包含CAN通道。所以需要考虑针对CAN总线的接口设计及其隔离电路的设计(详述见下文)。在它的基础上.再配上电源以及存储器等芯片,就构成了一个完整的嵌入式系统。系统总体框图如图1所示:
图1 系统总体框图
1.2 SD存储卡接口设计
本次方案选定的LPC2378微控制器内部带有SD卡控制器,支持SD卡的SD总线模式.因此.我们可以直接使用该控制器来访问卡。接口电路(如图2所示)包括4个部分:
图2 SD存储卡接口电路
1.SD总线:如图所示。微控制器的P0.22、P2.11、P2.12、P2.13、P0.20根据引脚功能.直接连接到卡座的相应接口。
2.SD卡ESD保护电路:如图所示.在卡座的数据总线DAT0-DAT3、时钟线CLK和命令线CMD上.使用了—个ESD保护器件PESD5VOL6U。这是—个专用于SD/MMC卡的ESD保护器件。它的作用是:当卡插人或拔出时,保护卡不受高压静电的损害。
3.卡供电控制:用可控方式给卡供电,这是为了防止SD卡进入不确定状态时,可以通过重新上电给卡复位。可控电路采用P型MOS管2SJ355.由ARM的GPIO口 P0.25进行控制。当P0.25输出高电平时。2SJ355断开卡的电源;当P0.25输出低电平时,2SJ355导通VCC3.3电源给卡供电。采用2sJ355的目的是当它开通时。管子上的压降比较小.在保证SD/MMC卡工作允许电压的情况下。也可以使用其它P型的MOS管。
4.卡检测电路:卡检测电路包括两部分.卡是否完全插入到卡座中和卡是否写保护。检测信号以两个引脚的电平方式输出。当卡插入到位时.卡座的CARD—INSERT脚由于卡座内部触点连接到GND,输出低电平:当卡拔出时.该引脚由于上掩电阻的存在而输出高电平。该输出由ARM的输入引脚P2.5来检测。卡是否写保护的检测原理与此相同。
2 系统驱动程序设计
鉴于本系统的高实时性要求.在模块软件设计前首先在LPC2378上移植了μC/OS-II。μc/OS-II是一个高性能的嵌入式实时操作系统。能高效地实现任务切换、任务调度、任务问通信、同步、互斥、实时时钟管理、中断管理等功能。μC/OS-II也是—个移植性很强的操作系统.系统移植时只需要修改和硬件有关的源代码即可。
2.1 系统软件流程
使用定时中断方式采集CAN总线中的数据。在μC/OS-Ⅱ主函数中建立一个空闲任务TASK0.配置和初始化定时器0和实时时钟,启动多任务操作系统.并记录其启动时间。接着在TASK0任务中初始化ADC、定时器等系统硬件,创建控制、存储采样信息的信号量和消息邮箱.并创建SD卡文件写入任务、采样任务和FS文件管理系统任务。其中,文件管理任务的优先级最高.SD卡写入任务最低。而采样任务是由中断服务程序(ISR)控制的.定时器时间到后,触发中断,ISR即发送信号量给采样任务,随即开始一次硬件采样。SD卡文件写入任务和采样任务的流程图分别如图3、图4所示。
图3 SD卡文件写入任务流程图
图4 采样任务流程图
在采样中有两个问题需要注意.首先是所有的采样值都必须加上采样时问的数据,方便后期的实验结果分析.所以在硬件设计中使用到了LPC2378的实时时钟功能(RTC)。第二个问题是FS文件系统管理任务在控制SD卡写入任务时.是以ASCII码的形式往SD卡中写入数据,因此在数据存储前比较将A/D采样结果转换成ASCⅡ码。
2.2 CAN总线初始化设计
CAN控制器的寄存器比较多.但其通信流程与常规通信接口UART大体是一致的.所以初始化CAN的过程,包括对CAN的时钟频率.CAN的引脚一级波特率的设置等。需要注意的是。所有设置必须要在CAN控制器处于复位模式下时进行。
初始化CAN控制器使用函数CAN_Init().它包括了两路的CAN控制器的同时配置。
CAN总线的初始化程序关键代码:
void CAN_Init(unsigned char Ch,unsigned long Baud)
{
unsigned long addr
/*配置CAN控制器引脚*/
PCONP |=0x01L<<13; /*打开CAN控制器电源*/
PINSEL0&=~(Ox03L<<0); /*通道IRD*/
PINSEL0 |=(0xO1L<<o);
PINSEL0&=~(Ox03L<<2); /*通道ITD*/
PINSEL0 |=(0x01L<<2);
...
addr=(unsigned long)(&CAN1BTR)+Ch*CANOFFSET;
RGE(addr)=Baud; /*获取CH路的CANIBTR寄存器地址.并设定波特率*/
...
}
2.3 SD/MMC接口的初始化设计
SD接口的初始化在TASK0任务中进行.其功能通过调用SDCammand函数实现。SDCammand函数包括底层SD驱动程序和操作系统上层接口程序。SDCammand函数的关键代码如下:
uint16 SDCammand(uint8 Cammand,void * Parameter)
{
/*定义相关变量*/
switch(cammand)
{
case DISK_INIT: /*设备初始化*/
SD_Initialize(&sds); /*完成SD卡的硬件初始化*/
case DISK_CLOSE: /*关闭驱动器.移除驱动程序*/
case DISK_READ_SECTOR:⋯/*读扇区*/
case DISK_WRITE_SECTOR:⋯/*写扇区*/
...
}
retum rt; /*rt负责返回各种底层驱动返回值*/
}
嵌入式 ARM 总线 电路 电压 电阻 CAN总线 ADC 相关文章:
- 基于ARM与DSP的嵌入式运动控制器设计(04-25)
- 多核及虚拟化技术在工业和安全领域的应用(05-23)
- 基于ARM核的AT75C220及其在指纹识别系统中的应用(05-24)
- 基于FPGA安全封装的身份认证模型研究(05-27)
- 基于nRF2401智能无线火灾监控系统设计(04-01)
- 智能视频多媒体技术的应用(05-31)