NCI(NFC Controller Interface)是NFC Forum于2012年制定的一个规范,其主要关注点为DH(Device Host,主机设备)如何控制并与NFCC(NFC Controller)交互。图8-23所示为NFCC、NCI和DH三者之间的关系。
:-: ![](https://box.kancloud.cn/4dabf9728466a16a3bec469c0116b65b_1137x582.jpg)
图8-23 NFCC、NCI和DH三者之间的关系
在图8-23中,NFCC和DH通过物理连线相连,物理连线对应为Transport Layer(传输层)。目前,NFCC和DH在传输层这一块支持SPI、I2C、UART和USB等。在图右边的DH中,所有和NFC相关的应用程序都可被视为DH-NFCEE(EE是Execution
Environment的缩写)。图左边有一个NFCEE模块,该模块也可运行着一些和NFC相关的程序或系统(以图8-21为例,它的SmartMX Secure Element就是此处所说的EE)。NFCEE模块可直接集成在NFCC中,也可作为单独的芯片模块通过物理连线与NFCC相连。NCI负责处理DH和NFCC之间的交互。NCI包含多个模块,详情见下文。图8-24所示为NCI的模块结构。
:-: ![](https://box.kancloud.cn/7a6676fb41d4fc9f54a5ffa672db1401_857x682.jpg)
图8-24 NCI模块结构
- NCI Core模块负责DH和NFCC之间交互的基本功能,包括控制消息(Control Message)和数据消息(Data Message)的传递、DH初始化、重置和配置NFCC等。
- Transport Mapping用于在NFC Core和传输层之间转换数据格式,例如将NCI Core使用的控制消息和数据消息转换成对应传输层使用的数据格式。
- NCI Module包含多个功能模块,例如RF Discovery模块用于搜索周围的其他NFC Device、RF Interface用于和对端的NFC Device交互。
使用NCI的NFC Device中,DH和NCI的工作原理如图8-25所示。
:-: ![](https://box.kancloud.cn/1a04456ea86b8d95a21f1c9fc219ceee_719x643.jpg)
图8-25 NCI工作原理
图8-25中:
* DH通过NCI规范定义的Control Message来控制NFCC。目前规范定义的Control Message包括Commands(请求命令,包括初始化NFCC、重置NFCC、设置NFCC配置参数等)、Responses(回复)和Notifications(通知)。这些Message都封装在NCI Control Packages中。其中,Commands只能由DH发送给NFCC。
* DH通过RF Interface和对端NFC设备(图中的Remote NFC Endpoint)交互,也可通过NFCEE Interface和本设备的NFCEE交互。交互数据包括Control Message和Data Message。
NCI规范一共有140多页,是NFC Forum众多规范中比较复杂的一个。根据笔者的理解,NCI的一个很重要的作用就是统一Android中NFC HAL层的实现,即通过一套标准的方法来实现对NFCC的控制以及数据交互。不过,由于NCI规范推出的时间比较晚(该协议最终版的时间为2012年11月6日),所以占据最大市场份额的NXP公司在其Android平台的NFC HAL层中还没
有使用NCI。
>[info] 提示 8.4节将专门讨论Android平台中NFC HAL层的实现状况。从Android 4.2的代码来看,NXP公司使用了自己的一套NFC HAL层实现方式,而博通公司的NFC HAL层的实现参考了NCI规范。但实际上这两家公司NFC HAL层的代码处处透露着它们与特定芯片的紧密关系,这使不了解芯片细节的读者很难真正看懂NFC HAL层的代码。随着NFC的重要性和普及程度日益加大,开发者已经在Linux Kernel 3.8[21]中增加了一个名为NFC的子系统,它使得以后的NFC HAL层只需通过netlink消息就可和位于Kernel空间的NFC驱动交互。因目前NFC HAL层这些被不同芯片所“绑架”的代码就可从用户空间移除,而那些和芯片相关的代码就可通过NFC驱动的形式运行在Kernel之内。
- 前言
- 第1章 准备工作
- 1.1 Android系统架构
- 1.2 工具使用
- 1.2.1 Source Insight的使用
- 1.2.2 Eclipse的使用
- 1.2.3 BusyBox的使用
- 1.3 本书资源下载说明
- 第2章 深入理解Netd
- 2.1 概述
- 2.2 Netd工作流程
- 2.2.1 main函数分析
- 2.2.2 NetlinkManager分析
- 2.2.3 CommandListener分析
- 2.2.4 DnsProxyListener分析
- 2.2.5 MDnsSdListener分析
- 2.3 CommandListener中的命令
- 2.3.1 iptables、tc和ip命令
- 2.3.2 CommandListener构造函数和测试工具ndc
- 2.3.3 InterfaceCmd命令
- 2.3.4 IpFwd和FirewallCmd命令
- 2.3.5 ListTtysCmd和PppdCmd命令
- 2.3.6 BandwidthControlCmd和IdletimerControlCmd命令
- 2.3.7 NatCmd命令
- 2.3.8 TetherCmd和SoftapCmd命令
- 2.3.9 ResolverCmd命令
- 2.4 NetworkManagementService介绍
- 2.4.1 create函数详解
- 2.4.2 systemReady函数详解
- 2.5 本章总结和参考资料说明
- 2.5.1 本章总结
- 2.5.2 参考资料说明
- 第3章 Wi-Fi基础知识
- 3.1 概述
- 3.2 无线电频谱和802.11协议的发展历程
- 3.2.1 无线电频谱知识
- 3.2.2 IEEE 802.11发展历程
- 3.3 802.11无线网络技术
- 3.3.1 OSI基本参考模型及相关基本概念
- 3.3.2 802.11知识点导读
- 3.3.3 802.11组件
- 3.3.4 802.11 Service介绍
- 3.3.5 802.11 MAC服务和帧
- 3.3.6 802.11 MAC管理实体
- 3.3.7 无线网络安全技术知识点
- 3.4 Linux Wi-Fi编程API介绍
- 3.4.1 Linux Wireless Extensions介绍
- 3.4.2 nl80211介绍
- 3.5 本章总结和参考资料说明
- 3.5.1 本章总结
- 3.5.2 参考资料说明
- 第4章 深入理解wpa_supplicant
- 4.1 概述
- 4.2 初识wpa_supplicant
- 4.2.1 wpa_supplicant架构
- 4.2.2 wpa_supplicant编译配置
- 4.2.3 wpa_supplicant命令和控制API
- 4.2.4 git的使用
- 4.3 wpa_supplicant初始化流程
- 4.3.1 main函数分析
- 4.3.2 wpa_supplicant_init函数分析
- 4.3.3 wpa_supplicant_add_iface函数分析
- 4.3.4 wpa_supplicant_init_iface函数分析
- 4.4 EAP和EAPOL模块
- 4.4.1 EAP模块分析
- 4.4.2 EAPOL模块分析
- 4.5 wpa_supplicant连接无线网络分析
- 4.5.1 ADD_NETWORK命令处理
- 4.5.2 SET_NETWORK命令处理
- 4.5.3 ENABLE_NETWORK命令处理
- 4.6 本章总结和参考资料说明
- 4.6.1 本章总结
- 4.6.2 参考资料说明
- 第5章 深入理解WifiService
- 5.1 概述
- 5.2 WifiService的创建及初始化
- 5.2.1 HSM和AsyncChannel介绍
- 5.2.2 WifiService构造函数分析
- 5.2.3 WifiStateMachine介绍
- 5.3 加入无线网络分析
- 5.3.1 Settings操作Wi-Fi分析
- 5.3.2 WifiService操作Wi-Fi分析
- 5.4 WifiWatchdogStateMachine介绍
- 5.5 Captive Portal Check介绍
- 5.6 本章总结和参考资料说明
- 5.6.1 本章总结
- 5.6.2 参考资料说明
- 第6章 深入理解Wi-Fi Simple Configuration
- 6.1 概述
- 6.2 WSC基础知识
- 6.2.1 WSC应用场景
- 6.2.2 WSC核心组件及接口
- 6.3 Registration Protocol详解
- 6.3.1 WSC IE和Attribute介绍
- 6.3.2 802.11管理帧WSC IE设置
- 6.3.3 EAP-WSC介绍
- 6.4 WSC代码分析
- 6.4.1 Settings中的WSC处理
- 6.4.2 WifiStateMachine的处理
- 6.4.3 wpa_supplicant中的WSC处理
- 6.4.4 EAP-WSC处理流程分析
- 6.5 本章总结和参考资料说明
- 6.5.1 本章总结
- 6.5.2 参考资料说明
- 第7章 深入理解Wi-Fi P2P
- 7.1 概述
- 7.2 P2P基础知识
- 7.2.1 P2P架构
- 7.2.2 P2P Discovery技术
- 7.2.3 P2P工作流程
- 7.3 WifiP2pSettings和WifiP2pService介绍
- 7.3.1 WifiP2pSettings工作流程
- 7.3.2 WifiP2pService工作流程
- 7.4 wpa_supplicant中的P2P
- 7.4.1 P2P模块初始化
- 7.4.2 P2P Device Discovery流程分析
- 7.4.3 Provision Discovery流程分析
- 7.4.4 GO Negotiation流程分析
- 7.5 本章总结和参考资料说明
- 7.5.1 本章总结
- 7.5.2 参考资料说明
- 第8章 深入理解NFC
- 8.1 概述
- 8.2 NFC基础知识
- 8.2.1 NFC概述
- 8.2.2 NFC R/W运行模式
- 8.2.3 NFC P2P运行模式
- 8.2.4 NFC CE运行模式
- 8.2.5 NCI原理
- 8.2.6 NFC相关规范
- 8.3 Android中的NFC
- 8.3.1 NFC应用示例
- 8.3.2 NFC系统模块
- 8.4 NFC HAL层讨论
- 8.5 本章总结和参考资料说明
- 8.5.1 本章总结
- 8.5.2 参考资料说明
- 第9章 深入理解GPS
- 9.1 概述
- 9.2 GPS基础知识
- 9.2.1 卫星导航基本原理
- 9.2.2 GPS系统组成及原理
- 9.2.3 OMA-SUPL协议
- 9.3 Android中的位置管理
- 9.3.1 LocationManager架构
- 9.3.2 LocationManager应用示例
- 9.3.3 LocationManager系统模块
- 9.4 本章总结和参考资料说明
- 9.4.1 本章总结
- 9.4.2 参考资料说明
- 附录