NFC-NCI协议和源码分析
概览
NCI在NFC源码中所处的位置
net/nfc/nci
├── core.c
├── data.c
├── lib.c
├── ntf.c
├── rsp.c
└── spi.c
include/net/nfc
├── nci_core.h
└── nci.h
NCI架构
![](https://img.haomeiwen.com/i11634406/b8f77a4d68b5463d.png)
![](https://img.haomeiwen.com/i11634406/e7ccc9f69e2a0aeb.png)
名词解释
nci(NFC Controller Interface):在DH和NFCC之间的接口
nci core:NCI的基本功能
NCI中的数据流
NCI中的数据流是以packet的形式进行传递,包括Control messages 和 Data Messages。
NCI Control Messages
Control Messages是Control Packet的有效载荷
Control Messages包括commands,respones,notification
DH发送一条Commands来控制NFCC执行特定行为。NFCC每收到一条Commands,都会回发一条Response来通知DH它已接受到Command,这条Respones
可以包含由于该条Commands所导致NCI所发生的变化。
Notification只能从NFCC发送到DH,里面的信息可以和Command有关,也可以无关
![](https://img.haomeiwen.com/i11634406/a6039fc0087e6d77.png)
控制规则
控制规则中没有packet层面的规则
- 当DH发送了一条Command, DH在接受到该Command所对应的Respones前不能发送其他的Command。(通过计时器实现)
- DH在发送完一条Command后,它能够接受一条Respones
- 在发送完一条Respones后,NFCC准备好接受下一条来自DH的Command
- DH在任何时候都准备好接守一条来自NFCC的Command
NCI Data Messages
在DH和NFCC之间通过Data Message来传送数据,一个Data Packet的有效载荷包含一条Data Message的全体或者部分。
当Logic Connection建立成功后,在任何时候DH或者NFCC都能发送Data Message。
DH能够接受来自NFCC的任意长度的数据,对于一个Logical Connection而言:
NFCC所能接受的最大数据长度=一个数据包最大有效载荷 * NFCC对于该连接的unused credits
控制规则
credit只对于从DH发送到NFCC的数据,因为NFCC可能出现缓存区溢出,而DH则假设不会。每一个packet都会消耗掉一个credit
网友评论