2.1 组成部分
NCI 可分为以下逻辑组件:
NCI 核心
NCI 核心定义了设备主机 (DH) 和 NFC 控制器 (NFCC) 之间通信的基本功能。 这使得 NFCC 和 DH 之间能够进行控制消息(命令、响应和通知)和数据消息交换。
传输映射
传输映射定义 NCI 消息传递如何映射到底层 NCI 传输,这是 DH 和 NFCC 之间的物理连接(以及可选的关联协议)。 每个传输映射都与特定的 NCI 传输相关联。
NCI 模块
NCI 模块构建在 NCI 核心提供的功能之上。 每个模块都为 DH 提供明确定义的功能。 NCI 模块提供配置 NFCC 以及发现远程 NFC 端点或本地 NFCEE 并与之通信的功能。 一些 NCI 模块是 NCI 实现的强制部分,其他模块是可选的。 NCI 模块之间也可能存在依赖关系,即一个模块只有在同时实现了其他模块时才有用。 例如,所有处理与远程 NFC 端点(RF 接口模块)通信的模块都依赖于 RF Discovery 的存在。
2.2.1 控制消息
DH 使用 NCI 控制消息来管理和配置 NFCC。 控制消息由命令、响应和通知组成。 命令只允许在 DH 到 NFCC 的方向上发送,响应和通知只允许在另一个方向上发送。 控制消息在NCI控制数据包中传输,NCI支持将控制消息分段为多个数据包。
NCI 核心定义了一组基本的控制消息(例如,用于设置和检索 NFCC 配置参数)。 NCI 模块可以定义附加控制消息。
2.2.2 数据消息
数据消息用于将数据传输到远程 NFC 端点(在 NCI 中称为“RF 通信”)或 NFCEE(在 NCI 中称为“NFCEE 通信”)。 NCI 定义了数据包,可以将数据消息分割成多个数据包。
数据消息只能在逻辑连接的上下文中交换。 在发送任何数据消息之前必须建立逻辑连接。 一种逻辑连接(静态 RF 连接)始终在 NCI 初始化期间建立。 静态射频连接专用于射频通信。 可以为 RF 和/或 NFCEE 通信创建附加逻辑连接。
逻辑连接为从 DH 到 NFCC 方向的数据消息提供流量控制。
2.2.3 接口
NCI 模块可能包含单个接口。 每个接口定义 DH 如何通过 NCI 与远程 NFC 端点或 NFCEE 进行通信。 每个接口都被定义为支持特定协议,并且只能用于这些协议(大多数接口仅支持一种协议)。 NCI 定义了两种类型的接口:RF 接口和 NFCEE 接口。
用于与远程 NFC 端点通信的协议称为 RF 协议。 用于与 NFCEE 通信的协议称为 NFCEE 协议。
NFCEE 接口与 NFCEE 协议具有一对一的关系。 然而,一种 RF 协议可能有多个 RF 接口。 多个 RF 接口允许 NCI 支持 NFCC 和 DH 之间协议实现的不同划分。 NFCC 上的 NCI 实现包括与 NFCC 上实现的功能相匹配的 RF 接口。
接口在使用前需要激活,在不再使用时需要停用。
接口可以定义自己的配置参数和控制消息。 但是,最重要的是,它定义了数据消息有效负载到相应 RF 或 NFCEE 协议有效负载的映射,以及在 RF 通信的情况下,是否使用静态 RF 连接和/或动态逻辑连接来交换这些连接 DH 和 NFCC 之间的数据消息
2.2.4 射频接口扩展
RF 接口扩展向一个或多个 RF 接口添加一组特定的、明确定义的功能。 每个 RF 接口扩展定义了它可以扩展哪些 RF 接口。
RF 接口扩展的可用性取决于这些 RF 接口之一被激活的时间。 可用性还可以取决于其他条件,例如 当前射频通信中使用的协议。 如果 RF 接口处于活动状态,则 DH 可以启动和停止可用的 RF 接口扩展。 RF 接口扩展永远不会自动启动,而是在 RF 接口停用时停止。 每个 RF 接口扩展都定义了用于启动和停止其功能的控制消息。
启动后,RF 接口扩展可以推翻活动 RF 接口的定义以提供其功能。 RF接口扩展可以定义接口自己的配置参数和控制消息。 它们还可以提供与 RF 接口定义的格式不同的数据消息格式。 然而,RF 接口扩展不能否决活动接口的停用行为。
对于给定的 RF 接口,可以有多个 RF 接口扩展。 可以同时启动多个 RF 接口扩展,只要它们不互相排斥。 每个 RF 接口扩展都定义了它可以与哪个其他 RF 接口扩展一起使用。
然而,扩展过程不能复合:RF 接口扩展并不旨在扩展其他 RF 接口扩展的功能。
2.2.5 射频通讯
RF 通信是通过配置和运行 RF Discovery 进程来启动的。 RF Discovery 是一个 NCI 模块,用于发现和枚举远程 NFC 端点。
对于每个远程 NFC 端点,RF 发现过程向 DH 提供在 RF 发现过程中收集的远程 NFC 端点信息。 此信息包括用于与远程 NFC 端点通信的 RF 协议。 在 RF 发现配置期间,DH 设置一个映射,将每个 RF 协议的 RF 接口关联起来。 如果在发现周期内仅检测到单个远程 NFC 端点,则该端点的 RF 接口将自动激活。 如果在轮询模式下检测到多个远程 NFC 端点,DH 可以选择它想要与之通信的端点。 此选择还会触发映射接口的激活。
激活 RF 接口后,DH 可以使用激活的 RF 接口与远程 NFC 端点通信。 已激活的 RF 接口可由 DH 或 NFCC(例如,代表远程 NFC 端点)停用。 然而,每个 RF 接口都可以定义允许使用哪些方法。 停用选项会有所不同,具体取决于 DH 上执行的协议栈部分。 例如,如果在 DH 上处理断开通信的协议命令,则 DH 将停用 RF 接口。 如果在 NFCC 上处理此类命令,NFCC 将停用该接口。
本规范以状态机的形式描述了射频通信可能的控制消息序列。
2.2.6 NFCEE通信
DH 可以通过使用 NFCEE Discovery 模块了解连接到 NFCC 的 NFCEE。 在 NFCEE 发现期间,NFCC 为每个 NFCEE 分配一个标识符。 当 DH 想要与 NFCEE 通信时,它会打开到 NFCEE 的逻辑连接,其中包括相应的标识符并指定要使用的 NFCEE 协议。
打开与 NFCEE 的逻辑连接会自动激活与指定协议关联的 NFCEE 接口。 由于 NFCEE 协议和接口之间始终存在一对一的关系,因此不需要映射步骤(与 RF 接口激活不同)。
接口激活后,DH可以使用激活的接口与NFCEE进行通信。
关闭与 NFCEE 接口的连接会停用 NFCEE 接口。
NCI 还包括允许 DH 启用或禁用 NFCEE 和 NFCC 之间通信的功能。
2.2.7 标识符
NCI 对远程 NFC 端点和 NFCEE 使用不同的标识符。 这些标识符由 NFCC 动态分配。 DH 在 RF Discovery 和 NFCEE Discovery 的背景下学习它们。 远程 NFC 端点的标识符称为 RF 发现 ID。 它们的生命周期通常很短,因为它们仅在 DH 希望能够与远程 NFC 端点通信时有效。 相反,NFCEE 的标识符具有更长的生命周期,因为 NFCEE 通常不会频繁地添加到设备或从设备中删除。 NFCEE 的标识符称为“NFCEE ID”。 有一个保留的静态 NFCEE ID,值 0,代表 DH-NFCEE。
逻辑连接采用第三种类型的标识符(目标类型)作为第一个参数来标识数据的目标。 根据目标类型,可以有第二个参数用于标识数据目标。 例如,如果目标类型是“远程 NFC 端点”,则第二个参数将是 RF 发现 ID。
2.2.8 NFCC 作为共享资源
NFCC 不仅可以由 DH 使用,还可以由设备中的 NFCEE 使用(在这种情况下,NFCC 是共享资源)。 NFCEE 与 NFCC 的连接方式有所不同,此类链路上使用的协议决定了 NFCEE 如何使用 NFCC。 例如,某些协议允许 NFCEE 向 NFCC 提供其自己的 RF 参数配置(类似于用于 RF 发现的 NCI 配置参数)。 在其他情况下,NFCEE 可能不会提供此类信息。
NFCC 在如何处理来自 DH 和 NFCEE 的多种配置方面可以有不同的实现。 例如,他们可能会在这些配置之间进行切换,以便一次只有一个配置处于活动状态,或者他们可能会尝试合并不同的配置。 在初始化期间,NCI 向 DH 提供有关其提供的配置是否是唯一的信息,或者 NFCC 是否也支持 NFCEE 的配置的信息。
NCI 包括一个名为“侦听模式路由”的模块,DH 可以使用该模块定义当设备在侦听模式下激活时将接收到的数据路由到何处。 侦听模式路由允许 DH 在 NFCC 上维护路由表。 路由可以基于传入流量的技术或协议、基于系统代码(如果使用 T3T 协议)或基于应用程序标识符(如果在 ISO-DEP 之上使用 7816-4 APDU 命令)来完成。
此外,NCI 使 DH 能够获知 NFCEE 和远程 NFC 端点之间是否发生通信。