主机与射频读卡器的I2C通信方法和系统与流程

文档序号:14879301发布日期:2018-07-07 09:20阅读:176来源:国知局

本发明涉及通信技术领域,特别是涉及一种主机与射频读卡器的i2c通信方法和系统。



背景技术:

对外提供i2c接口的射频读卡器与主机的通信方式为i2c通信。

传统的射频读卡器与主机i2c通信时,一般都是给射频读卡器设定一个从机地址,主机通过从机地址去访问射频读卡器。i2c通信过程中,主机发送命令后,射频读卡器对每条命令都会有一条返回帧作为回应,然后主机读取整条返回帧并通过返回帧的数据来判断命令是否执行成功。因此,命令指令失败时,主机也需要读取返回帧的数据,通信效率低。



技术实现要素:

基于此,有必要针对上述问题,提供一种通信效率高的主机与射频读卡器的i2c通信方法和系统。

一种主机与射频读卡器的i2c通信方法,包括:

发送命令至射频读卡器,检测是否接收到所述射频读卡器根据所述命令返回的中断信号;

在接收到所述中断信号时,查询所述射频读卡器内部存储模块的状态子地址的值;

根据所述状态子地址的值判断所述射频读卡器是否成功执行完所述命令;

若是,则读取所述射频读卡器根据所述命令发送的返回数据。

一种主机与射频读卡器的i2c通信系统,包括:

命令发送模块,用于发送命令至射频读卡器,检测是否接收到所述射频读卡器根据所述命令返回的中断信号;

地址值获取模块,用于在接收到所述中断信号时,查询所述射频读卡器内部存储模块的状态子地址的值;

状态分析模块,用于根据所述状态子地址的值判断所述射频读卡器是否成功执行完所述命令;

数据接收模块,用于在所述射频读卡器成功执行完所述命令时,读取所述射频读卡器根据所述命令发送的返回数据。

上述主机与射频读卡器的i2c通信方法和系统,基于设置有状态子地址的射频读卡器实现,可应用于与射频读卡器通信的主机,通过发送命令至射频读卡器、接收到射频读卡器根据命令返回的中断信号时,查询射频读卡器内部存储模块的状态子地址的值,根据状态子地址的值判断射频读卡器是否成功执行完命令;在根据状态子地址的值判定射频读卡器已经成功执行完命令后,读取射频读卡器根据命令发送的返回数据。如此,通过主机在读取返回数据之前可根据状态子地址的值分析是否需要读取对应的返回数据,不需要对所有的返回数据进行无条件读取,可提高通信效率。

附图说明

图1为一实施例中主机与射频读卡器的i2c通信方法的流程图;

图2为另一实施例中主机与射频读卡器的i2c通信方法的流程图;

图3为一实施例中主机与射频读卡器的i2c通信系统的结构图;

图4为另一实施例中主机与射频读卡器的i2c通信系统的结构图。

具体实施方式

本发明的i2c通信的物理链路层是基于i2c的有器件子地址模式,射频读卡器内设有射频读卡器内部存储模块,用于存储多个子地址的值。本实施例中所述的射频读卡器,具体可以是指13.56mhz(兆赫兹)射频读卡器。

参考图1,一实施例中的主机与射频读卡器的i2c通信方法,基于设有子地址的射频读卡器,可以应用于主机,该方法包括如下步骤。

s110:发送命令至射频读卡器,检测是否接收到射频读卡器根据命令返回的中断信号。

射频读卡器接收到主机发送的命令后,会返回中断信号给主机,用于通知主机执行下一操作。

s120:在接收到中断信号时,查询射频读卡器内部存储模块的状态子地址的值。

射频读卡器内部存储模块存储有多个子地址的值,其中,子地址包括状态子地址。状态子地址的值用于表征射频读卡器的状态,状态子地址在射频读卡器内部存储模块内的地址编号可预先设置,本实施例中,状态子地址的地址编号为0x0101。若检测到接收中断信号,则查询状态子地址的值,从而获取射频读卡器当前的状态。

s130:根据状态子地址的值判断射频读卡器是否成功执行完命令。若是,则执行步骤s140。

状态子地址不同的值对应射频读卡器不同的状态,状态子地址的值与状态的对应关系可预先存储。查询状态子地址后,可根据状态子地址的值获取对应的状态,从而判断射频读卡器是否成功执行完命令。成功执行完命令,表示射频读卡器有执行命令且成功执行完成。

s140:读取射频读卡器根据命令发送的返回数据。

射频读卡器成功执行完命令后,可响应命令得到返回数据。主机检测到射频读卡器成功执行完命令后,可读取射频读卡器发送的返回数据,至此成功完成一次命令的响应操作。

上述主机与射频读卡器的i2c通信方法,基于设置有状态子地址的射频读卡器实现,可应用于与射频读卡器通信的主机,通过发送命令至射频读卡器、接收到射频读卡器根据命令返回的中断信号时,查询射频读卡器内部存储模块的状态子地址的值,根据状态子地址的值判断射频读卡器是否成功执行完命令;在根据状态子地址的值判定射频读卡器已经成功执行完命令后,读取射频读卡器根据命令发送的返回数据。如此,通过主机在读取返回数据之前可根据状态子地址的值分析是否需要读取对应的返回数据,不需要对所有的返回数据进行无条件读取,可提高通信效率。

在一实施例中,参考图2,步骤s130包括步骤s131和步骤s132。

s131:判断状态子地址的值是否与预设值一致。若是,则执行步骤s132。

预设值可以根据实际需要具体设置。例如,本实施例中,预设值为0x00。

s132:判定射频读卡器成功执行完命令。

射频读卡器成功执行完命令后,可将状态子地址的值置为预设值,因此主机可以通过判断状态子地址的值是否与预设值一致,从而分析是否成功执行完命令。通过采用将状态子地址的值与固定的预设值比较的方式进行判断,操作逻辑简单且准确性高。

在一实施例中,继续参考图2,步骤s130之后还包括步骤s150和步骤s160。

s150:若射频读卡器没有成功执行完命令,则判断状态子地址的值是否与预设的未执行状态值、预设的正执行状态值和预设的空闲状态值中的任一值一致。若是,则返回步骤s130。若否,则执行步骤s160。

未执行状态值用于表征射频读卡器未执行命令的状态,正执行状态值用于表征射频读卡器正在执行命令的状态,空闲状态值用于表征射频读卡器空前的状态。未执行状态值、正执行状态值和空闲状态值可根据实际需要具体设置,例如,本实施例中,未执行状态值为0x8d,正执行状态值为0x8c,空闲状态值为0x8a。

射频读卡器没有成功执行完命令,可能的情况包括射频读卡器还未执行命令、正在执行命令、空闲、执行命令失败,前三种状态对应为既没有成功执行完命令且没有执行失败的情况。若状态子地址的值与未执行状态值一致,则表示射频读卡器未执行命令;若状态子地址的值与正执行状态值一致,则表示射频读卡器正执行命令;若状态子地址的值与空闲状态值一致,则表示射频读卡器空闲。在判断到射频读卡器处于未执行命令、正执行命令、空闲三种状态中的任意一种时,均返回步骤s130,从而继续判断射频读卡器是否成功执行完命令,以便在射频读卡器状态更改时及时获取。

s160:判定射频读卡器执行命令失败。

若判断到射频读卡器没有成功执行完命令,且状态子地址的值与未执行状态值、正执行状态值和空闲状态值均不一致,则表示射频读卡器执行命令失败,此时,可直接按照错误流程处理即可,无需再读取返回数据。

步骤s150和步骤s160通过根据状态子地址的值将射频读卡器的状态分为多种情况,可提高状态判断的准确性,从而提高通信处理的准确性。

在一实施例中,请继续参考图2,步骤s140包括步骤s141至步骤s143。

s141:查询射频读卡器内部存储模块的帧长度子地址的值。

射频读卡器内部存储模块存储的子地址包括帧长度子地址,帧长度子地址的值用于表征数据帧长。帧长度子地址在射频读卡器内部存储模块内的地址编号可预先设置,本实施例中,帧长度子地址的地址编号为0x0102-0x0103,其中0x0102的值用于表征命令的帧长度,0x0103用于表征返回数据的帧长度。

s142:根据帧长度子地址的值获取对应的数据长度。

数据长度指返回数据对应的长度。帧长度子地址的值与数据长度存在预设的对应关系,根据帧长度子地址的值即可查找对应的数据长度。具体地,本实施例中,根据0x0103的值获取数据长度。

s143:从射频读卡器内部存储模块的数据子地址中,按照顺序读取数据长度对应的数据,得到返回数据。

射频读卡器内部存储模块存储的子地址包括数据子地址,数据子地址的值用于表征数据。数据子地址在射频读卡器内部存储模块的地址编号可预先设置,本实施例中,帧长度子地址的地址编号为0x0104~0x021d。根据数据长度可从数据子地址中读取对应的数据。

传统的射频读卡器返回数据过程,主机通过返回数据中的某一个或者几个字节来计算出返回数据的总长度,主机才知道要读取多少数据。这种方式下,主机在通过i2c通信读取返回数据时需要分段读取,先读出计算长度所需要的数据,然后再决定后续需要读取多长的数据,数据读取方式复杂。本实施例在i2c物理链路层中设计帧长子地址用来动态反馈每条返回数据的总长度,这样主机就可以通过读取数据长度就知道返回数据的帧长,从数据子地址中一次性将数据全部读出,而不必分段读取,简化数据读取,可进一步提高通信效率。

本实施例中,射频读卡器内部存储模块中各子地址为2字节,射频读卡器内部存储模块的空间为542字节,其中前256字节为保留使用,后286字节为命令帧/回应帧使用。射频读卡器内部存储模块的分配情况如下表1所示。

表1

在一实施例中,命令有多个,且各命令的预设字段的低4位为命令帧序号,返回数据中携带有对应命令的命令帧序号。

一个命令对应一个通信帧,一个通信帧对应有多个字段。本实施例将命令对应通信帧中的某一个字段作为预设字段,预设字段的低4位作为命令帧序号。射频读卡器发送对应命令的返回数据时,同样将对应的命令帧序号携带于返回数据中。

步骤s140之后,还包括步骤(a1)至步骤(a3)。

步骤(a1):获取命令的命令帧序号和返回数据的命令帧序号。

步骤(a2):判断各命令的命令帧序号是否均有对应的返回数据的命令帧序号。若否,则执行步骤(a3)。

命令的命令帧序号有对应的返回数据的命令帧序号,表示接收到的返回数据中,有返回数据的命令帧序号与命令的命令帧序号相同。若命令的命令帧序号没有对应的返回数据的命令帧序号,则表示接收到的所有返回数据的命令帧序号中,没有与命令的命令帧序号相同的命令帧序号。

步骤(a3):查找没有对应返回数据的命令帧序号的命令,判定查找的命令对应的数据包丢失。

若命令没有对应返回数据的命令帧序号,则表示该命令没有被射频读卡器执行,此时判定该命令的数据包丢失,即出现丢包现象。

传统的i2c通信协议中都是定义一个字节来保存通信帧的包号,这样使得通信帧额外多了一个字节。本实施例中,通过将预设字段的低4位作为命令帧序号,和另外一种数量有限的功能参数合并到一个字节中,不需要专门设计一个字节用于标识命令帧序号,这样即可缩短通信帧长度,同时可提高通信效率。

本实施例中,预设字段为smcseq,smcseq的高4位作为报文控制功能,而低4位作为命令帧序号,通信帧的格式定义如下表2所示。

表2

参考图3,一实施例中的主机与射频读卡器的i2c通信系统,包括命令发送模块110、地址值获取模块120、状态分析模块130和数据接收模块140。

命令发送模块110用于发送命令至射频读卡器,检测是否接收到射频读卡器根据命令返回的中断信号。

地址值获取模块120用于在接收到中断信号时,查询射频读卡器内部存储模块的状态子地址的值。

状态分析模块130用于根据状态子地址的值判断射频读卡器是否成功执行完命令。

数据接收模块140用于在射频读卡器成功执行完命令时,读取射频读卡器根据命令发送的返回数据。

上述主机与射频读卡器的i2c通信系统,基于设置有状态子地址的射频读卡器实现,可应用于与射频读卡器通信的主机,通过命令发送模块110发送命令至射频读卡器、并检测是否接收到射频读卡器返回的终端信号,地址值获取模块120在接收到射频读卡器返回的中断信号时,查询射频读卡器内部存储模块的状态子地址的值,状态分析模块130根据状态子地址的值判断射频读卡器是否成功执行完命令;数据接收模块140在射频读卡器已经成功执行完命令后,读取射频读卡器根据命令发送的返回数据。如此,通过主机在读取返回数据之前可根据状态子地址的值分析是否需要读取对应的返回数据,不需要对所有的返回数据进行无条件读取,可提高通信效率。

在一实施例中,状态分析模块130具体用于:判断状态子地址的值是否与预设值一致;若是,则判定射频读卡器成功执行完命令。

通过采用将状态子地址的值与固定的预设值比较的方式进行判断,操作逻辑简单且准确性高。

在一实施例中,参考图4,上述主机与射频读卡器的i2c通信系统还包括循环检测模块150,用于在射频读卡器没有成功执行完命令时,判断状态子地址的值是否与预设的未执行状态值、预设的正执行状态值和预设的空闲状态值中的任一值一致;若是,则控制状态分析模块130再次根据状态子地址的值判断射频读卡器是否成功执行完命令;若否,则判定射频读卡器执行命令失败。

通过根据状态子地址的值将射频读卡器的状态分为多种情况,可提高状态判断的准确性,从而提高通信处理的准确性。

在一实施例中,数据接收模块140具体用于:查询射频读卡器内部存储模块的帧长度子地址的值;根据帧长度子地址的值获取对应的数据长度;从射频读卡器内部存储模块的数据子地址中,按照顺序读取数据长度对应的数据,得到返回数据。

通过设计帧长子地址用来动态反馈每条返回数据的总长度,这样主机就可以通过读取数据长度就知道返回数据的帧长,从数据子地址中一次性将数据全部读出,而不必分段读取,简化数据读取,可进一步提高通信效率。

在一实施例中,命令有多个,且各命令的预设字段的低4位为命令帧序号,返回数据中携带有对应命令的命令帧序号。本实施例中,主机与射频读卡器的i2c通信系统还包括包丢失检测模块(图未示),用于在数据接收模块140接收返回数据后,获取命令的命令帧序号和返回数据的命令帧序号;判断各命令的命令帧序号是否均有对应的返回数据的命令帧序号;若否,则查找没有对应返回数据的命令帧序号的命令,判定查找的命令对应的数据包丢失。

通过将预设字段的低4位作为命令帧序号,和另外一种数量有限的功能参数合并到一个字节中,在不需要专门设计一个字节用于标识命令帧序号,这样即可缩短通信帧长度,同时可提高通信效率。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1