SD卡在智能车调试系统中的应用

点赞:3624 浏览:9306 近期更新时间:2024-01-09 作者:网友分享原创网站原创

【摘 要 】本文介绍了如何利用SD卡实时记录摄像头智能车高速运行下单片机处理的图像与各个参数,以及如何在PC端建立SD卡上位机把所记录的参数信息还原出来.

【关 键 词 】SD卡;智能车;上位机

1.引言

SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的新一代记忆设备.SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制,具有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性及兼容MMC卡等特点.它的出现提供了一个便宜的、结实的、卡片式的存储媒介,它的容量从16MB到32GB不等,可为众多应用提供足够的外部存储空间.

如今“飞思卡尔”杯全国大学生智能汽车竞赛已经有七年的历史,更快、更稳一直是竞赛的主题,而要智能车变得更快、更稳,一个好的调试系统是必不可缺的,现阶段普遍应用的调试手段有BDM、串口、蓝牙与NRF系列无线收发模块,然而这四种方式都有着很大的局限性,先不论BDM与串口传输需要有线连接的问题,这四种调试手段的传输速度皆不能在不影响智能车稳定运行情况下实时记录MCU内部处理的数据.相对以上四种调试手段,SD卡有明显的传输优势.首先它体积小、容量大、便于安装与拆卸,只需要一个简单的硬件电路即可实现SD卡插槽与单片机的连接,理论最大传输速率为25Mbit/s(单线).再借助上位机把存储在SD卡扇区里的数据在PC端还原出来,这就方便了数据的离线分析.

2.SD卡数据的写入

2.1 SD卡与单片机的连接

SD卡有两种总线模式――SD模式与SPI模式.SD模式可以采用四根数据线(DAT0-DAT3)进行数据传输,SPI模式只能采用单数据线(DAT0)进行数据传输,SD卡在上电初期,通过检测引脚1(DAT3)来识别使用SD模式还是SPI模式.当1脚接50kΩ上拉电阻时,卡进入SD模式;当1脚为低电平,卡则工作于SPI模式.

SPI模式相对于SD模式传输速度慢了一些,不过理论上是可以达到25M/S,在智能车调试领域里是可以满足我们的传输要求的.由于主控芯片飞思卡尔MC9S12XS128自带有SPI模式,故SD卡与单片机之间只需要四线连接,分别是数据输出端DO、片选端CS、数据输入端DI与时钟端SCLK,其分别对应MC9S12XS12的PM2、PM3、PM4与PM5.如图1所示.

2.2 SD卡的初始化

在进行SD卡的读写之前需要对SD卡进行初始化,初始化的步骤为:

(1)初始化MC9S12XS128单片机SPI模式为低速状态;

(2)发送至少74个时钟;

(3)循环连续发送CMD0,直到SD卡返回0x01,进入空闲状态;

(4)发送CM55,应返回0x01,否则错误返回,得到0x01后发ACMD41,应得到返回值0x00,否则重复这一步骤(上限400次)直到得到0x01;

(5)设置SPI为高速模式;

(6)发送CMD16设置块大小为512字节,这样就实现了SD卡的初始化.接下来就可以实现SD卡扇区的读写操作了.

2.3 SD卡扇区的读写

以单扇区写数据为例:

(1)先设置为高速模式;

(2)发送CMD24命令应得到正确响应0x00;

(3)片选置低并发3个空数据,等待SD卡准备好;

(4)发送起始令牌0xFE;

(5)放入要写入一个扇区中的数据;


(6)发2个字节CRC校验等待操作完成;

(7)片选置高.

需要注意的是,Kingston 1G的SD卡第0扇区是启动扇区,从0扇区开始写会出现错误,所以一般要从比较大一点的扇区开始写数据,笔者是从第103730个扇区开始读写的.

3.Visual C++读取SD卡扇区数据并写入文件

3.1 Windows下C++读取SD卡扇区数据

Windows下可以把所有的硬件设备当成“文件”,并用文件I/O函数对其进行数据存取访问.以文件句柄方式指定一个包含全路径的文件名后,就可以要求操作系统打开这个文件并返回一个文件句柄,以后就可以用这个句柄来读写文件,直到关闭文件为止.操作系统在内部为每个文件句柄分配一个读写指针,指示文件读写的位置,每次对文件的读写操作完成以后,指针会自动调整到本次操作的最后一个字节后面的位置.指针也可以被移动到文件的任意位置,以便满足不同情况存取的要求.

Windows系统处理文件的一般步骤为:

(1)首先利用CreateFile()函数打开文件,并返回文件句柄;

(2)用SetFilePointer()函数调整文件指针转移到要操作的磁盘扇区处;

(3)用ReadFile()函数从指定位置开始读取文件;

(4)最后用CloseHandle()关闭文件.

用这样的方式就可以读取出SD卡扇区内的数据了.

3.2 数据的保存

在C++读取SD卡扇区内数据后需要将其保存在文件里,其中把图像数组数据进行二值化转换成字符0或1以普通文件格式保存,而各参数数据则以二进制文件格式保存,保存文件可以用C++文件流的方式.保存文件的步骤为:

(1)创建以100―999为文件名,分别以txt与hex为后缀名的文件,用来存储每副图像及其对应参数发,可以采用这样的方法循环创建:设置一字符串变量char p[]等于"000.txt",采用for循环,先分离出100―999的百位、十位、个位数字分别加上0x30(目的是转化为字符,例:字符‘1’的ASCII码是49即为0x30+0x01)替换掉字符串“000.txt”中前三位字符即可,循环中每建立一个文件后就可以进行一次步骤2、3、4存储数据了; (2)建立文件流对象,比如fstream outfile;

(3)打开文件并选择打开方式,如果文件不存在,用ios_base::out方式打开则会自动创建一个新文件,例如打开E盘下名为“100.txt”的文件,操作为:outfile.open(“e:\\100.txt”,ios_base::out);

(4)把数据写入文件:outfile.write (buff,sizeof(buff)).

为了方便下一步操作,笔者把一副图像的数据与单片机对这幅图像处理过程中各个参数的数据分离开来,分别存放于相同文件名不同后缀名的文件中.比如,把50*120的图像数组存入100.txt中,把这幅图像对应的各参数存入100.hex中.这样就方便LabVIEW上位机还原数据.

4.LabVIEW上位机读文件还原图像及参数数据

4.1 LabVIEW简介

LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式.LabVIEW提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面.

4.2 LabVIWE上位机还原数据

笔者之所以选用LabVIEW作为此上位机的开发平台是因为LabVIEW中提供了很多方便的函数控件,比如我们需要用到的文件读取、文件保存、高低位合并、字符串合并及截取、字符串转换成字节数组、绘制波形图、字符串至路径转换等控件,如果这些功能用MFC实现的话又是一堆复杂的代码,而LabVIEW中只需要拉出函数图标则可.另外只需要把二维图像数组经过简单的转化就可以在LabVIWE中用专用的图片控件中显示出来.以下为上位机程序运行流程:

(1)以读取文本文件方式读取txt文件,以读取二进制文件方式读取hex文件.

(2)读取txt文件输出字符串即为一副图像数据,用字符串转换字节数组控件把字符串转换成字节数组,再转换成二维数组,把二维数组用相应的图片控件还原成黑白图像.这样就实现了图像的还原.

(3)读取hex文件输出即为一系列参数数据组成的字符串,用字符串截取、字符串-字节数组转换与高低位合并等操作就可以实现各个参数数据的还原.图2为上位机界面效果.

5.系统总结

SD卡在智能车调试系统领域中相对其他一般调试手段有着很大的优势和很高的应用价值,能极大的方便使用者记录数据和分析数据,经笔者测试在MC9S12XS128单片机80M超频情况下传输速度可以稳定达到8M/s,完全可以达到我们智能汽车控制中的的图像传输要求.现阶段中SD卡调试普及率还是比较低的,可以预料它有着广阔的应用前景.

SD卡在智能车调试系统中的应用参考属性评定
有关论文范文主题研究: 关于操作系统的论文范例 大学生适用: 函授论文、专升本毕业论文
相关参考文献下载数量: 24 写作解决问题: 写作参考
毕业论文开题报告: 标准论文格式、论文设计 职称论文适用: 职称评定、初级职称
所属大学生专业类别: 写作参考 论文题目推荐度: 优秀选题