基于嵌入式汽车智能防盗系统研究
2009-06-16
作者:陈承贵1, 罗克露2
摘 要: 根据嵌入式的设计应用,采用ARM9作为报警系统的控制装置,选用集成音频驱动电路和汽车控制传感等部件,同时还为系统安装了智能卡和使用方便的新型UHF远程发射电路,配合软件和操作系统,改进了汽车智能防盗功能,并且具有智能、安全和性价比高等优点。
关键词: 嵌入式;智能;音频;报警;远程控制
随着社会经济的发展及电子技术的应用,人们在享受汽车带来的方便与快乐的同时,也在为汽车安全防盗问题忧虑。如何解决汽车防盗问题,电子设计师们研制出不同方式、不同结构的防盗报警系统。在基于GPRS 和嵌入式计算机的远程监控系统研究[1]中,对汽车进行视频远程监控进行了详细的研究,GPRS与GPS在汽车信息服务系统中的设计应用研究[2]中,利用GPS卫星导航技术对汽车的远程定位进行实时监控。上述课题的研究都是大众化的服务,针对现代汽车的防盗系统,如何提供智能化和个性化的汽车防盗系统,这无疑在汽车工业高速发展的今天具有更重要的实践意义和商业前景。本文提出了基于嵌入式汽车智能防盗系统的构建,并设计了带智能卡技术和远程遥控技术的智能防盗车门,同时进行了个性化的音频报警驱动软硬件的设计。
1 汽车智能防盗系统的功能及构成
汽车智能防盗系统远程控制车门的关闭,并同时启动智能防盗功能。正常开启车门时,可以使用常用的远程遥控钥匙,同时也可以由IC卡开启车门。当出现碰撞和非正常开启车门时,汽车各种防盗传感部件检测到信号,通过声音报警电路发出急促的报警声音,同时由无线通信模块发出短信息,以此来通知车主汽车的当前状况,车主根据信息对汽车发出控制指令。
本系统总体框图如图1所示,它由嵌入式ARM核心控制模块、存储器模块、无线通信模块、远程控制模块、汽车防盗检测驱动模块、人机接口模块和声音报警模7大模块组成。
嵌入式ARM核心控制由ARM920TDMI的32位微处理器SamsungS3C2410X[3]芯片实现,该芯片共有272只引脚,它采用了FBGA封装技术,具有大量的电源、接地引脚、地址总线、数据总线、通用I/O口以及其他的专用模块,如UART、I2C等接口。在硬件系统中,芯片引脚的类型有输入(I)、输出(O)、输入/输出(I/O)等。输出类型的引脚主要用于S3C2410X对外设的控制或通信,由S3C2410X主动发出,这些引脚的连接不会对S3C2410X自身的运行有太大的影响。输入/输出类型的引脚主要是S3C2410X与外设的双向数据传输通道。在参考文献[2]中,对GPRS模块和GPS模块的嵌入式开发,以及如何应用这两个模块实现短信息收发通信等系统功能进行了详细的研究设计。人机接口模块通过LCD触摸显示屏完成人机交互功能。存储器模块由Flash RAM和SDRAM组成,实现引导程序存储和执行中的程序及产生的数据存储,在嵌入式系统开发与应用[4]中有了较好的说明。防盗检测驱动模块包括汽车的车门智能卡传感与检测、位移传感与检测、点火传感与检测、电源传感与检测、方向盘传感与检测等,汽车防盗检测驱动接口部分通过各种传感的声学量和物理量的监测,把监测的参数通过A/D转换,由CAN总线传送给ARM9处理。总之,系统在嵌入式芯片ARM9TDMI控制下,通过软件和硬件的结合,实现了汽车防盗报警智能化。下面主要对汽车智能防盗的关键部分车门智能卡、音频报警模块软硬件及远程控制发射模块硬件进行研究。
2 系统关键硬件部分设计
2.1 智能卡硬件部分设计
智能卡(Smart Card)是把集成电路芯片嵌入塑料基片中,利用读卡器,读取卡上的存储数据,进行身份认证。智能卡主要有存储卡、逻辑加密卡和CPU卡。本系统中使用的存储卡,选取Atmel公司的AT24C04。 AT24C04[5]是美国Ateml公司的AT24系统2线串行(I2C总线协议)EEPROM芯片。该芯片支持双向数据传输协议,16 B页面写入方式,自定时写入周期最大10 ms,具有高可靠性,可使用100 000次写/擦除,数据保留期为100年,且提供多种封装形式。存储芯片为8引脚,其中4个引脚未引用,另外4个引脚分别为VCC、SCL、SDAT和GND。串行时钟输入SCL(Seial Clock Input),当串行时钟为上升沿时,数据输入到芯片;串行时钟为下降沿时,数据从芯片中输出。串行数据SDA(Serial Data),设置为双向串行传送数据。该端为漏极开路驱动,可与任意数量的其他漏极开路或集电极开路器件“线或”。器件/页面地址(Devicpage Addresses)有A2、A1、A0,它们作为器件的地址输入端,应用于标准封装中,在IC卡模块封装中不将A2、A1、A0引出到触点上。
AT24C04的器件读写操作分成5个部分。(1)开始状态:SCL处于高电平时,SDA从高电平转向低电平表示一个“开始”状态,该状态表示一种操作的开始,因此必须在任何其他命令之前执行;(2)确认应答:所有地址和数据字以8位码串行输入/输出EEPROM,EEPROM在收到每个地址或数据码之后,置SDA于低电平作为确认应答,该确认应答发生于第9个时钟周期;(3)输出数据:数据按字节(8位)逐位输出,每个时钟脉冲输出1位。SDA总线上的数据应在SCL低电平期间改变,在SCL高电平期间稳定;(4)输入数据:数据按字节(8位)逐位输入,每个时钟脉冲输出1位;在SCL低电平期间将数据送往SDA总线上,在SCL高电平期间SDA总线上的数据稳定,供接口设备读取;(5)停止状态:SCL处于高电平时,SDA由低电平转向高电平表示一个“停止”状态。该状态表示一种操作的结束并将终止所有通信。
智能卡与ARM9芯片的连接利用I2C总线进行通信,如图2所示。
2.2 音频报警部分硬件设计
嵌入式ARM9芯片S3C2410X的声音报警电路,利用S3C2410X支持的I2S总线,结合音频驱动芯片UDA1341TS的部分功能,外加音频功放电路,实现防盗报警。
音频驱动芯片UDA1341TS引脚功能描述如表1所示。
嵌入式ARM9芯片S3C2410X芯片的各种传感器接收到监测的物理参数,由S3C2410X进行内部处理,报警数据信号通过S3C2410X芯片的I2S接口输出,即串行数据输入(I2SDI)、串行数据输出(I2SDO)、通道选择(I2SLRCK)和串行时钟(I2SCLK),连接到音频驱动芯片UDA1341TS的I2S音频接口,即DATA0、DATA1、WS、BCK、SYSCLK端口。
本系统由KD-9561产生报警音乐,同时也可以提供个性化的报警声音,利用音频UDA1341TS芯片的声音输入接口,连接小型麦克风,对UDA1341TS声音输入接口的模拟音频信号进行模数转换,采集音频数据信号,由ARM芯片的I2S控制器读I2S总线,通过DMA2通道实现个性化报警音存放在内核的DMA缓存区。保存的报警声音数据传输由内部总线送到内存,然后传到BDMA控制器通道,再通过I2S控制器写入I2S总线,最后传输给音频驱动芯片UDA1341TS。音频驱动芯片对报警声音的处理,由24与26脚输出音频信号,经过功放进行功率放大,扬声器转换声音报警。具体实现电路如图3所示。
2.3 汽车远程控制发射硬件部分设计
汽车远程控制由远程控制发射和远程控制接收两部分组成,远程控制接收电路通过UHF无线接口,接收到远程控制信号,进行解码处理,送ARMS3C2410X芯片进行处理。本文只研究发射部分,实际就是遥控发射器。本部分电路采用Atmel公司新型RF发送器芯片ATA5771作为汽车的远程控制发射器,芯片为系统级封装 (SiP),集成了Atmel知名的AVR微控制器ATtiny44V和RF发送器T5750/53/54,使用的频率为868 MHz~928 MHz,并采用微型QFN24封装,尺寸仅为5 mm x 5 mm,能够用具有竞争力的成本设计出极小的钥匙。A5771的原理框图如图4所示。
控制发射器作为指令的发射终端,它由ATtiny44把PA端口的按键信号,由内部的ADC电路转换为数字信号,写入8 bit的数据总线并进行数据运算,转换成对应的控制命令,用T5750进行FSK锁相环调制发射。发射在UHF波段范围内。远程控制发射模块主要由内部SRM、EEPROM、PROGRAM FLASH、CPU核心、Power up/down、PLL和50Ω的微带天线组成。CPU核心是整个控制器的核心,处理外部来的指令及运算数据。锁相环部分由PLL、VCO和XTO三部分对需发射的频率和相位进行控制,保证UHF信号的相位稳定。微带天线的阻抗为50Ω,实现RF信号与UHF无线信号的转换。远程控制发射器具体电路如图5所示。
3 系统关键部分软件设计
3.1智能卡部分软件设计
智能卡驱动程序的实现:
#define DTYPE_ALL 0 //芯片控制命令
#define DTYPE_SECURITY 1 //加密命令
#define DTYPE_ICCARD 2 //智能卡读写命令
...
#define ICCARD_IC2404_name “iccard24c04”
#define ICCARD_NAME “iccard”
typedef struct{
ICCARD_data card_data; /*IC卡数据*/
Int lasterrcode; /*最后的错误码*/
Wait_queue_head_t wq; /*等待队列*/
Spinlock_t lock; /*自旋锁*/
}ICCARD_DEV;
...
*******************调用内核函数*********
static struct file_operations mega8_iccard_fops={
owner: this_module,
llseek: mega8_iccard_llseek,//IC卡定位函数
read: mega8_iccard_read, // IC卡设备文件系统读函数
write: mega8_iccard_write, // IC卡设备文件系统写函数
open: mega8_iccard_open, //IC卡设备文件系统的打开设备文件函数
release: mega8_iccard_release,// IC卡设备文件系统的释放设备文件函数
#if 0
poll: mega8_iccard_poll,
#endif
ioctl: mega8_iccard_ioctl,};
上面的程序可以把IC卡的驱动加入到内核当中,实现用户文件系统的接口。用户通过程序去调用内核函数llseek、open、read、write、release、poll、ioctl的子程序,这里省略。
3.2 音频驱动部分软件设计
//**************** [ Record_Iis ] ************
void Record_Iis(void){
unsigned int save_B, save_E, save_PB, save_PE;
Uart_TxEmpty(0);
ChangeClockDivider(1,1); //1:2:4
ChangeMPllValue(0x96,0x5,0x1); //FCLK=135428571Hz, PCLK=3.385714MHz
Uart_Init(33857142,115200);
Uart_Printf('[ IIS (Master Mode) Test (Record Using UDA1341 codec) ]n');
save_B = rGPBCON;
save_E = rGPECON;
save_PB = rGPBUP;
save_PE = rGPEUP;
IIS_PortSetting();
//--- Record Buf initialize
//Non-cacheable area = 0x31000000 ~ 0x33feffff
rec_buf = (unsigned short *)0x31000000;
pISR_DMA2 = (unsigned)DMA2_Rec_Done;
pISR_EINT0 = (unsigned)Muting;
rINTMSK = ~(BIT_DMA2);
Init1341(RECORD); //--- DMA2 Initialize
rDISRCC2 = (1<<1) + (1<<0);//APB, Fix
rDISRC2 = ((U32)IISFIFO);//IISFIFO
rDIDSTC2 = (0<<1) + (0<<0); //PHB, Increment
rDIDST2 = (int)rec_buf;//0x31000000 ~
rDCON2= (1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(1<<24)+(1<<23)+(1<<22)+(1<<20)+REC_LEN;
//Handshake, sync PCLK, TC int, single tx, single service, I2SSDI, I2S Rx request,
//Off-reload, half-word, 0x50000 half word.
rDMASKTRIG2 = (0<<2) + (1<<1) + 0; //No-stop, DMA2 channel on, No-sw trigger
//=========================================
void _WrL3Addr(U8 data){
S32 i,j;
rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | L3C;
//L3D=L, L3M=L(in address mode), L3C=H
for(j=0;j<4;j++){ //tsu(L3) > 190ns
//GPB[4:2]=L3C:L3D:L3M
for(i=0;i<8;i++){ //LSB first
if(data & 0x1) { //If data's LSB is 'H'
rGPBDAT &= ~L3C; //L3C=L
rGPBDAT |= L3D; //L3D=H
for(j=0;j<4;j++); //tcy(L3) > 500ns
rGPBDAT |= L3C; //L3C=H
rGPBDAT |= L3D; //L3D=H
for(j=0;j<4;j++); //tcy(L3) > 500ns
}
else{ //If data's LSB is 'L'
rGPBDAT &= ~L3C; //L3C=L
rGPBDAT &= ~L3D; //L3D=L
for(j=0;j<4;j++); //tcy(L3) > 500ns
rGPBDAT |= L3C; //L3C=H
rGPBDAT &= ~L3D; //L3D=L
for(j=0;j<4;j++); //tcy(L3) > 500ns
}
data >>= 1;
}
rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M); //L3M=H,L3C=H
}
//==========================================
void _WrL3Data(U8 data,int halt) {
S32 i,j;
if(halt){
rGPBDAT = rGPBDAT &~(L3D | L3M | L3C) | L3C;
//L3C=H(while tstp, L3 interface halt condition)
for(j=0;j<4;j++); //tstp(L3) > 190ns
}
rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M); //L3M=H(in data transfer mode)
for(j=0;j<4;j++); //tsu(L3)D > 190ns
//GPB[4:2]=L3C:L3D:L3M
for(i=0;i<8;i++){
if(data & 0x1) { //if data's LSB is 'H'
rGPBDAT &= ~L3C; //L3C=L
rGPBDAT |= L3D; //L3D=H
for(j=0;j<4;j++); //tcy(L3) > 500ns
rGPBDAT |= (L3C | L3D); //L3C=H,L3D=H
for(j=0;j<4;j++); //tcy(L3) > 500ns
}
else{ //If data's LSB is 'L'
rGPBDAT &= ~L3C; //L3C=L
rGPBDAT &= ~L3D; //L3D=L
for(j=0;j<4;j++); //tcy(L3) > 500ns
rGPBDAT |= L3C; //L3C=H
rGPBDAT &= ~L3D; //L3D =L
for(j=0;j<4;j++); //tcy(L3) > 500ns
}
data >>= 1; //For check next bit
}
rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M); //L3M=H,L3C=H
}
本系统经过仿真实验,结果显示各项技术指标得以很好的实现。系统采用ARM9作为系统处理控制中心,应用智能卡和新型远程控制UHF无线发射技术,结合音频驱动报警功能,实现了智能化、性能优良、安全可靠、性价比高的防盗系统。课题现正向基于人体生物防盗方向发展,未来将增加指纹自动识别汽车防盗功能。
参考文献
[1] 蔚承英.基于GPRS 和嵌入式计算机的远程监控系统研究[J].无线通信技术,2007,16(4):47-48.
[2] 陆小锋.GPRS与GPS在汽车信息服务系统中的设计应用[J].微计算机信息,2005,21(3):188-189.
[3] Samsung Electronics CO.,Ltd.S3C2410X 32-Bit RISC microprocessor user’s manual[ol].2003.
[4] 熊茂华,杨震伦.ARM9嵌入式系统设计与开发应用[M].北京:清华大学出版社,2008:69-76.
[5] 刘守义.智能卡技术[M].西安:西安电子科技大学出版社,2007.