题目说是操作,其实主要是移植。该芯片支持iic与spi两种操作方式,对于现在我使用的NFC06A1扩展板来说,默认即为spi模式,本文将记录下移植时需要注意的点.' N4 M$ A: i [* `* L# B
1.原理图
2 O& T1 U5 B) V. P; p
, y9 C6 {) W; `- _ H8 A扩展板引脚标注与实际板卡的引脚是不同的,这里需要根据实际修改一下。
6 u0 F: j0 ^) Q3 c9 R
- H% x* G! B2 h: J# L P2.spi配置
- o- S1 F9 D& \9 M! z3 j3 a$ A
" E; e$ x" p/ R. B
上图是本次移植中,笔者使用的配置,亲测可行
) T# f- E) x, s) I: z9 ^, X/ m9 r; M, R
3.外部中断配置/ H, @$ ]5 ]1 g+ F5 {/ P# c
- /**
+ s; p: v- R) _' X# ~3 O - * @brief This function handles EXTI line3 interrupt.
' k" ^$ _: E0 U) e# w z4 v - */
) |2 M1 c2 ^$ g. {! h: [ - void EXTI3_IRQHandler(void)
8 D+ X; h' U" W+ _- f - {) s, a/ E! d! T1 w
- /* USER CODE BEGIN EXTI3_IRQn 0 */# [. j2 C9 P+ g$ Y4 A% ~ L
8 j! f3 K9 a p! ^' ]2 H) P- /* USER CODE END EXTI3_IRQn 0 */5 P. W$ B/ z7 N+ g+ P
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);2 |" A' i0 T6 D: j
- /* USER CODE BEGIN EXTI3_IRQn 1 *// \& [+ s2 b0 X+ |. p( R' ]# j+ [
- st25r3916Isr();
7 q% r+ U2 V% B5 O - /* USER CODE END EXTI3_IRQn 1 */
$ j) F2 d0 {, y9 ^ - }
复制代码 需要在外部中断中加入st25r3916Isr();处理。注意:该函数操作了接口的读写,如果使用spi中断或者iic中断接受需要注意。建议使用操作系统的时候使用通知进行操作。
5 g! X# {: ~! r7 O
. X+ k+ Y8 z+ H* x( `: ]+ {8 Z( A- W/ ^- ^
4.代码配置, p/ `$ F& i: X8 C" r
基本所有的配置都集中在platform.h文件里面。下面代码是关于NFC支持相关功能的开关。. V$ h: F9 I, }$ _+ ]! j
- #define RFAL_FEATURE_LISTEN_MODE true /*!< Enable/Disable RFAL support for Listen Mode */
" K+ ~* F; t( T9 q* h# q - #define RFAL_FEATURE_WAKEUP_MODE true /*!< Enable/Disable RFAL support for the Wake-Up mode */
" {. I+ e) k2 |& z( Q7 M - #define RFAL_FEATURE_NFCA true /*!< Enable/Disable RFAL support for NFC-A (ISO14443A) */6 ]9 \- W; }+ m( `# V1 o
- #define RFAL_FEATURE_NFCB true /*!< Enable/Disable RFAL support for NFC-B (ISO14443B) */
% I; Y* e' C- c( b - #define RFAL_FEATURE_NFCF true /*!< Enable/Disable RFAL support for NFC-F (FeliCa) */
' T4 I& e+ ?- [ - #define RFAL_FEATURE_NFCV true /*!< Enable/Disable RFAL support for NFC-V (ISO15693) */
. [/ B- e. j9 c" k, H - #define RFAL_FEATURE_T1T true /*!< Enable/Disable RFAL support for T1T (Topaz) */
- D8 t8 \! u+ L2 c5 b9 M9 [ - #define RFAL_FEATURE_T2T true /*!< Enable/Disable RFAL support for T2T (Mifare) */+ O0 A0 s6 r, c8 P$ d. E/ i5 C8 s
- #define RFAL_FEATURE_T4T true /*!< Enable/Disable RFAL support for T4T */0 C/ h: D. W- J G8 V* B. X- K4 P
- #define RFAL_FEATURE_ST25TB true /*!< Enable/Disable RFAL support for ST25TB */
0 Z! L2 B, s) ^ - #define RFAL_FEATURE_ST25xV true /*!< Enable/Disable RFAL support for ST25TV/ST25DV */ z' L- q4 E" v a
- #define RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG false /*!< Enable/Disable Analog Configs to be dynamically updated (RAM) */2 x! e" Y+ A3 Z1 [4 O3 }/ G6 D K
- #define RFAL_FEATURE_DPO false /*!< Enable/Disable RFAL dynamic power support */$ Z! H+ o; }& z
- #define RFAL_FEATURE_ISO_DEP true /*!< Enable/Disable RFAL support for ISO-DEP (ISO14443-4) */
7 _6 ?* k1 a# d& _+ p - #define RFAL_FEATURE_ISO_DEP_POLL true /*!< Enable/Disable RFAL support for Poller mode (PCD) ISO-DEP (ISO14443-4) */6 r* |8 B% r+ V4 _
- #define RFAL_FEATURE_ISO_DEP_LISTEN true /*!< Enable/Disable RFAL support for Listen mode (PICC) ISO-DEP (ISO14443-4) */4 {' {8 C1 ~) C6 Y9 }1 i
- #define RFAL_FEATURE_NFC_DEP true /*!< Enable/Disable RFAL support for NFC-DEP (NFCIP1/P2P) */
- r- a* e8 Z( ?4 x$ B& E" S
7 }! L& o! q8 y% O1 r- #define RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN 256U /*!< ISO-DEP I-Block max length. Please use values as defined by rfalIsoDepFSx */4 u! R( G+ E; x9 q( F
- #define RFAL_FEATURE_NFC_DEP_BLOCK_MAX_LEN 254U /*!< NFC-DEP Block/Payload length. Allowed values: 64, 128, 192, 254 */2 c1 U6 }$ o. A0 E# @
- #define RFAL_FEATURE_NFC_RF_BUF_LEN 258U /*!< RF buffer length used by RFAL NFC layer */
( M2 ?: v5 G' O" M* m, f: U8 V; p3 s - 1 V0 |1 a4 d+ L* F$ T
- #define RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN 512U /*!< ISO-DEP APDU max length. Please use multiples of I-Block max length */
8 V5 W- _" k; O i. S8 D' T& C5 [ - #define RFAL_FEATURE_NFC_DEP_PDU_MAX_LEN 512U /*!< NFC-DEP PDU max length. */
复制代码
9 Q+ t9 M% h1 B0 I6 r0 T/ b6 P0 y; V7 Z6 L, A* D& h5 J, x
效果演示:
\- K9 U. s4 R* b# ?, c6 U
% k5 p* {9 a8 @读取M1卡卡号,不支持M1协议,但是支持NRFA。
0 ?9 K4 n# @& u
6 r) B& v7 ~0 c2 A
. U3 ^! k _9 ~2 M
手机读取板子,识别为NFCF协议了,其实是因为手机啥都支持,读到的就看板子处在那种模式。
4 f7 p# y H- b7 a& O& C2 a3 W0 }
& ^3 n% e1 r% v% y. J
7 P( U7 D6 J- L3 [' x5 V' x% v( I
相关打印
& ?/ a; i4 b3 y( _6 Y0 {% W: `. T
最后附上程序,注:为了减小代码体积,删除了CMSIS的DSP相关文件; {" l2 _4 w" s: ]
nfc.zip
(6.59 MB, 下载次数: 0)
|