3.1 概述
NCI 核心包括以下必需的功能:
通过 NCI 传输命令、响应、通知和数据消息的数据包格式。
用于设备主机和 NFC 控制器之间不同操作(第 4 节中指定)的命令、响应和通知的定义。 (本规范后面的一些部分定义了不属于 NCI 核心一部分的附加命令、响应和通知。)
命令/响应消息交换的流量控制机制。
数据消息的逻辑连接概念。
针对从 DH 发送到 NFCC 的数据消息的基于信用的流量控制机制。
控制和数据消息的分段和重组。
NFC 执行环境 (NFCEE) 的寻址方案。
NCI 核心支持连接到 NFCC 的 DH 和 NFCEE 之间的通信。
注意 NCI 仅覆盖 DH 和 NFCC 之间的链路,因此只有当 NFCC 和 NFCEE 之间使用的协议也支持时,才可能实现从 DH 到 NFCEE 的通信。
远程 NFC 端点的寻址方案。 NCI 核心使用逻辑连接来支持 DH 和由 NFCC 发现的目标(NFCEE 或远程 NFC 端点)之间的通信。
NFCC 的重置、初始化和配置。
异常处理,包括用于指示错误的控制消息以及如何使用它们的规则。
3.2 NCI控制消息
控制消息包含命令、响应和通知。 它们控制 DH 和 NFCC 之间的交互。 参见图 4。
DH 可以发送命令来指示 NFCC 执行特定操作。 对于收到的每个命令,NFCC 应回复一个响应以确认收到命令。 响应还可以表明命令在 NFCC 中引起的变化。
通知只能从 NFCC 发送至 DH。 可以发送通知来传递与命令相关的附加信息。 除非另有说明,通知还可以独立于任何命令或响应而发送。
控制消息的有效负载作为控制数据包的有效负载通过 NCI 传输发送。 控制数据包有效负载包含控制消息有效负载的完整或片段。
DH 和 NFCC 均应能够支持有效负载为 255 个八位位组的控制消息,这是任何控制消息有效负载的最大大小。
控制数据包的最大有效负载长度也是 255 个八位位组。 DH 应能够接收具有 255 个八位字节有效负载的控制数据包。 然而,NFCC 可以指定较小的最大控制数据包有效负载大小,如参数最大控制数据包有效负载大小所定义。 参见第 4.2 节。
因此,当通过 NCI 发送时,控制消息可以分段为多个控制数据包(如第 3.5 节所述)。
3.2.1 控制消息的流量控制
DH 和 NFCC 可以根据需要通过 NCI 以任意数量的数据包发送完整的控制消息。 NCI 中的控制消息没有基于数据包的流量控制
以下流量控制规则适用于控制消息:
发送命令后,DH 不得发送任何命令,直到收到该命令的响应,或者直到它采取措施恢复与 NFCC 交换消息的能力(如果它确定等待时间过长)。
发送命令后,DH 应能够接收响应。
发送响应后,NFCC 应准备好接收来自 DH 的下一个命令。
DH 应能够随时收到 NFCC 的通知。
3.2.2 控制消息的异常处理
本节中的规则定义了错误控制消息的接收者要执行的异常处理。
DH 收到的任何命令均应被忽略。 NFCC 收到的任何响应或通知均应被忽略。
与本规范一致的控制消息,除了末尾存在附加字节之外,不应被视为语法错误,但附加字节应被忽略。
在控制消息有语法错误的所有其他情况下,这意味着控制数据包的编码与本规范不一致,并且接收者仍然可以确定控制消息的类型:
如果控制消息是命令,NFCC 应忽略命令的内容,并发送具有与命令中相同的组标识符(GID)和操作码标识符(OID)字段值以及状态值 STATUS_SYNTAX_ERROR 的响应。 响应不应包含任何附加字段。
如果控制消息是响应,DH 应忽略响应的内容并可以自由发送另一个命令。
如果控制消息是通知,DH 应忽略该通知。
如果控制消息有语义错误,这意味着在不期望的情况下收到了具有有效语法的控制消息:
DH 应忽略意外的响应或通知。
意外命令不应导致 NFCC 采取任何行动。 除非另有规定,NFCC 应发送状态值为 STATUS_SEMANTIC_ERROR 且无附加字段的响应。
NFCC 应使用具有与命令相同的 GID 和 OID 字段值的响应来响应未知命令(未知的 GID 或 OID),后跟具有 STATUS_SYNTAX_ERROR 值的状态字段,并且没有其他字段。
DH 应忽略任何未知的响应或通知(未知的 GID 或 OID)。
使用专有通知的 NFCC 实现应该考虑到以下事实:任何不支持这些专有扩展的 DH 将默默地丢弃通知。
如果 NFCC 无法执行有效命令中请求的操作,NFCC 应使用具有表 129 中定义的状态字段值之一的响应来通知 DH。为每个响应指定允许的状态值。 无法执行命令的原因可能是缓冲区溢出、处理能力有限、资源有限等。
如果 DH 确定在发送命令后等待响应的时间过长,可能表明失去了与 NFCC 交换消息的能力,则它可以采取带外措施来恢复通信。
注:此类措施(可能包括 NFCC 的硬重置或电源循环)超出了本规范的范围。
3.3 NCI 数据消息
数据消息用于通过 DH 和 NFCC 目标(NFCEE 或远程 NFC 端点)之间的逻辑连接交换数据。 参见图 5。
数据消息有效负载作为一个或多个数据包有效负载通过 NCI 传输发送。 数据包有效负载包含完整的数据消息有效负载或数据消息有效负载的一部分。
创建逻辑连接后,数据消息可以随时由 DH(受流量控制)或 NFCC 发送。
DH 应能够支持由NFCC 发送的任何数据消息有效负载大小(假设DH 能够处理从本地NFCEE 或远程NFC 端点接收的任何数据)。 在任何时候,NFCC 能够接收的逻辑连接最大数据大小由静态 RF 连接(参见第 7.3 节)或动态逻辑连接(参见第 7.3 节)情况下 RF 接口激活期间宣布的最大数据包有效负载大小定义。 参见第 4.4 节),乘以 NFCC 为该连接提供的未使用积分数。
数据包的最大有效负载为 255 个八位位组。 DH 应能够接收具有 255 个八位字节有效负载的数据包。 然而,NFCC 可以在逻辑连接的基础上指定较小的最大数据包有效负载大小。
DH 不应发送有效负载长度超过在创建相应逻辑连接期间宣布的最大数据包有效负载大小的数据包。
3.3.1 数据包的流量控制
基于信用的数据流控制机制是为从 DH 发送到 NFCC 的数据定义的,并且可以由 NFCC 调用以消除缓冲区溢出情况。 假设 DH 有足够的缓冲来处理从 NFCC 发送的所有数据,因此在该方向上不支持基于信用的流量控制。
基于信用的流量控制机制适用于数据包。 每个数据包(可以包含完整的数据消息或数据消息的一部分)需要一个积分。
在连接建立期间,按逻辑连接配置流量控制(有关静态 RF 连接,请参阅第 7.3 节;有关动态逻辑连接,请参阅第 4.4 节)。 对于每个逻辑连接并使用不同的参数,它可能会以不同的方式启用或禁用。
DH 应支持基于信用的流量控制,尽管 NFCC 可以要求 DH 使用流量控制。
4.4.4节规定了基于信用的流量控制机制的规范规则。
3.3.2 数据消息的异常处理
本节中的规则定义了错误数据消息的接收者要执行的异常处理。
如果数据消息存在语法错误,这意味着数据消息或传输数据消息的任何数据包的编码与本规范不一致(包括数据包有效负载内字段编码的任何定义) 对于当前活动的 RF 接口,如第 8 节中所定义):
如果接收方是NFCC,则它应发送状态值为STATUS_SYNTAX_ERROR 的CORE_INTERFACE_ERROR_NTF 消息。
如果接收方是 DH,则它应忽略数据消息。
3.4 数据包格式
3.4.1 公共包头
所有数据包都有一个公共标头,由消息类型 (MT) 字段和数据包边界标志 (PBF) 字段组成,如图 6 所示。
消息类型 (MT)
MT 字段指示数据包的内容,并且应为包含表 2 中列出的值之一的 3 位字段。信息字段的内容取决于 MT 字段的值。 指定为 RFU 的 MT 的接收者应默默地丢弃该数据包。
数据包边界标志 (PBF)
数据包边界标志(PBF)用于分段和重组,并且应是包含表 3 中列出的值之一的 1 位字段。
以下规则适用于数据包中的 PBF 标志:
如果数据包包含完整的消息,则 PBF 应设置为 0b。
如果数据包包含分段消息的最后一段,则 PBF 应设置为 0b。
如果数据包不包含分段消息的最后一个分段,则 PBF 应设置为 1b。
有关分段和重组的更多详细信息,请参阅第 3.5 节。
3.4.2 控制报文格式
控制数据包结构详见图 7。
每个控制数据包应具有 3 个八位字节的数据包标头,并且可以具有用于携带控制消息有效负载或控制消息有效负载片段的附加有效负载。
注:在“空”控制消息的情况下,仅发送数据包标头。
消息类型 (MT)
MT字段的详细信息请参见表2。
数据包边界标志 (PBF)
PBF字段的详细信息请参见表3。
组标识符 (GID)
NCI 支持根据各自组进行分类的命令、响应和通知。 组标识符(GID)指示消息的分类,并且应是包含表 139 中列出的值之一的 4 位字段。
操作码标识符 (OID)
操作码标识符(OID)指示控制消息的标识,并且应该是一个 6 位字段,它是组内一组命令、响应或通知消息的唯一标识。 OID 值与表 139 中描述的相应控制消息的定义一起定义。
有效负载长度(L)
有效负载长度应指示有效负载中存在的八位字节数。 有效负载长度字段应为 8 位字段,包含 0 到 255 之间的值。
3.4.3 Format of Data Packets
The Data Packet structure is detailed in Figure 8.
每个数据包应具有 3 个八位字节的包头,并且可以具有用于携带数据消息有效负载或数据消息有效负载片段的附加有效负载。
注:在“空”数据消息的情况下,仅发送数据包标头。
消息类型(MT) MT字段的详细信息请参见表2。
注 MT 始终包含 000b 来指示数据包,如表 2 中所定义。
数据包边界标志 (PBF)
PBF字段的详细信息请参见表3。
连接标识符(Conn ID)
连接标识符(Conn ID)应用于指示该数据所属的先前设置的逻辑连接。 有关设置逻辑连接和分配 Conn ID 的详细信息,请参阅第 4.4 节。 Conn ID 是一个 4 位字段,包含 0 到 15 之间的值。
学分(CR)
Credits 字段是一个 2 位字段,包含从 0 到 3 的值。在从 DH 发送到 NFCC 的数据包中,它应包含值零 (0)。 如果 NFCC 使用基于信用的流量控制(请参阅第 3.3.1 节和第 4.4.4 节),则 NFCC 可以通过在此字段中设置非零值来为数据包使用的逻辑连接提供 DH 信用。 否则,NFCC 应在此字段中设置值 0。
有效负载长度(L)
有效负载长度字段应指示有效负载中存在的八位字节数。 有效负载长度字段应为 8 位字段,包含 0 到 255 之间的值。
3.5 分割与重组
DH 和 NFCC 均应支持分段和重组功能。
对于每个逻辑连接的控制包和数据包,消息的分段和重组应独立执行。
任何 NCI 传输映射都可以定义固定的最大传输单元 (MTU) 大小(以八位位组为单位)。 如果定义并使用这样的映射,那么,如果 DH 或 NFCC 需要传输将生成大于 MTU 的数据包(包括数据包标头)的消息(控制消息或数据消息),则分段和重组 (SAR) 功能应在消息上使用。
以下规则适用于分段控制消息:
对于控制消息的每个段,控制数据包的标头应包含相同的 MT、GID 和 OID 值。
从 DH 到 NFCC:当从 DH 向 NFCC 发送命令消息时,应使用分段和重组功能,该命令消息将生成有效负载大于 NFCC 在初始化时报告的“最大控制数据包有效负载大小”的控制数据包 (参见第 4.2 节)。 命令消息的每个片段(最后一个片段除外)均应包含长度为“最大控制数据包有效负载大小”的有效负载。
从 NFCC 到 DH:当 NFCC 向 DH 发送控制消息时,无论长度如何,如果出于内部优化目的需要,它都可以将控制消息分段为更小的控制数据包。
以下规则适用于分段数据消息:
对于数据消息的每个段,数据包的标头应包含相同的 MT 和 Conn ID。
从 DH 到 NFCC:如果数据消息有效负载大小超过连接的最大数据包有效负载大小,则应在数据消息上使用分段和重组功能。
从 NFCC 到 DH:当 NFCC 向 DH 发送数据消息时,无论有效负载长度如何,它都可以出于任何内部原因将数据消息分割成更小的数据包; 例如,用于传输缓冲区优化。 对于控制消息和数据消息,PBF 位应按照表 3 中的定义进行设置。
3.6 逻辑连接
逻辑连接用于在 DH 和 NFCC 之间交换数据消息。 逻辑连接为相关数据消息提供公共上下文。 根据逻辑连接建立期间交换的信息,NFCC 可以是数据通信的端点,或者必须将数据消息的有效负载转发到远程 NFC 端点或 NFCEE(后两者是主要用例) 用于逻辑连接)。
逻辑连接是通过 NFCC 和 DH 之间的协商建立的(如第 4.4 节所述)。 以下是逻辑连接概念的概述。 动态逻辑连接:
DH 可以创建动态逻辑连接。
NFCC 可以拒绝传入的连接请求。
NFCC 将分配一个标识符(Conn ID)来标识动态逻辑连接,并且该标识符在动态逻辑连接的生命周期内保持有效。 当动态逻辑连接关闭时,Conn ID 被释放。
DH 可以关闭动态逻辑连接。
只有成功创建动态逻辑连接后才能传输数据。
DH 和 NFCC 均应忽略未分配 Conn ID 的数据包。
静态射频连接:
静态 RF 连接在 NFCC 初始化后就存在,无需使用连接控制消息(在第 4.4.2 节中定义)进行创建,并且永远不会关闭。
静态 RF 连接的初始信用数和最大数据包有效负载大小由 NFCC 在每次发送 RF_INTF_ACTIVATED_NTF 时(重新)建立。
如果没有活动的 RF 接口,DH 不应通过静态 RF 连接发送数据。 参见第 7.3 节。
如果没有活动的 RF 接口,DH 和 NFCC 都应忽略具有静态 RF 连接的 Conn ID 的数据包。
注意 此版本规范中包含的所有 RF 接口仅使用静态 RF 连接。 但是,动态逻辑连接可能会被本规范未来版本中包含的 RF 接口使用。
静态 HCI 连接:
如果 NFCC 在 CORE_INIT_RSP 中报告它实现了 HCI 主机控制器(如 [ETSI_102622] 中定义),则:
静态 HCI 连接在 NFCC 初始化后就存在,无需使用连接控制消息(在第 4.4.2 节中定义)进行创建,并且永远不会关闭。
静态 HCI 连接的初始信用数和最大数据包有效负载大小由 CORE_INIT_RSP 中的 NFCC 报告(请参阅第 4.2 节)。
在静态 HCI 连接上发送的数据包的有效负载应为有效的主机控制器协议 (HCP) 数据包,如 [ETSI_102622] 中所定义。 每个数据包应包含一个 HCP 数据包。 NCI 分段和重组不得应用于任一方向的数据消息。 如果需要,可以使用 HCI 碎片机制。
Conn ID 的范围是 0 到 15(参见表 4)。 Conn ID 0 是为用于射频通信的静态射频连接保留的,该连接在NFCC 初始化后存在。 但是,除非激活 RF 接口,否则无法使用。 每个 RF 接口定义是否使用静态 RF 连接以及是否允许动态逻辑连接。