NFC-NCI協(xié)議和源碼分析
概覽
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架構(gòu)
名詞解釋
nci(NFC Controller Interface):在DH和NFCC之間的接口
nci core:NCI的基本功能
NCI中的數(shù)據(jù)流
NCI中的數(shù)據(jù)流是以packet的形式進行傳遞懂酱,包括Control messages 和 Data Messages辞州。
NCI Control Messages
Control Messages是Control Packet的有效載荷
Control Messages包括commands,respones,notification
DH發(fā)送一條Commands來控制NFCC執(zhí)行特定行為耸弄。NFCC每收到一條Commands,都會回發(fā)一條Response來通知DH它已接受到Command腥例,這條Respones
可以包含由于該條Commands所導致NCI所發(fā)生的變化。
Notification只能從NFCC發(fā)送到DH,里面的信息可以和Command有關(guān)铐炫,也可以無關(guān)
控制規(guī)則
控制規(guī)則中沒有packet層面的規(guī)則
- 當DH發(fā)送了一條Command, DH在接受到該Command所對應(yīng)的Respones前不能發(fā)送其他的Command黎烈。(通過計時器實現(xiàn))
- DH在發(fā)送完一條Command后习柠,它能夠接受一條Respones
- 在發(fā)送完一條Respones后,NFCC準備好接受下一條來自DH的Command
- DH在任何時候都準備好接守一條來自NFCC的Command
NCI Data Messages
在DH和NFCC之間通過Data Message來傳送數(shù)據(jù)照棋,一個Data Packet的有效載荷包含一條Data Message的全體或者部分资溃。
當Logic Connection建立成功后,在任何時候DH或者NFCC都能發(fā)送Data Message必怜。
DH能夠接受來自NFCC的任意長度的數(shù)據(jù)肉拓,對于一個Logical Connection而言:
NFCC所能接受的最大數(shù)據(jù)長度=一個數(shù)據(jù)包最大有效載荷 * NFCC對于該連接的unused credits
控制規(guī)則
credit只對于從DH發(fā)送到NFCC的數(shù)據(jù),因為NFCC可能出現(xiàn)緩存區(qū)溢出梳庆,而DH則假設(shè)不會暖途。每一個packet都會消耗掉一個credit