基于ARM平台的RFID系统设计与实现
4.2 LINUX 驱动程序的编写
我们研究字符型设备的驱动程序的编写,块设备驱动程序跟字符设备驱动程序的编写有一定的相似性。
驱动程序加载时,内核会调用用户定义的初始化程序。用户用init_moudle(function name)标识初始化程序,其中的function name为编写的初始化函数的函数名。用module_exit(function name) 标识释放设备程序,在初始化函数里驱动程序必须向操作系统注册设备,以获得系统资源和操作系统正确的调用驱动程序。在Linux中这个函数是register_chrdev,在fs/devices.h中其定义为:int register_chrdev(unsigned int major,const char* name,struct file_operation *fops)。
其中major是为设备向系统申请的主设备号,name驱动程序给设备定义的名字,fops是接下来要介绍的一个结构体。在卸载的时候需要告知操作系统注销注册[5]。
下面简要介绍一下file_operation结构体中几个主要的比较常用的方法。
1. ssize_t (*read) (struct file *, char *, size_t, loff_t *);用来从设备中读取数据。
2. ssize_t (*write) (struct file *, const char *, size_t, loff_t *);向设备发送数据。
3. int (*ioctl) (struct inode *,struct file *,unsigned int,unsigned long);系统调用ioctl提供了一种执行设备特定的命令的方法(如格式化软盘某个磁道,这既不是读操作也不是写操作)。
4. int (*open) (struct inode *, struct file *);始终是对设备文件执行的第一个操作。
5. int (*release) (struct inode *, struct file *);当file 结构被释放时,将调用这个操作。
4.3 RFID 程序的编写
本系统采用的RFID 芯片是SONY 生产的RC-S600,它有自己的通信协议,并支持串口或者USB 口直接连接。这就大大方便了系统的开发与应用。由于本系统采用的是标准串口连接方式,因此针对应用程序的要求,我们首先要提供一套关于串口的API 接口函数。
1. int PortOpen(pportinfo_t pportinfo); 打开串口,返回文件描述符。pportinfo: 待设置的串口信息。
2. int PortSet(int fdcom, const pportinfo_t pportinfo);设置串口。fdcom: 串口文件描述符,pportinfo: 待设置的串口信息。
3. void PortClose(int fdcom);关闭串口。fdcom:串口文件描述符。
4. int PortSend(int fdcom, char *data, int datalen);发送数据。fdcom:串口描述符,data:待发送数据,datalen:数据长度。返回实际发送长度 。
5. int PortRecv(int fdcom, char *data, int datalen, int baudrate); 接收数据。fdcom:串口描述符,data:接收缓冲区,datalen.:接收长度, baudrate:波特率。返回实际读入的长度。
完成了串口通信的基本函数后,可以通过由串口向RFID芯片发送命令字进行控制,以下为RC-S600的Command说明:1. Polling Command。从指定了System Code的卡里,取得制造ID(IDm)和制造Parameter(PMm)的指令。2. Diagnose R/W 。RC-S600系列进行自我诊断,取得诊断结果的指令。3. Turn off RF Power。将RC-S600系列的RF输出置于Off;4. Check Firmware Version。取得RC-S600系列的Software的版本号;5. Control LED。对连接到RC-S600的LED进行On/Off;6.Communication Thru。对卡发送1次host指定Command,根据是否从卡收到Response,向host返回该Card Response Packet;7. Access I/O Register。对RC-S600系列的RF进行初期设定。
经测试,本系统能对所用RFID芯片的指定命令字进行正确读写和返回。
5. 结论
本文给出了一种基于ARM 平台的RFID 系统设计,现已通过实际测试。由于本系统采用的是标准接口设计,这就为以后的多功能开发平台提供了理想的硬件环境。
参考文献:
[1].MT48LC2M32B2TG-6datasheethttp://www.dzsc.com/datasheet/MT48LC2M32B2TG-6_1054742.html.
[2].RTL8201datasheethttp://www.dzsc.com/datasheet/RTL8201_586322.html.
[3].AT91RM9200datasheethttp://www.dzsc.com/datasheet/AT91RM9200_[4].2N7000datasheethttp://www.dzsc.com/datasheet/2N7000_38377.html.
[5].LM7812datasheethttp://www.dzsc.com/datasheet/LM7812_843716.html.
[6].LM555datasheethttp://www.dzsc.com/datasheet/LM555_451680.html.
[7].PCBdatasheethttp://www.dzsc.com/datasheet/PCB_1201640.html.
[8].majordatasheethttp://www.dzsc.com/datasheet/major_2533383.html.
关键词: ARM平台 RFID系统 AT91RM9200
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码