NFC代码流程

NFC是基于RFID发展而来。RFID即电子标签,跟条码的作用相同,但RFID由于通过RF进行识别,无须露在产品外部。NFC所支持的标准14443和15693也都是RFID的标准。

14443为Proximity Card标准,其radio范围为几厘米

15693为Vicinity Card标准,范围较长,可达1~1.5米

NFC为一个新标准,其目的为让智能手机间可以通过短距离radio进行数据传输。其作用于蓝牙相似,但传输距离较蓝牙更短,但更容易建立连接,并且更省电。

从android文档来看,android支持的NFC标准有:

NfcANFC-A (ISO 14443-3A)

NfcBNFC-B (ISO 14443-3B)

NfcFNFC-F (JIS 6319-4)

NfcVNFC-V (ISO 15693)

IsoDepISO-DEP (ISO 14443-4)

MifareClassic

MifareUltralight

android NFC代码位置

frameworks\base\core\java\android\nfc - frameworks中java代码

frameworks\base\core\jni - frameworks中jni代码,会跟libnfc交互

packages\apps\Nfc - app,会跟libnfc和frameworks交互

device\samsung\tuna\nfc - 设备厂家提供的hardware lib

external\libnfc-nxp - libnfc库,nfc数据的读取和解析

初始化NFC

nfc_jni_initialize(), packages/apps/Nfc/jni/com_android_nfc_NativeNfcManager.cpp

nfc_jni_configure_driver,link type通过ro.nfc.port获取,为COM1/COM2...

phLibNfc_Mgt_ConfigureDriver, src/phLibNfc.c

phDal4Nfc_Config,根据link type设置dal回调函数,init然后open设备

pthread_create(&(nat->thread), NULL, nfc_jni_client_thread, nat)创建线程,处理协议栈读写消息

phLibNfc_Mgt_Initialize(), libnfc-nxp/src/phLibNfc.c

phHal4Nfc_Open(), libnfc-nxp/src/phHal4Nfc.c

phHal4Nfc_Configure_Layers(), assign phDal4Nfc_Register to pointer layer_registry

phHciNfc_Initialise()


phHciNfc_Initialise()

phLlcNfc_Register(), phLlcNfc.c, called through func pointer layer_registry in phHal4Nfc.c

phLlcNfc_Interface_Register(), libnfc-nxp/src/phLlcNfc_Interface.c

phDal4Nfc_Register(), libnfc-nxp/Linux_x86/phDal4Nfc.c, called through layer_registry pointer

plower_if->init(),即phLlcNfc_Init

phLlcNfc_H_CreateUFramePayload

phLlcNfc_StartTimers,frame类型为init_u_rset_frame

因此, 通过指针,phHal4Nfc中设置的两层的注册函数phLlcNfc_Register和phDal4Nfc_Register依次被调用。


phLlcNfc_Interface_Register将phLlcNfc_WrResp_Cb传入到Dal,这个函数会在发送消息完成后被调用。


phLlcNfc_Init会导致有数据通过uart发出。发送成功后,会调用LLC层的phLlcNfc_WrResp_Cb。phLlcNfc_WrResp_Cb会尝试从uart上读取回应。(我这里发现读取回应的长度为0,导致crash)


phDal4Nfc_Register

向nfc注册了phDal4Nfc_Init和phDal4Nfc_Read。


phDal4Nfc_Init会调用到phDal4Nfc_Config。在phDal4Nfc_Config中,获取NFC_HARDWARE_MODULE_ID,得到hardware动态库的信息,打开和配置串口。最后,会调用phDal4Nfc_StartThreads来启动一个读写线程。


phDal4Nfc_Read会post信号量nfc_read_sem。phDal4Nfc_StartThreads获取信号量nfc_read_sem后,会从串口中读取数据。

扫描和读取tag

com_android_nfc_NfcManager_enableDiscovery(), Nfc/jni/com_android_nfc_NativeNfcManager.cpp

nfc_jni_start_discovery_locked()

phLibNfc_RemoteDev_NtfRegister(nfc_jni_Discovery_notification_callback), 传入回调函数

发现tag后,

nfc_jni_Discovery_notification_callback()

e->CallVoidMethod(nat->manager, cached_NfcManager_notifyNdefMessageListeners, tag);

notifyNdefMessageListeners(), NativeNfcManager.java

sendMessage(NfcService.MSG_NDEF_TAG, tag);

NfcService.java收到MSG_NDEF_TAG,

findAndReadNdef(), Nfc/src/com/android/nfc/nxp/NativeNfcTag.java

readNdef();

doRead(), Nfc/jni/com_android_nfc_NativeNfcTag.java

phLibNfc_Ndef_Read();

new NdefMessage(buff), core/java/android/nfc/NdefMessage.java

parseNdefMessage(data),

android_nfc_NdefMessage_parseNdefMessage()

phFriNfc_NdefRecord_GetRecords(), 进入libnfc

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: ST25R NFC读卡器的开发流程主要包括以下几个步骤。 1. 硬件设计:首先,根据需求设计读卡器的硬件方案,包括电路板设计、天线设计等。考虑到读卡器的尺寸、功耗、性能等因素,选择合适的硬件元件。 2. 软件开发:在硬件设计完成后,需要进行软件开发。ST25R NFC读卡器可以使用STM32微控制器进行驱动。开发者需要使用相应的开发工具和编程语言,编写驱动程序,实现读卡器与NFC标签之间的通信协议等功能。 3. 集成测试:当硬件和软件开发完成后,需要进行集成测试。测试过程中,需要验证读卡器的功能是否正常,如能够正常读取NFC标签的信息,支持不同类型的NFC标签等。 4. 优化性能:在测试过程中,可能会发现一些改进的地方,比如增加读写速度、提高读取距离等。开发者需要根据测试结果进行性能优化,修改硬件和软件参数,以满足项目的要求。 5. 量产生产:当读卡器的功能和性能都满足要求后,可以进行量产生产。这包括制造读卡器的PCB板、组装硬件元件、安装软件等工作。 6. 上市销售:最后一步是将读卡器推向市场销售。开发者需要确定合适的市场渠道,制定推广策略,并与销售渠道合作,将读卡器推向消费者。 总之,ST25R NFC读卡器的开发流程包括硬件设计、软件开发、集成测试、性能优化、量产生产和市场推广等方面。不同项目可能会有所差异,但以上步骤是较为通用的流程。 ### 回答2: ST25R NFC读卡器的开发流程通常包括以下几个步骤: 1. 硬件设计:首先需要设计读卡器的硬件电路,包括选择适当的ST25R系列芯片、天线设计、电源电路、通信接口等。硬件设计需要考虑功耗、通信性能、成本和尺寸等因素。 2. 软件开发:在硬件设计完成之后,需要进行软件开发。首先是为ST25R芯片编写驱动程序,使其能够正确运行并实现读卡器的基本功能。然后,根据具体需求,开发应用软件来实现不同的功能,如读取NFC标签数据、与其他设备进行通信等。 3. 软硬件集成:将软件与硬件进行集成,确保软件可以正确地与硬件交互。这一步需要进行严格的测试和调试,以确保读卡器的稳定性和可靠性。 4. NFC标准和认证:在开发过程中,需要遵循NFC标准和认证要求,以确保读卡器的兼容性和互操作性。此外,如果需要将读卡器用于特定行业或场景,还需要进行相关的认证和合规性测试。 5. 集成测试和优化:在完成软硬件集成后,需要进行集成测试,以验证读卡器的功能和性能。根据测试结果,进行必要的优化调整,以达到预期的性能指标。 6. 批量生产和上市:当读卡器开发完成,经过验证和优化后,可以进行批量生产,并进行市场推广和销售。此阶段还需要与供应链合作,确保产品的稳定供应和售后服务等。 总之,ST25R NFC读卡器的开发流程包括硬件设计、软件开发、软硬件集成、NFC标准和认证、集成测试和优化以及批量生产和上市等多个环节,其中每个环节都需要经过严格的测试和调试,以确保读卡器的功能和性能达到预期。 ### 回答3: ST25R NFC读卡器的开发流程可以分为以下几个步骤。 首先,确定需求和功能。确定开发的目标和所需要的功能,例如读写NFC标签、处理通信协议等。 其次,选取适当的硬件平台。ST25R系列提供了不同型号的NFC读卡器模块,选择适合项目需求的模块,比如ST25R3911或ST25R3916。 然后,进行硬件布局设计。根据选定的硬件平台,设计电路和布局,并确保它们符合NFC的相关规范和指导。 接下来,进行软件开发。使用ST25 SDK提供的开发工具和API,编写软件代码来控制NFC读卡器模块。这些代码可能包括初始化读卡器、读写NFC标签、处理通信协议等功能。 在软件开发期间,可以通过调试工具来测试和验证开发的功能。ST25R系列提供了相应的调试工具和示例代码,可以方便地进行调试和验证。 最后,进行系统集成和测试。将开发的硬件和软件进行集成,并进行全面的测试,确保读卡器的功能和性能符合设计要求。 总结起来,ST25R NFC读卡器的开发流程包括确定需求和功能、选取硬件平台、进行硬件布局设计、软件开发、调试和验证以及系统集成和测试等环节。通过按照这个流程进行开发,可以确保最终的产品能够满足需求并达到预期的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值