SD卡在记录汽车CAN总线数据中的应用
扫描二维码
随时随地手机看文章
提出了用SD卡来实现记录汽车CAN总线数据的设计,介绍了基于LPC2368的SD卡FAT文件系统的实现方法,并给出了该设计的硬件接口与软件实现,阐述了SD卡应用于大容量数据记录的优点。
关键词: CAN总线;SD卡;FAT文件系统;数据记录
CAN总线是德国BOSCH公司在20世纪80年代初,为了解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议。它的短帧数据结构、非破坏性总线性仲裁技术以及灵活的通信方式适应了汽车的实时性和可靠性要求,备受汽车生产厂商的青睐。目前,汽车上的ECU(电控单元)之间使用CAN总线进行通信,例如电控燃油喷射系统、电控传动系统、防抱死制动系统(ABS)和防滑控制系统(ASR)等,记录汽车CAN总线上的数据对于监控汽车ECU间正确通信和研究汽车CAN网络故障的原因具有重要的意义。
设计以SD卡作存储载体,实现实时记录CAN总线上数据的记录仪,具有容量大、体积小、重量轻、接口电路简单等特点。并且记录的数据文件可以为PC机所识别,通过PC机上的分析软件对其进行分析和回放,作为历史数据用于数据对比。
1 系统设计
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文件系统
存储在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卡中,具有性能可靠、使用方便、重量轻及存储容量大等特点,具有广阔的应用前景。