一种智能读写器和智能卡之间的通信方法及系统的制作方法

文档序号:6622257阅读:147来源:国知局
一种智能读写器和智能卡之间的通信方法及系统的制作方法
【专利摘要】本发明涉及一种智能读写器和智能卡之间的通信方法及系统,通过在驱动模块申请一个通信缓存buffer,将该通信缓存buffer映射到应用模块,应用模块通过建立的映射直接访问驱动模块的通信缓存生成命令数据以及读取智能卡返回的响应数据,使得应用可以像读写自己的其它用户空间一样读写这段通信缓存buffer,有效地简化了通信过程,避免命令数据和响应数据在应用模块和驱动模块之间的频繁拷贝,减少了对内存的读写次数,提高了系统运行的空间效率;且本发明将通信缓存buffer固定于物理DRAM中,能够有效避免该在访问通信缓存buffer时遭遇缺页异常,减轻CPU处理异常的系统开销,提高了系统运行的时间效率。
【专利说明】一种智能读写器和智能卡之间的通信方法及系统

【技术领域】
[0001]本发明涉及通信领域,尤其涉及一种智能读写器和智能卡之间的通信方法及系统。

【背景技术】
[0002]智能卡读写器和智能卡之间通信要求符合10S7816协议,一般是以读写器发送命令,智能卡返回应答的模式进行。这就是二者之间通信的含义。
[0003]众所周知,Iinux平台的智能卡读写器,其通信最终必须落实到应用(AppIicat1n)和智能卡之间通信才行,才具有商用价值。而应用和智能卡之间通信要经过Linux Kernel, Driver,读写器硬件这几道环节。
[0004]应用和智能卡通信可以说是这个系统的主要活动和主要工作内容,进一步来说是应用与驱动的通信,因此必须小心处理,才能提高整个系统的可靠性和性能。
[0005]任何一个智能卡读写器开发者在处理通信问题时都会面临如下一些难题:
[0006]现有技术中Linux应用和智能卡通信面临如下问题:
[0007]1.1S07816协议以及读卡器芯片私有协议和智能卡私有协议非常庞大,很多协议信息驱动层无法决定取舍,如果不小心遗漏有用信息则影响应用的正确性,如果全部处理并通知应用层则会使驱动变得异常复杂;
[0008]2.涉及到驱动和应用的通信,如果处理不好很可能引起缺页异常从而阻塞应用;
[0009]3.如果频繁使用内核函数copy_from_user、copy_to_user则会引起很大的系统开销,使得CPU用于处理有效事务的时间减少。


【发明内容】

[0010]本发明所要解决的技术问题是针对现有技术的不足,提供一种智能读写器和智能卡之间的通信方法及系统。
[0011]本发明解决上述技术问题的技术方案如下:一种智能读写器和智能卡之间的通信方法,包括如下步骤:
[0012]步骤1:在智能读写器的驱动模块中申请一块内存空间作为存储协议数据的通信缓存 buffer ;
[0013]步骤2:利用智能读写器的内核模块的内核函数将通信缓存buffer固定于物理DRAM 中;
[0014]步骤3:内核模块对通信缓存buffer进行映射处理,使之映射到应用模块;
[0015]步骤4:智能读写器的应用模块通过建立的映射访问驱动模块的通信缓存buffer,并生成生令数据;
[0016]步骤5:所述驱动模块将生产的命令数据通过读写器硬件模块发送给智能卡;
[0017]步骤6:智能卡将响应数据返回给读写器硬件,驱动模块将响应数据从读写器硬件读入到通信缓存buffer中;
[0018]步骤7:所述应用模块通过建立的映射访问驱动模块的通信缓存buffer,从中读取响应数据。
[0019]本发明的有益效果是:本发明通过在驱动模块申请一个通信缓存buffer,将该通信缓存buffer映射到应用模块,应用模块通过建立的映射直接访问驱动模块的通信缓存生成命令数据以及读取智能卡返回的响应数据,使得应用可以像读写自己的其它用户空间一样读写这段通信缓存buffer,有效地简化了通信过程,避免命令数据和响应数据在应用和驱动的频繁拷贝,减少了对内存的读写次数,提高了系统运行的空间效率;且本发明将通信缓存buffer固定于物理DRAM中,能够有效避免该buffer被Linux的内存管理模块交换到磁盘中以致在访问这个通信缓存buffer时遭遇缺页异常,从而使得CPU处理系统异常的开销减少,而CPU用于处理有效事务的时间增加,提高了系统运行的时间效率。
[0020]在上述技术方案的基础上,本发明还可以做如下改进。
[0021]进一步,所述通信缓存buffer包括协议数据域和长度域。
[0022]采用上述进一步方案的有益效果:不仅包括协议数据域还包括长度域,通过长度域可以快速确定有效数据的数目。
[0023]进一步,所述协议数据域的大小根据系统要求不同而不同,长度域大小为4Byte。
[0024]采用上述进一步方案的有益效果:既能正确地处理智能卡和读卡器的通信数据不至于丢失数据,又能节约内存,而长度域为4Byte,其表示数据长度的范围足够涵盖目前市面上能买到的一切智能卡产品和读写器硬件产品,且为将来扩展留出了足够的冗余量。
[0025]进一步,步骤4中生成命令数据的具体实现为:
[0026]步骤4.1:在通信缓存buffer的协议数据域中自低地址向高地址拼凑命令数据;
[0027]步骤4.2:将拼凑好的命令数据的真实长度计算出来填充到长度域中;
[0028]步骤4.3:应用模块通过内核模块的1ctlO编程接口向驱动模块发送执行命令,进而驱动模块从通信缓存buffer的长度域中读取命令数据的长度值X ;
[0029]步骤4.4:驱动模块从协议数据域的低地址开始依次读取X个Byte,通过读写器硬件模块发送给智能卡。
[0030]采用上述进一步方案的有益效果:所述内核模块提供1ctlO编程接口,以方便应用模块向驱动模块发送命令,实现操作该1ctl O编程接口和通信缓存buffer配合完成应用和驱动的工作配合,实现高效率的命令交互。
[0031]进一步,步骤6中智能卡将响应数据通过读写器硬件模块写入驱动模块的通信缓存buffer中的具体实现为:
[0032]步骤6.1:智能卡将响应数据发送给智能卡读写器的读写器硬件模块;
[0033]步骤6.2:驱动模块从读写器硬件模块读取响应数据长度值A,并填写到通信缓存buffer的长度域中;
[0034]步骤6.3:驱动模块将响应数据按照地址自低到高依次从读写器硬件拷贝到通信缓存buffer的协议数据域中。
[0035]采用上述进一步方案的有益效果:将响应数据从智能卡读取到通信缓存buffer,从而使得系统利用这些响应数据成为可能。
[0036]进一步,步骤7的中应用模块读取响应数据的具体实现为:
[0037]步骤7.1:应用模块通过建立的映射访问驱动模块的通信缓存buffer ;
[0038]步骤7.2:从通信缓存buffer的长度域中读取响应数据长度值A ;
[0039]步骤7.3:从通信缓存buffer的协议数据域读取AByte响应数据。
[0040]采用上述进一步方案的有益效果:应用读取这些响应数据,从而获得有用信息,获得智能卡执行命令的结果,判断智能卡的当前状态,从而决定下一步操作。
[0041]本发明解决上述技术问题的另一技术方案如下:一种智能读写器和智能卡之间的通信系统,包括智能卡读写器和智能卡,所述智能卡读写器包括应用模块、内核模块、驱动模块和读写器硬件模块;
[0042]所述应用模块,其用于通过与驱动模块的通信缓存buffer建立映射关系,通过建立的映射直接访问驱动模块的通信缓存buffer,进而生成命令数据或者读取智能卡返回的响应数据;
[0043]所述内核模块,其用于利用内核函数将通信缓存buffer固定于物理DRAM中,还用于对驱动模块的通信缓存buffer进行映射处理,使之映射到应用模块;
[0044]所述驱动模块,其用于提供一块内存空间作为存储协议数据的通信缓存buffer,为应用模块产生的命令数据以及智能卡返回的响应数据提供读写空间;
[0045]所述硬件模块,其用于将通信缓存buffer中生产的命令数据发送给智能卡,还用于接收智能卡发送的响应数据,并由驱动模块将响应数据从硬件模块读入到通信缓存buffer 中 ο
[0046]进一步,所述通信缓存buffer包括协议数据域和长度域。
[0047]进一步,所述协议数据域的大小根据系统要求不同而不同,长度域大小为4Byte。

【专利附图】

【附图说明】
[0048]图1为本发明所述一种智能读写器和智能卡之间的通信系统框图;
[0049]图2为本发明所述一种智能读写器和智能卡之间的通信方法流程图;
[0050]图3为通信缓存buffer的数据结构;
[0051]图4为生成命令数据时的通信缓存buffer ;
[0052]图5为写入响应数据时的通信缓存buffer。
[0053]附图中,各标号所代表的部件列表如下:
[0054]100、智能卡读写器,200、智能卡,101、应用模块,102、内核模块,103、驱动模块,104、读写器硬件模块。

【具体实施方式】
[0055]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0056]如图1所示,一种智能读写器和智能卡之间的通信系统,包括智能卡读写器100和智能卡200,所述智能卡读写器100包括应用模块101、内核模块102、驱动模块103和读写器硬件模块104 ;所述应用模块101,其用于通过与驱动模块103的通信缓存buffer建立映射关系,通过建立的映射直接访问驱动模块103的通信缓存buffer,进而生成命令数据或者读取智能卡返回的响应数据;所述内核模块102,其用于利用内核函数将通信缓存buffer固定于物理DRAM中,还用于对驱动模块103的通信缓存buffer进行映射处理,使之映射到应用模块101 ;所述驱动模块103,其用于提供一块内存空间作为存储协议数据的通信缓存buffer,为应用模块产生的命令数据以及智能卡返回的响应数据提供读写空间;所述硬件模块104,其用于将通信缓存buffer中生产的命令数据发送给智能卡200,还用于接收智能卡200发送的响应数据,并由驱动模块103将响应数据从硬件模块104读入到通信缓存buffer中。
[0057]在驱动模块申请一块申请一块内存空间作为存储协议数据的通信缓存buffer,可有效避免使用copy_from_user(), copy_to_user O来完成应用模块和驱动模块间的通信,降低系统开销。
[0058]如图2所示,一种智能读写器和智能卡之间的通信方法,包括如下步骤:
[0059]步骤1:在驱动模块中申请一块内存空间作为存储协议数据的通信缓存buffer ;
[0060]步骤2:利用内核模块的内核函数将通信缓存buffer固定于物理DRAM中;
[0061]步骤3:内核模块对通信缓存buffer进行映射处理,使之映射到应用模块;
[0062]步骤4:应用模块通过建立的映射访问驱动模块的通信缓存buffer,并生产生令数据;
[0063]步骤5:驱动模块将生产的命令数据通过读写器硬件模块发送给智能卡;
[0064]步骤6:智能卡将响应数据返回给读写器硬件,驱动模块将响应数据从读写器硬件读入到通信缓存buffer中;
[0065]步骤7:应用模块通过建立的映射访问驱动模块的通信缓存buffer,从中读取响应数据。
[0066]所述步骤2中,使用SetPageReservedO内核函数将通信缓存buffer固定于物理DRAM中。步骤3中使用_ap()内核函数将通信缓存buffer映射到应用模块。
[0067]如图3所示,所述通信缓存buffer包括协议数据域和长度域。该通信缓存buffer不仅包括协议数据域还包括长度域,通过长度域可以快速确定有效数据的数目。所述协议数据域的大小根据系统要求不同而不同,长度域大小为4Byte。
[0068]图4所示为生成命令数据时的通信缓存buffer。
[0069]步骤4中生成命令数据的具体实现为:
[0070]步骤4.1:在通信缓存buffer的协议数据域中自低地址向高地址拼凑命令数据;
[0071]步骤4.2:将拼凑好的命令数据的真实长度计算出来填充到长度域中;
[0072]步骤4.3:应用模块通过内核模块的1ctlO编程接口向驱动模块发送执行命令,进而驱动模块从通信缓存buffer的长度域中读取命令数据的长度值X ;
[0073]步骤4.4:驱动模块从协议数据域的低地址开始依次读取X个Byte,通过读写器硬件模块发送给智能卡。
[0074]图5为写入响应数据时的通信缓存buffer。
[0075]步骤6中智能卡将响应数据通过读写器硬件模块写入驱动模块的通信缓存buffer中的具体实现为:
[0076]步骤6.1:智能卡将响应数据发送给智能卡读写器的读写器硬件模块;
[0077]步骤6.2:驱动模块从读写器硬件模块读取响应数据长度值A,并填写到通信缓存buffer的长度域中;
[0078]步骤6.3:驱动模块将响应数据按照地址自低到高依次从读写器硬件拷贝到通信缓存buffer的协议数据域中。
[0079]步骤7的中应用模块读取响应数据的具体实现为:
[0080]步骤7.1:应用模块通过建立的映射访问驱动模块的通信缓存buffer ;
[0081]步骤7.1:从通信缓存buffer的长度域中读取响应数据长度值A ;
[0082]步骤7.2:从通信缓存buffer的协议数据域读取AByte响应数据。
[0083]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种智能读写器和智能卡之间的通信方法,其特征在于,包括如下步骤: 步骤1:在智能读写器的驱动模块中申请一块内存空间作为存储协议数据的通信缓存buffer ; 步骤2:利用智能读写器的内核模块的内核函数将通信缓存buffer固定于物理DRAM中; 步骤3:内核模块对通信缓存buffer进行映射处理,使之映射到应用模块; 步骤4:智能读写器的应用模块通过建立的映射访问驱动模块的通信缓存buffer,并生成生令数据; 步骤5:所述驱动模块将生产的命令数据通过读写器硬件模块发送给智能卡; 步骤6:智能卡将响应数据返回给读写器硬件,驱动模块将响应数据从读写器硬件读入到通信缓存buffer中; 步骤7:所述应用模块通过建立的映射访问驱动模块的通信缓存buffer,从中读取响应数据。
2.根据权利要求1所述一种智能读写器和智能卡之间的通信方法,其特征在于,所述通信缓存buffer包括协议数据域和长度域。
3.根据权利要求2所述一种智能读写器和智能卡之间的通信方法,其特征在于,所述协议数据域的大小根据系统要求不同而不同,长度域大小为4Byte。
4.根据权利要求1所述一种智能读写器和智能卡之间的通信方法,其特征在于,步骤4中生成命令数据的具体实现为: 步骤4.1:在通信缓存buffer的协议数据域中自低地址向高地址拼凑命令数据; 步骤4.2:将拼凑好的命令数据的真实长度计算出来填充到长度域中; 步骤4.3:应用模块通过内核模块的编程接口向驱动模块发送执行命令,进而驱动模块从通信缓存buffer的长度域中读取命令数据的长度值X ; 步骤4.4:驱动模块从协议数据域的低地址开始依次读取X个Byte,通过读写器硬件模块发送给智能卡。
5.根据权利要求1所述一种智能读写器和智能卡之间的通信方法,其特征在于,步骤6中智能卡将响应数据通过读写器硬件模块写入驱动模块的通信缓存buffer中的具体实现为: 步骤6.1:智能卡将响应数据发送给智能卡读写器的读写器硬件模块; 步骤6.2:驱动模块从读写器硬件模块读取响应数据长度值A,并填写到通信缓存buffer的长度域中; 步骤6.3:驱动模块将响应数据按照地址自低到高依次从读写器硬件拷贝到通信缓存buffer的协议数据域中。
6.根据权利要求1或2所述一种智能读写器和智能卡之间的通信方法,其特征在于,步骤7中应用模块读取响应数据的具体实现为: 步骤7.1:应用模块通过建立的映射访问驱动模块的通信缓存buffer ; 步骤7.2:从通信缓存buffer的长度域中读取响应数据长度值A ; 步骤7.3:从通信缓存buffer的协议数据域读取A Byte响应数据。
7.一种智能读卡器和智能卡之间的通信系统,其特征在于,包括智能卡读写器和智能卡,所述智能卡读写器包括应用模块、内核模块、驱动模块和读写器硬件模块; 所述应用模块,其用于通过与驱动模块的通信缓存buffer建立映射关系,通过建立的映射直接访问驱动模块的通信缓存buffer,进而生成命令数据或者读取智能卡返回的响应数据; 所述内核模块,其用于利用内核函数将通信缓存buffer固定于物理DRAM中,还用于对驱动模块的通信缓存buffer进行映射处理,使之映射到应用模块; 所述驱动模块,其用于提供一块内存空间作为存储协议数据的通信缓存buffer,为应用模块产生的命令数据以及智能卡返回的响应数据提供读写空间; 所述硬件模块,其用于将通信缓存buffer中生产的命令数据发送给智能卡,还用于接收智能卡发送的响应数据,并由驱动模块将响应数据从硬件模块读入到通信缓存buffer中。
8.根据权利要求7所述一种智能读写器和智能卡之间的通信系统,其特征在于,所述通信缓存buffer包括协议数据域和长度域。
9.根据权利要求8所述一种智能读写器和智能卡之间的通信系统,其特征在于,所述协议数据域的大小根据系统要求不同而不同,长度域大小为4Byte。
【文档编号】G06K17/00GK104166864SQ201410377169
【公开日】2014年11月26日 申请日期:2014年8月1日 优先权日:2014年8月1日
【发明者】张华
申请人:北京民芯科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1