SD卡在记录汽车CAN总线数据中的实现

时间:2011-08-24

 

  CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品着称的德国BOSCH公司开发了的,并终成为国际标准(ISO118?8)。是国际上应用广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应"减少线束的数量"、"通过多个LAN,进行大量数据的高速通信"的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。

  设计以SD卡作存储载体,实现实时记录CAN总线上数据的记录仪,具有容量大、体积小、重量轻、接口电路简单等特点。并且记录的数据文件可以为PC机所识别,通过PC机上的分析软件对其进行分析和回放,作为历史数据用于数据对比。

  1 系统设计

  SD卡在24mm×32mm×2.1mm的体积内结合了SanDisk快闪记忆卡控制与MLC(Multilevel Cell)技术和Toshiba(东芝)0.16u及0.13u的NAND技术,通过9针的接口界面与专门的驱动器相连接,不需要额外的电源来保持其上记忆的信息。而且它是一体化固体介质,没有任何移动部分,所以不用担心机械运动的损坏。

  SD卡应用于CAN总线数据记录仪的系统结构图如图1所示,CAN总线数据仪工作时应挂接到汽车CAN总线上,成为一个CAN节点,以便采集CAN数据信息。主控芯片的主要作用是进行数据采集并将采集到的CAN数据以文件格式存储在SD卡上。此外,SD卡在数据组织结构上与PC机格式兼容,这里选用FAT32文件系统,使记录数据可以直接供Windows操作系统下的应用程序使用。

 


  2  硬件接口设计

  硬件平台的控制采用NXP公司的ARM7芯片LPC2368, 该芯片是基于ARM7TDMI-S内核的32位微控制器,可在高达72 MHz的频率下操作,功能强大且成本低,具有高达512 KB的片内Flash、32 KB的SRAM,内部具有丰富的系统外围设备控制器,包括SD控制器和CAN控制器。

  SD卡支持2种工作模式:SD模式和SPI模式。SD模式允许4线高速数据传输,SPI模式允许简单通用的SPI通道接口, 但读写速度大大降低。由于CAN总线数据传输速率较高,因此本设计采用SD模式的4线高速数据传输功能。

  LPC2368与SD卡接口电路如图2所示,使用SD通信协议将SD和LPC2368相连实现数据传输。CMD传输SD控制器的命令及相关参数和SD卡对命令的响应信号,DAT0、DAT1、DAT2、DAT3传输读写数据,CLK为时钟信号,并由主控芯片来控制SD卡的电源。

  3  软件设计

  3.1  SD卡底层读写

  SD卡的读写操作都是基于命令的,主控芯片通过向SD卡发送相应的命令并读取相应的响应来实现对SD卡的控制,在对SD卡读写之前,首先要对SD控制器进行初始化,完成各项参数的配置,包括控制器与CPU数据传输的DMA方式、传输速率和读写数据块长度等,之后需要对SD卡进行初始化,这是确保SD卡正常数据读写的前提。SD卡的初始化流程如图3所示。


  SD卡初始化完成之后如果要使用默认的块读写长度(512 B),就可以进行SD卡的读写。当然,也可用CMD16命令来设置SD卡的块读写长度,可以是1B~512 B之间的任意值。但是对SD卡的写过程则要求块长度必须为512 B.无论是SD卡的读还是写,都要求在读写命令发送后有数据起始令牌FEH,数据传输结束有2 B的循环冗余编码CRC.本设计采用默认的块读写长度。

  3.2  FAT32文件系统

  FAT32是Windows系统硬盘分区格式的一种。这种格式采用32位的文件分配表,使其对磁盘的管理能力大大增强,突破了FAT16对每一个分区的容量只有2 GB的限制。由于现在的硬盘生产成本下降,其容量越来越大,运用FAT32的分区格式后,我们可以将一个大硬盘定义成一个分区而不必分为几个分区使用,大大方便了对磁盘的管理。目前已被性能更优异的NTFS分区格式所取代。

  存储在SD卡中的数据为二进制数据,为了使其能为计算机所识别,SD卡文件系统必须与计算机的文件系统一致。目前Windows系列操作系统中常用的文件系统有FAT16、FAT32及NTFS等。由于汽车CAN网络的数据量大,并且记录仪需要记录长时间的数据,所以本设计选择FAT32作为SD卡的文件系统,FAT32支持单个文件4 GB容量,满足CAN数据记录仪的要求。

  FAT32文件系统由系统引导记录区、FAT表区、文件登记表区和数据区四部分组成。系统引导记录区存储SD卡有关磁盘的结构信息,包括扇区字节数、FAT表的数目和总扇区数等;FAT表是FAT32文件系统中用于磁盘数据(文件)索引和定位引进的一种链式结构,它准确记录着已经被占用的簇,并为每个已经占用的簇指明存储后续内容的下一个簇的簇号。文件登记表FDT记录文件的登记项,每个登记项占32 B,记录了文件的起始簇号、大小以及创建和修改的时间等;数据区用于存储文件数据。

  SD卡的文件系统主要功能包括创建文件、打开文件、写文件、读文件和关闭文件。在应用中,可以根据实际情况,增删以上功能,以简化系统。

  考虑数据采集对系统实时性的要求, 对FAT表区的链式结构进行简化,磁盘的空闲空间是连续的,采用连续存储方式,这样略去了每次去FAT表搜索空闲簇的过程,满足系统对实时性的要求。简化后的链式结构是直线链, 即写满一个扇区自动写下一个扇区, 写满一个簇自动写下一个簇。

  3.2.1  文件的创建

  在SD卡上创建文件就是在文件目录表FDT中申请登记项和向FAT表中的FAT项填写空闲簇号的过程,流程图如图4所示。程序首先在系统引导记录区获取SD卡磁盘的结构信息;接着要检测文件登记表FDT中是否已经存在该文件,如果存在同名的文件,则返回,创建文件失败;然后申请空闲的FDT表项,申请FDT 表项成功后,程序会检测磁盘剩余的空间是否满足新创文件数据长度的需要,然后寻找个空闲的簇号,并修改对应的FDT表项。由于文件都是连续的,在FAT表中的FAT链表是直线链即前一簇指向后一簇,根据文件的大小,向FAT表区填写FAT链表,直到一个FAT项写入0x0FFFFFFFH,表示文件结束。

 

  3.2.2  文件的读/写

  SD卡上文件都是以簇为单位存取的,向SD卡上的文件写数据时,首先要根据文件名查找到该文件的文件登记项,根据文件登记项中的起始簇号即可找到文件在数据区中第1簇,向数据区对应的簇中写数据,并且可以在FAT表中找到第2个簇号。根据第2个簇号又能向第2簇写数据并找到FAT 中的第3个簇号,以此类推,直到FAT表中一项0x0FFFFFFFH,完成写文件。读取文件的过程与写文件类似。

  SD卡在记录汽车CAN总线数据中的应用程序流程图如图5所示。其中LPC2368以中断方式将接收到的CAN数据以及接收时的时间存储到数据队列里,并立即跳出中断,进行主程序的处理或等待下一帧数据的接收中断,从而避免报文的丢失。


  本设计采用SD卡作为外部存储介质,将实时采集到的CAN数据信息以标准文件的格式保存于SD卡中,具有性能可靠、使用方便、重量轻及存储容量大等特点,具有广阔的应用前景。

 


  
上一篇:TMS320C6000 DSP系统的引导的设计和实现
下一篇:温控振荡器的环境试验测试方法

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料