EDA365电子论坛网

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

作者: wzs6668    时间: 2016-6-22 15:20
标题: RFID-RC522速成教程(基于msp430单片机的程序讲解)
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。
9 d' a7 V: i6 {4 C5 S3 E$ D0 U, Y在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。
# G! q# a7 v, ^8 @' Z这个程序的讲解是基于MSP430F149/169单片机的。1 ]4 p9 T. Q  |# z# _
2 x/ q+ X& w" p% f
模块使用的是SPI接口,与单片机接口如下:
. F- N4 Q1 L' J% I) {% U( Q  S5 z; a. S
#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   % B: o& v" F, _7 D6 W' ^/ J' f% |
#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA" a9 \& l6 B% @% `
#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK); w9 Z; j0 }, f' K* l
#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)
8 u8 P) I5 ~; g1 K#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)+ _9 D; k0 J# V8 K+ w' E  |

& y4 Z" F  n, ?' H* V要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;9 f' ]' _2 ]; i7 K; d3 _
第一步:寻卡。' E; a$ @- k* o" [* ^
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型
+ A. U2 d* g0 K1 tif(status2== MI_OK)
. Q9 g3 `5 Z( T0 U( a( }, d- k{
5 G' ?! u4 @+ m# {         tochar(Temp[0]);
. S7 s7 \, R5 G0 Y" otochar(Temp[1]);//输出卡类型4 o* c; b, _$ B! @- [5 |5 x
}6 F9 }4 r% d* \. y, m  V7 q
其中0x52代表寻天线区内全部卡。
7 q6 H1 Y% l( D. p+ h卡类型(TagType):
( g: I2 O2 F  U) k. Z! Y2 m0x4400 =Mifare_UltraLight4 v+ x% E- D1 U1 T0 |7 y
0x0400 =Mifare_One(S50)" e  g% \( Y# T, T3 |
0x0200 =Mifare_One(S70)( |5 n# @( F0 ^# x. \
0x0800 =Mifare_Pro(X)
7 P5 y/ z4 q8 }! E5 v' c1 p! t0x4403 =Mifare_DESFire$ t8 |- ^- p3 [+ w( v
比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
' R$ o$ G1 J: U5 q: [! j/ [' V$ |. b9 E$ v
第二步:防冲突。
0 L8 d8 I6 M* g0 b$ T0 Z9 {         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节
' ?3 Y3 }) E& `5 X1 P7 ^! ^. Y   if(status2==MI_OK)
& h" d3 L4 k0 c( w    {2 V2 y  A: W- O  z
       PutString0("Card Id is:");/ s& ^4 W' \7 y, I
       tochar(UID[0]);4 S; w$ y6 L  [; G1 l* A
       tochar(UID[1]);
$ O4 H7 F: |( E4 ^% h       tochar(UID[2]);
( P# w! a& H( n       tochar(UID[3]); //输出卡片序列号" ]1 M; D# W+ [) D9 U
}
$ I2 s* o% ?5 `! b1 \# B4 z- V第三步:选卡。7 y0 t! z" g2 m: j( ?
         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节
) P& _0 x. r4 H# F& _, L第四步:在读写卡之前需要先进行认证。
: O7 Q, z1 ~- }- P  u         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);
4 b2 E! I3 J& L其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。4 e4 S2 G, q5 b0 x! U
然后进行写操作:
, D0 H( j% W7 ^6 k! zstatus2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中. @5 n( @6 U/ Q
其中第一个参数  1  代表写入的地址为块1.
) ]& G: S! k9 L) l7 b. b% Y6 j或者进行读卡操作:' P# {- I, R: C/ m1 j  e
status2 = PcdRead(1, str);//读卡9 ]$ C6 U. i5 q2 U* Q
其中第一个参数  1  代表读的地址为块1.  
! x! x: c. r/ W读卡后得到的数据存放于数组str中。
+ ~5 }3 t. z/ M% M, i9 ~: F" a2 z& Y' }6 I2 |
: T3 ?1 G% W' a- e' N* a3 [9 E
至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。9 O8 K+ d9 v; C; T

RC522速成教程.pdf

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

MSP430F149读卡号参考例程.rar

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


作者: duzy    时间: 2016-6-23 13:44
真的谢了,给这么好资料啊!
) x4 Y5 ?: H: J
作者: liao821    时间: 2016-6-23 14:42
路过捧场,谢谢分享!
/ f9 E7 E1 ~; D
作者: phicialy    时间: 2018-5-4 17:30
学习了,感谢分享
作者: manpke    时间: 2019-7-24 21:07
谢谢想看看
作者: manpke    时间: 2019-7-25 08:03
谢谢了
作者: wu68aq    时间: 2019-7-25 16:39
顶楼主
作者: yuan_2020    时间: 2020-1-9 10:29
谢谢分享,学习了




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2