EDA365电子工程师网

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

作者: wzs6668    时间: 2016-6-22 15:20
标题: RFID-RC522速成教程(基于msp430单片机的程序讲解)
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。3 Y/ x4 y+ M& w4 Z8 j
在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。( G/ A) W/ l8 B2 ]# g6 V* [
这个程序的讲解是基于MSP430F149/169单片机的。+ o0 ?' N* H* w

, f5 R4 ~( Z2 M4 j模块使用的是SPI接口,与单片机接口如下:
/ D- b& a: W" S1 w$ W0 W; P* b2 b$ M6 u- S$ D4 A1 b' o
#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   # |/ `0 ?5 w3 u  Z% S% c4 s
#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA
2 c+ |* ~+ p- y, o5 ]: H) z' m  C#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)9 _1 b& p; n/ W
#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)
" P" \& q$ o# W. Y8 W$ I; \#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)
* @9 ?  |& O4 q7 [: m# G9 P4 X  o! V: T3 j8 t8 S' L
要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;
0 A( y% e8 i7 F9 e第一步:寻卡。3 M! ]2 m: _, X. G' V3 J% m
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型  F  e- t( g5 T" u- L% G7 M
if(status2== MI_OK)
$ P$ _! U) _9 W$ @; x3 W{+ Z3 S$ g- }2 z( n' U
         tochar(Temp[0]);' @- z- k( K4 H" s
tochar(Temp[1]);//输出卡类型. W9 |) |1 P, W! K! J& c$ Y  z
}
  x7 |" i# G  R; c* a& U其中0x52代表寻天线区内全部卡。
& ^2 T: |' i8 @) ]8 T0 m" M- B2 G卡类型(TagType):8 Q. H& _  d) \. C
0x4400 =Mifare_UltraLight) A) |9 v% z4 U( p4 Z2 C
0x0400 =Mifare_One(S50)' i- H+ J! z7 \- X4 x' O: U
0x0200 =Mifare_One(S70)5 ?9 V- j9 _2 O: U$ L
0x0800 =Mifare_Pro(X)9 ]! s- V3 ~* ?( F
0x4403 =Mifare_DESFire7 R3 Z. q- A6 |, n: ?; V% _
比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
; R$ F; T. G$ c% g: @" X$ b, S: a0 }* }6 X% p) o
第二步:防冲突。
/ g5 S5 a& ^; i0 v4 a$ z9 p# C         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节
) d2 X& \/ Q6 N4 J+ b   if(status2==MI_OK)" _6 |; \* l0 ]" p# ]
    {9 L9 }& ]( d! M4 @4 a  p: k
       PutString0("Card Id is:");
2 a& J" H1 \3 M  [       tochar(UID[0]);8 W+ y3 m% p* L
       tochar(UID[1]);% x3 G+ ]" ^( D! J
       tochar(UID[2]);! |7 X+ E* z- g2 P
       tochar(UID[3]); //输出卡片序列号) m, I; e* y3 P6 T
}: m4 ?2 f5 K9 U* V" z7 i1 D; N
第三步:选卡。1 {4 r6 B' N" [/ Z7 O5 B  c; M' E
         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节
! P' \0 e* z2 ?( X# `0 k第四步:在读写卡之前需要先进行认证。; }2 A5 F9 @- y- W) p; _) \
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);
1 ]# O' n  R( @1 W5 y- w, V% s其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。
- f0 ^1 h0 B) Q2 J) X& k/ }- F% m3 a然后进行写操作:
( q6 u  @) D+ e3 Rstatus2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中
# k6 o* O/ e& H* e其中第一个参数  1  代表写入的地址为块1.% ~( _4 t9 k, P9 J
或者进行读卡操作:) ]9 T; V' \6 T, L3 P5 C2 s6 S
status2 = PcdRead(1, str);//读卡% L4 ~' M3 u/ S0 b
其中第一个参数  1  代表读的地址为块1.  
( @) r7 G7 ]2 K4 ?2 T  E# }读卡后得到的数据存放于数组str中。
/ a: ^# c6 ?* p
3 G5 I" l; S- O
4 B3 X! {) C: q7 ^至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。6 v! ]" X4 F/ t: l, Q$ |

RC522速成教程.pdf

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

MSP430F149读卡号参考例程.rar

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


作者: duzy    时间: 2016-6-23 13:44
真的谢了,给这么好资料啊!4 T3 t1 U- S7 ]( K2 j

作者: liao821    时间: 2016-6-23 14:42
路过捧场,谢谢分享!! Q3 U0 g  J; g0 f2 B  p! e# L2 g

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




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