题目说是操作,其实主要是移植。该芯片支持iic与spi两种操作方式,对于现在我使用的NFC06A1扩展板来说,默认即为spi模式,本文将记录下移植时需要注意的点.
: R# Q: J1 X: L! F1.原理图
% r) S- g! i5 w3 a4 {
& V r7 i# ^0 X扩展板引脚标注与实际板卡的引脚是不同的,这里需要根据实际修改一下。
$ {3 l1 H7 [1 s
) x9 l: e6 Y. s9 A, }# w2.spi配置
+ e6 Z4 t6 T* E1 S
+ X# p5 i3 X( o
上图是本次移植中,笔者使用的配置,亲测可行
8 ~! M# k: D2 q2 x+ Q9 Y0 l6 w. k3 g0 `8 @
3.外部中断配置) R1 o: [3 d9 o
- /**7 j* X1 h% W) B
- * @brief This function handles EXTI line3 interrupt.! Q+ j9 n2 @ u$ m" C6 m
- */
! ~0 m- R& C5 q* C. ]& K - void EXTI3_IRQHandler(void)) {0 q3 q: |2 _3 o* X. l4 Y: y
- {
% @& U" Q5 T; U# V- x8 ?4 i - /* USER CODE BEGIN EXTI3_IRQn 0 */+ ?7 j! D% J1 }# c5 i$ w# p
- & O* `4 B* N$ l7 ]
- /* USER CODE END EXTI3_IRQn 0 */& i& M8 d) q- l' c% |- q# H( Y
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
B( F* w0 b7 K/ V' n0 H - /* USER CODE BEGIN EXTI3_IRQn 1 */6 ]2 V! w9 Q0 `0 P
- st25r3916Isr();
. M* d4 v( y2 R( T; y - /* USER CODE END EXTI3_IRQn 1 */0 D5 K# B- Q* a0 Y$ |# d
- }
复制代码 需要在外部中断中加入st25r3916Isr();处理。注意:该函数操作了接口的读写,如果使用spi中断或者iic中断接受需要注意。建议使用操作系统的时候使用通知进行操作。
! W, }; |( ~# N5 d+ b9 \& |0 Q3 X# d$ N7 K S- e6 G6 @8 P
+ s) |$ s8 g. r, A
4.代码配置
& a+ w4 t8 C1 V基本所有的配置都集中在platform.h文件里面。下面代码是关于NFC支持相关功能的开关。
" S/ Y: h+ ~* i2 G& r4 e- y- #define RFAL_FEATURE_LISTEN_MODE true /*!< Enable/Disable RFAL support for Listen Mode */2 T/ I3 a0 u& H7 d7 A' n
- #define RFAL_FEATURE_WAKEUP_MODE true /*!< Enable/Disable RFAL support for the Wake-Up mode */
) l, m2 [& E+ n; r" N1 N0 F - #define RFAL_FEATURE_NFCA true /*!< Enable/Disable RFAL support for NFC-A (ISO14443A) */
9 k6 T V4 m# C$ w1 b/ P& H - #define RFAL_FEATURE_NFCB true /*!< Enable/Disable RFAL support for NFC-B (ISO14443B) */. _" |2 `, ?8 }* i
- #define RFAL_FEATURE_NFCF true /*!< Enable/Disable RFAL support for NFC-F (FeliCa) */& e. u/ l( L, C2 ]# J
- #define RFAL_FEATURE_NFCV true /*!< Enable/Disable RFAL support for NFC-V (ISO15693) */0 f; V+ [# ]9 ?' ^& t0 y! k
- #define RFAL_FEATURE_T1T true /*!< Enable/Disable RFAL support for T1T (Topaz) */- ~% f$ _) r" n2 q( {
- #define RFAL_FEATURE_T2T true /*!< Enable/Disable RFAL support for T2T (Mifare) */$ y0 R5 p* v1 i0 b
- #define RFAL_FEATURE_T4T true /*!< Enable/Disable RFAL support for T4T */2 b8 `: S- v: `2 ~9 W9 I
- #define RFAL_FEATURE_ST25TB true /*!< Enable/Disable RFAL support for ST25TB */
6 [; ?- I1 [- M8 T - #define RFAL_FEATURE_ST25xV true /*!< Enable/Disable RFAL support for ST25TV/ST25DV */( C; L7 D$ Z+ H
- #define RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG false /*!< Enable/Disable Analog Configs to be dynamically updated (RAM) */
; `) u0 w5 q, H& x: x4 ]5 A - #define RFAL_FEATURE_DPO false /*!< Enable/Disable RFAL dynamic power support */
( n% _* s( H! q2 y4 C D6 c' P' R, v - #define RFAL_FEATURE_ISO_DEP true /*!< Enable/Disable RFAL support for ISO-DEP (ISO14443-4) */' l) t- V- u M. @( v
- #define RFAL_FEATURE_ISO_DEP_POLL true /*!< Enable/Disable RFAL support for Poller mode (PCD) ISO-DEP (ISO14443-4) */
4 d8 f) y& I% k) C - #define RFAL_FEATURE_ISO_DEP_LISTEN true /*!< Enable/Disable RFAL support for Listen mode (PICC) ISO-DEP (ISO14443-4) */
! u0 R% @$ _. V' Q* { - #define RFAL_FEATURE_NFC_DEP true /*!< Enable/Disable RFAL support for NFC-DEP (NFCIP1/P2P) */7 Z+ d; |( g6 d0 C T* ?
- $ }3 ^! z! y3 P' X1 W9 C
- #define RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN 256U /*!< ISO-DEP I-Block max length. Please use values as defined by rfalIsoDepFSx */
2 H" a6 s: F3 W& H) L; C8 w: M - #define RFAL_FEATURE_NFC_DEP_BLOCK_MAX_LEN 254U /*!< NFC-DEP Block/Payload length. Allowed values: 64, 128, 192, 254 */0 ]- B, S6 x, E3 Q! u6 h
- #define RFAL_FEATURE_NFC_RF_BUF_LEN 258U /*!< RF buffer length used by RFAL NFC layer */+ z# g, f$ s* `; V6 W, Y! A7 z
$ }6 J5 C- k" C; t" r) J- Q+ g1 O1 M- #define RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN 512U /*!< ISO-DEP APDU max length. Please use multiples of I-Block max length */
! H4 ?' m; K y7 { - #define RFAL_FEATURE_NFC_DEP_PDU_MAX_LEN 512U /*!< NFC-DEP PDU max length. */
复制代码 s; Z) S( j( X
9 o2 _3 m/ [- G* q% R. m6 x5 m8 k3 A效果演示:* G" @3 }+ d9 P8 M' ?
% X$ B- B% G) u p读取M1卡卡号,不支持M1协议,但是支持NRFA。
5 L) U: ~; r- s
0 u o# X1 `; ?5 N- N& r
# Z3 e9 X, K2 ^/ s5 F5 d: }
手机读取板子,识别为NFCF协议了,其实是因为手机啥都支持,读到的就看板子处在那种模式。; I0 V" }/ T" c
7 A9 g8 w h: Z! T
8 V, l; t( P% P) v. r" a* B
相关打印
8 `, E3 {' g7 A" w6 ^( z; o8 M) \: r" H! I
最后附上程序,注:为了减小代码体积,删除了CMSIS的DSP相关文件
' U* I+ N1 ~4 m2 I
nfc.zip
(6.59 MB, 下载次数: 0)
|