EDA365电子工程师网

标题: RFID-RC522速成教程(基于msp430单片机的程序讲解) [打印本页]

作者: wzs6668    时间: 2016-6-22 15:20
标题: RFID-RC522速成教程(基于msp430单片机的程序讲解)
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。7 A1 m& [5 P' l9 |0 l- D0 |3 e: t
在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。' J" n; m& Z$ S: `. h8 P9 z
这个程序的讲解是基于MSP430F149/169单片机的。
7 V9 ^+ y( L5 a) s  V4 o+ I2 E& @9 H8 t/ ^# h9 O
模块使用的是SPI接口,与单片机接口如下:' Q1 s7 I- F+ U) I, E

0 d* V+ E: C7 v" E  X8 `3 ]2 }. p#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   
$ O. C/ f  c# P  A# J#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA
1 y1 m( e* A- K- p1 T  d/ X# I* e#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)4 W3 O: i- g$ `- @3 [
#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)  A/ E; c5 Z4 F- f+ s; p
#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)4 T& S$ m% d' I

/ @+ w& T3 V* y2 n. b# t1 t) y要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;
8 ]2 i7 f  k3 T. `5 e% u第一步:寻卡。4 F" p/ \" @" I0 F  r
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型
8 P0 W" x: l# d  _& J  S1 Qif(status2== MI_OK)
4 h8 s" N0 Z: d8 Y) y{: Y1 f" t# M9 n8 S" W/ y9 ^8 Y3 P
         tochar(Temp[0]);4 ]/ R3 m5 h# g2 _- u
tochar(Temp[1]);//输出卡类型
& B+ ]( ]9 a+ E+ x9 j, i# t}
' e( s" H, \' Z# p3 q; F其中0x52代表寻天线区内全部卡。" w' [% v9 h) y% q2 a2 Z
卡类型(TagType):
1 p2 a$ z4 G! N. n! B& h0x4400 =Mifare_UltraLight
: c7 w; M6 P" v3 e9 n, V! `5 t. ^0x0400 =Mifare_One(S50): C6 M$ K5 d2 u2 T6 }: l9 A
0x0200 =Mifare_One(S70)
9 ]. E$ F3 w1 g5 x0x0800 =Mifare_Pro(X)8 s  p# v: a! T
0x4403 =Mifare_DESFire- z- A; u2 p5 Z4 \; `$ }, @7 ?
比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
" X! a, c5 N. t. |  t5 @1 s9 D
! P* l' j- C/ _第二步:防冲突。2 @, f9 G, W1 y/ y5 o0 T; ?
         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节- S# n) j) f; a5 D1 w& U
   if(status2==MI_OK)
( U- t" W  y4 b6 A& c0 h2 ~    {
( f% V3 ?8 x8 ]" N( i. Z* ]- K       PutString0("Card Id is:");3 ]5 G" a3 N" L1 O- _5 b. a5 I
       tochar(UID[0]);3 H! _8 M) ^! X/ h/ T" h) C" S; f; J) J
       tochar(UID[1]);
0 v% F2 @. @7 `7 p# s       tochar(UID[2]);0 o' y7 _: N7 T
       tochar(UID[3]); //输出卡片序列号
( y6 g9 `8 h8 l2 H1 ~1 Z}* h- o+ G0 q8 L( E  m( @
第三步:选卡。
* P2 O# F4 p& h         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节1 r% I) W& O0 n) `
第四步:在读写卡之前需要先进行认证。8 K7 T, q( G% N& r& V& V- O; f
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);5 a4 i/ E: t3 P# \
其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。6 f, E" o9 L% P% l& V& K6 v$ r. a) F5 D
然后进行写操作:
8 v( K- w7 x. a# H) Dstatus2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中* ?; S5 P2 S% |( f" [: u0 d( l
其中第一个参数  1  代表写入的地址为块1.
0 n9 C  z  k; o; `, C3 h. W7 B$ h或者进行读卡操作:; Y& P/ A0 `) g% `+ j
status2 = PcdRead(1, str);//读卡& x0 A& v& \9 R: B5 g
其中第一个参数  1  代表读的地址为块1.  
6 h4 g5 m; f0 u读卡后得到的数据存放于数组str中。
2 r- }& g4 q9 h4 I! n* ]( C$ _1 m% \% R
& ]6 @9 S, A/ i. b% K1 d& Y6 Y
至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。  W7 U6 G9 C: t, q# t

RC522速成教程.pdf

318.93 KB, 下载次数: 3, 下载积分: 威望 -5

MSP430F149读卡号参考例程.rar

404.19 KB, 下载次数: 1, 下载积分: 威望 -5


作者: duzy    时间: 2016-6-23 13:44
真的谢了,给这么好资料啊!4 \3 [9 b# Y$ B) ?/ B. n

作者: liao821    时间: 2016-6-23 14:42
路过捧场,谢谢分享!0 H' K' k/ c4 }* W; }8 d0 |. n5 {' u

作者: phicialy    时间: 2018-5-4 17:30
学习了,感谢分享




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2