找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 298|回复: 3
打印 上一主题 下一主题

RFID-RC522速成教程(基于msp430单片机的程序讲解)

[复制链接]

157

主题

559

帖子

1198

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1198
跳转到指定楼层
1#
发表于 2016-6-22 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。
2 H# C$ y' G7 O; Y" `在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。
% r1 j% o# k; G" x! [( d这个程序的讲解是基于MSP430F149/169单片机的。
7 B/ t# |8 d; K3 ^+ y; J% h
0 n+ M# n' G  {2 M# a模块使用的是SPI接口,与单片机接口如下:
* b1 Q! h! ~* ?
, J/ |& P' x' R2 {" i#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   8 Y" [& Z- r5 Y, K% a" V
#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA. e# V: [7 ?$ ~$ s% Y& W
#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)
( f/ m) v; t- Y# ~4 s3 E#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)8 \8 R9 z+ m( I& J6 ?
#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)
( z& T: P/ y9 a8 T/ e4 N9 ?7 e( ^* r, Q$ x3 _" W
要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;$ ]+ }/ ]8 a' l$ `6 c! C8 I
第一步:寻卡。
" {% y5 W: [( g) K   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型
. u" F& D. j% i: j; j4 c' _, c& c1 Hif(status2== MI_OK)
% y1 G7 }' K9 E9 T; _/ J$ C{
2 r! _2 F2 B  @: l! h# [         tochar(Temp[0]);
/ S1 }( h. N: w1 o3 }2 B+ Qtochar(Temp[1]);//输出卡类型& d. t, L: D: X" Q1 y! E* G0 C$ E8 u
}
" I) A- b' o2 m% _7 V* O' x其中0x52代表寻天线区内全部卡。# O* q) M4 h7 y" `2 G  X1 ?
卡类型(TagType):) ~6 [! y: l0 z, ~  Y- P  L
0x4400 =Mifare_UltraLight
% l' p9 S& t* H9 O0x0400 =Mifare_One(S50)& W+ }2 a  K$ m
0x0200 =Mifare_One(S70)
$ e/ u* v  W* V0x0800 =Mifare_Pro(X); M- }' q8 N7 f  r2 o. _2 P: g  I+ G
0x4403 =Mifare_DESFire
( O3 Y( j5 C( e9 i$ g. y比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
, h& Z! N5 H7 W% ^4 y& {# j9 O* B: F* y2 ^0 I4 c, P2 q$ F, A6 N
第二步:防冲突。  w2 j2 g( J2 N0 k1 v  W+ K# g
         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节& U& {8 x+ n' r/ L
   if(status2==MI_OK)
9 c5 o3 u% |% L) d& i* Y; B3 C, ]" K4 I    {1 O0 B5 N7 [1 r/ O6 K
       PutString0("Card Id is:");
$ j4 ]6 L# S, P' m: z       tochar(UID[0]);7 I" [5 A" b, L/ B% h
       tochar(UID[1]);. l, c' j1 [9 A) [, M4 V
       tochar(UID[2]);
8 D+ g! H2 ]8 B       tochar(UID[3]); //输出卡片序列号
$ N* T" N' t  G+ }/ t" \% \& K}6 I! u* y0 K' `: S
第三步:选卡。
; q0 J' w" c( R* W+ L) e         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节
! p' O9 X# s% q/ c第四步:在读写卡之前需要先进行认证。' H2 P" p4 t1 u" E. K* A- z: H
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);, t. k  p2 O& O7 G. q( I6 [
其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。
0 j' ?3 a3 j, o: Q( {/ \然后进行写操作:
& x1 m; z. e7 vstatus2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中
& e4 [  I1 U" b' X其中第一个参数  1  代表写入的地址为块1.- I, _* k0 Y( k  e: q* k7 T% g
或者进行读卡操作:
/ C1 X5 R* c0 m, Q- e2 E' Pstatus2 = PcdRead(1, str);//读卡
4 [/ @* @2 ^. C) B其中第一个参数  1  代表读的地址为块1.  ) U) f% ?) p1 }7 e
读卡后得到的数据存放于数组str中。7 M) h9 d+ w) y3 u, |& J+ M

7 U- W% F; u0 L' T' R* e# U
# }% K+ P% W6 H/ X' v. \至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。
# Z* H2 h' u' z) a* o

RC522速成教程.pdf

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

MSP430F149读卡号参考例程.rar

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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

163

主题

525

帖子

1236

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1236
2#
发表于 2016-6-23 13:44 | 只看该作者
真的谢了,给这么好资料啊!% U1 Z$ h1 H) ]

169

主题

582

帖子

1242

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1242
3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!
( K; `/ ?' D, y! _6 Q4 @

6

主题

288

帖子

764

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
764
4#
发表于 2018-5-4 17:30 | 只看该作者
学习了,感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-21 23:28 , Processed in 0.058695 second(s), 35 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表