NXP PN5190 是一款 NFC 前端芯片, 主要用于 NFC 交互数据使用.
废话不多说, 直接开搞.
PN5190 软件库说明
链接: PN5190_NFC支付前端 | NXP 半导体 
PN5190 官方软件库, 复制需要的文件夹内容:
Platform >> DAL
RTOS (根据 MCU 系统提取, 如果 MCU 没有系统, 那么就 仅仅编译 NullOS 文件夹)
NxpNfcRdLib
Examples >> NfcrdlibEx4_MIFAREClassic(根据自己需要的例子)
定义 项目宏(Symbols)
PH_OSAL_NULLOS (根据自己需求定义 OS)
NXPBUILD_CUSTOMER_HEADER_INCLUDED (必须的)
PHDRIVER_XXXXPN5190_BOARD (XXXX 芯片随便命名, 例如 PHDRIVER_EFR32PN5190_BOARD)
文件添加(MCU)板子定义
修改文件 NfcrdlibEx4_MIFAREClassic/ph_NxpBuild_App.h 内容:
添加宏到位置:
#define NXPBUILD__PHHAL_HW_PN5190 // TODO 自己添加

修改文件 Platform/DAL/cfg/BoardSelection.h 新增内容:
#ifdef PHDRIVER_EFR32PN5190_BOARD
#endif
新建 MCU 实现所需文件
Platform/DAL/boards/Board_EFR32Pn5190.h(主要模仿 Board_K82F_PNEV5190B.h 定义一些引脚内容)
Platform/DAL/src/EFR32BG22/phbalReg_EFR32Spi.c(主要实现 SPI 通讯数据, 模仿 phbalReg_KinetisSpi.c)
Platform/DAL/src/EFR32BG22/phbalReg_EFR32SDK.c(主要实现 IRQ/引脚 配置/读取/写 的内容, 模仿 phbalReg_KinetisSDK.c)
重要警告!!!
请务必将 CLIF_IRQHandler 函数宏定义(映射重命名)到 PN5190 IRQ引脚中断函数:
#define CLIF_IRQHandler GPIO_ODD_IRQHandler // NOTE: 中断引脚(一般指 PN5190 IRQ 引脚)中断函数, 必须映射该函数到 芯片引脚 中断函数.
函数 GPIO_ODD_IRQHandler 为用户芯片与 PN5190 IRQ 引脚发生中断时的中断函数.
低功耗问题排查
拉低 VEN 引脚功耗就会 接近 40uA , 如果不是, 那么不要犹豫
,
直接排查硬件和芯片是否 焊接 没有问题, 钢板焊接也是有可能有问题的.
如果 拉低 VEN 功耗没有问题了, 再使用 standby
, LPCD
, ULPCD
后记
移植 PN5190 过程非常痛苦, 主要还是自己芯片 xxxxSpi.c 与 xxxxSDK.c 的实现, NXP 采用的是引脚 uint32_t dwPinNumber 为引脚目标, 阅读参考 Kinetis 芯片的实现, 就花费了不少功夫.
比如函数 phDriver_PinConfig 的实现, 必须根据传入的参数(例如下面)实现引脚配置的 读/写/中断/配置上下拉 关系.
uint32_t dwPinNumber,
phDriver_Pin_Func_t ePinFunc,
phDriver_Pin_Config_t *pPinConfig
吐槽: 这个 PN5190(40Pin) 芯片, 官方居然没有 原理图/PCB封装库 支持…… PCB 封装图还是自己画, 该封装很小.
PN5190 这个芯片的实体样品, 外部是没有引脚金属裸露在外面, 手工焊估计是不可行的… 调试相当麻烦.
做 NFC 过程相当坎坷, 第一次选的是 ST25R3916 系列芯片, 奈何由于某些原因, ST 芯片无法实现对卡片 MIFARE Classic 进行读取, 但是 ST25R3916 数据手册说底层 可以实现这个系列的卡片支持, 但是 ST 因为法律原因无法提供 MIFARE Classic 相关方面的援助…
所以后面选择了 NXP 的芯片, 如果 ST 能实现 MIFARE Classic 卡片(估计有人已经实现, 但是网上找不到资源), 绝不要选择 NXP.
ST 的 NFC 软件库用起来比 NXP 的简单的多(移植方面).