NCI Architecture

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 端点之间是否发生通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/31602.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】哈希unordered系列容器的模拟实现

文章目录 一、哈希表的模拟实现(开散列)1. 开散列的概念2. 开散列的节点结构3. 开散列的插入删除与查找4. 开散列整体代码实现 二、unordered系列容器的封装实现(开散列)1. 迭代器2. unordered_set和unordered_map的封装实现3. 哈希表整体源码 一、哈希表…

如何让ChatGPT制作XMind思维导图

一、使用ChatGPT辅助生成内容 给大家一个思路,比如我想制作《股神巴菲特给儿女的一生忠告》相关的思维导图,那我们可以在ChatGPT上提问“请使用markdown格式写出股神巴菲特给儿女的一生忠告的思维导图,以代码格式输出”。 生成后&#xff0…

【小沐学Python】Python实现Web服务器(Flask,gevent )

文章目录 1、简介1.1 功能列表1.2 支持平台1.3 安装 2、gevent入门示例2.1 文件IO2.2 MySQL2.3 redis2.4 time2.5 requests2.6 socket2.7 并发抓取文字2.8 并发抓取图片2.9 生产者 - 消费者 3、gevent其他示例3.1 StreamServer3.2 WSGI server3.3 flask3.4 websocket3.5 udp 结…

压测工具Jmeter学习

压测工具Jmeter Jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI …

三层交换机与路由互联配置(华为设备)

#三层交换机与路由器配置配置 #三层交换机与路由器配置配置 路由器配置 #进入系统视图 <Huawei>system-view #关闭系统提示信息 [Huawei]undo info-center enable #配置一个环回口 [Huawei]int LoopBack 0 #配置IP地址 与 掩码 [Huawei-LoopBack0]ip address 1.1.…

源码编译LAMP与论坛安装

目录 前言 LAMP工作过程 Apache 1&#xff09;Apache主要特点 如何创建论坛 第一步 关闭防火墙和安全机制 第二、安装相关的Apache服务 1&#xff09;解压压缩包 2&#xff09;安装依赖环境 3&#xff09;配置安装路经等 4&#xff09;编译并安装 5&#xff09;优化…

C++【STL】之反向迭代器

反向迭代器 前面在vector和list的模拟实现中都有讲到正向迭代器&#xff0c;今天我们就来讲解一下反向迭代器的思想和模拟实现&#xff0c;在某些场景下还是很实用的&#xff0c;下面正文直接开始。 文章目录&#xff1a; 反向迭代器1. 反向迭代器结构2. 反向迭代器实现2.1 多…

基于Springboot+vue的汽车租赁系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

5.4.2 网络地址转换NAT

5.4.2 网络地址转换NAT 我们知道为了缓解IPv4地址紧缺的问题&#xff0c;相继出现了一系列缓解地址耗尽的解决方案&#xff0c;比如通过子网划分&#xff08;5.2.8 子网编址&#xff09;实现网络地址在多个物理网络之间的复用&#xff0c;通过无分类编址&#xff08;5.2.9 无分…

Android PagerSnapHelper改造RecyclerView为ViewPage,kotlin

Android PagerSnapHelper改造RecyclerView为ViewPage&#xff0c;kotlin <?xml version"1.0" encoding"utf-8"?> <androidx.recyclerview.widget.RecyclerView xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tool…

端午节粽子(python)

目录 前言 正文 粽叶绘制 粽叶绳绘制 祝福语绘制 源代码 总结 前言 今天端午节&#xff0c;然后昨天也学习一下绘图的相关知识&#xff0c;然后就想看一下能不能画一下&#xff0c;结果还是有点困难的&#xff0c;用CharAI生成简直一言难尽了。后面是找了一个改了一下。 …

【剑指offer刷题记录 java版】数组双指针 之 其它题目

本系列文章记录labuladong的算法小抄中剑指offer题目 【剑指offer刷题记录 java版】数组双指针 之 其它题目 剑指 Offer II 018. 有效的回⽂剑指 Offer 58 - I. 翻转单词顺序剑指 Offer 21. 调整数组顺序使奇数位于偶数前⾯剑指 Offer 57. 和为s的两个数字剑指 Offer II 007. 数…

STM32单片机LED显示屏驱动原理与实现

STM32单片机驱动LED显示屏的原理与实现方法与Arduino类似&#xff0c;但涉及到的具体硬件资源和库函数可能会有所不同。下面是一个详细的介绍&#xff1a; 原理&#xff1a; STM32单片机驱动LED显示屏的原理是通过控制GPIO引脚的电平状态来控制LED的亮灭。通过设置引脚的输出电…

Mybatis源码分析_Mapper接口是如何实例化的 (2)

我们在使用Springmybatis的时候&#xff0c;经常都是直接写一个接口和一个对应的 ***Mapper.xml文件&#xff0c;然后业务代码就可以直接注入这个接口了。它是如何做到的呢&#xff1f; 接口&#xff1a; xml 想搞清楚这个问题&#xff0c;那还是要从Mybatis底层源码进行分析的…

轻量级的深度学习框架Tinygrad

Tinygrad是一个轻量级的深度学习库&#xff0c;它提供了一种简化和直观的方法来理解和实现神经网络。在本文中&#xff0c;我们将探讨Tinygrad及其主要功能&#xff0c;以及它如何成为那些开始深度学习之旅的人的有价值的工具。 什么是Tinygrad? Tinygrad是一个开源的深度学习…

Redis 通用命令

通用命令介绍 Redis 通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令&#xff0c;比如删除键、对键进行改名、判断键是否存在等。简单说&#xff0c;就是 keys 分类的命令&#xff0c;如下图。 上图中圈中的部分&#xff0c;就是所谓的通用的命令…

【C语言初阶】带你轻松玩转所有常用操作符(1)

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_&#xff0c;最近要准备期末复习了&#xff0c;可能更新的就不会那么频繁了&#xff0c;下个星期回复正常更新。 操作符详解1 前言一.操作符的分类二.算数操作符三.移位操作符1.二进制表示的三种形式2.…

matlab实现语音信号的频域分析及应用

1.语音信号本质上是非平稳信号。但我们可以假设语音信号在一个短时间内是平稳的&#xff0c;这样我们用稳态分析方法处理非平稳信号。应用在傅立叶分析就是短时傅立叶变换。 语音的频域分析&#xff1a;包括语音信号的频谱、功率谱、倒频谱、频谱包络等. 常用频域分析方法&am…

mySql和VSC++

确认主机服务里的mysql服务已打开 使用组合键“winR”运行“services.msc”&#xff0c;进入本地服务窗口&#xff1b; 2.进入本地服务窗口后&#xff0c;在右侧服务列表中&#xff0c;查找到“ mysql ”服务选项&#xff1b; 3.查找到mysql服务选项后&#xff0c;双击打开mysq…

linux安装anaconda

linux安装anaconda 1、下载anaconda&#xff1a; Conda 是一个强大的包管理器和环境管理器&#xff0c;您可以在 Windows 的 Anaconda Prompt 或 macOS 或 Linux 的终端窗口中与命令行命令一起使用。 换句话说&#xff0c;我把Conda理解为前端的npm或yarn&#xff0c;后端的…