至少 Broadcom 的 NFC 控制器(例如在 Nexus 5 中使用)支持为防冲突标识符 (UID)、ATQA 和 SAK 字节设置任意值。但是,没有 API 可以更改它们,因此唯一的方法是修改 libnfc-nci 库。
NFC-A 的相关代码在文件nfa_dm_discover.c 中(从第 322 行开始):
UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, 0x04);
UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, platform);
UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO);
UINT8_TO_STREAM (p, sens_info);
此代码当前设置 ATQA(值平台和 0x04 的组合)和 SAK 字节(sens_info 的值)。
为了更改 NFC-A 防冲突期间使用的 UID,您可以添加附加参数 NFC_PMID_LA_NFCID1:
UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1);
UINT8_TO_STREAM (p, 4); // length of NFCID1 in bytes
UINT8_TO_STREAM (p, 0x12);
UINT8_TO_STREAM (p, 0x34);
UINT8_TO_STREAM (p, 0x56);
UINT8_TO_STREAM (p, 0x78);
您可以在此处找到更可定制的 libnfc-nci 版本(尽管仍在进行中)。