找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

157

主题

559

帖子

1198

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。' x* P% ]4 ~; w
在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。
6 z6 @( k( v% q" _5 {这个程序的讲解是基于MSP430F149/169单片机的。
0 L- Y7 N2 K' R. E" L+ l! U
9 q, ^) W6 l- u+ ]+ E模块使用的是SPI接口,与单片机接口如下:9 m4 |+ o4 ^6 M% j0 \7 Q; h

/ @' L# L; \+ P#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   4 A. f- H- [1 N8 P+ m
#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA
5 \. {. [( `( j* Y  V#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)+ }; ?* j* B, a* o  ]9 u, v3 j+ K1 E
#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)' P5 |' ?  `9 z8 m3 Z
#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)6 I/ ]' r" f, W5 b0 o+ V
: O% c* y6 }; @0 B
要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;% V2 I* U7 l- z: ^% d
第一步:寻卡。
" j) C9 T  X6 x; L7 L! x   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型/ t4 z7 Z1 T7 L5 p, r9 V
if(status2== MI_OK)
) K8 \; p& V: r5 h{
& o; |! e" ?/ m  i         tochar(Temp[0]);
5 \; L( _5 r+ J1 g$ ytochar(Temp[1]);//输出卡类型
+ u2 D$ f: h5 l; [}% s% V+ y. z2 \) F
其中0x52代表寻天线区内全部卡。
% Q/ j" |  I3 u! D; F卡类型(TagType):9 `, B- e( B. p& ?
0x4400 =Mifare_UltraLight
0 q" `0 h# ~! m& i0x0400 =Mifare_One(S50)
' Z0 x* j5 u' H6 U- ?0x0200 =Mifare_One(S70)3 `7 e9 s/ y" w2 m
0x0800 =Mifare_Pro(X)
0 Q+ Z8 f% P# c* I* r" Q+ t3 e; V5 H0x4403 =Mifare_DESFire
( D! h" e, ?" G7 h6 E$ |比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
" u' W6 g5 l. k" N' u5 ~9 ]* r0 ^* h/ v8 z0 Y7 @; y1 P; v. Y
第二步:防冲突。
) c, \) x: e/ l- b3 E: M         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节
, s' ?. w" Z6 [1 R# _   if(status2==MI_OK)+ u3 A! l: O5 B# C: ~; T+ l) r9 S
    {
% y7 p: n, k% g; P% ]0 G! j       PutString0("Card Id is:");" G% I5 M; ?: X, r' o1 e/ J8 J# o
       tochar(UID[0]);
0 T; c$ K9 ], r       tochar(UID[1]);
% b: ~% O0 U( m* L% T4 P; t" D       tochar(UID[2]);
7 o( @% [: R) g: Y: H       tochar(UID[3]); //输出卡片序列号6 V3 j. n, ^7 {* K
}
: U- `% f- O3 A) b; E( J- J0 U第三步:选卡。& b7 n8 a& w' U2 o! W( \, n
         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节8 C4 s, Q1 i" x6 j# X8 ]+ L
第四步:在读写卡之前需要先进行认证。0 b% u: h$ v6 b& m$ }- Z
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);
; U3 T+ s0 S  c+ }0 P% o+ S% [其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。: F8 d. t' t0 T8 }
然后进行写操作:0 L! T) n* A4 `2 {6 ?
status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中
0 V( D" z: j$ z5 y$ l2 `7 I其中第一个参数  1  代表写入的地址为块1.
! G; p: L3 F% p8 F2 j或者进行读卡操作:- c: q( E0 p& s, Y
status2 = PcdRead(1, str);//读卡
  V& p5 q2 @  u4 R3 d其中第一个参数  1  代表读的地址为块1.  3 T1 ~* ^5 h% {) ?
读卡后得到的数据存放于数组str中。. l) S& C% |3 [/ j! S: `4 l

: f. y( d0 g! _- x. l" d
3 V! e4 @$ o$ c至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。1 {; a6 v( D; ]# ~' A) R+ _

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 | 只看该作者
真的谢了,给这么好资料啊!
+ {7 j4 u% x9 F: r& v/ n

169

主题

582

帖子

1242

积分

四级会员(40)

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

积分
1242
3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!
( K4 d. v$ v% W! _0 O8 {8 @; S

6

主题

288

帖子

764

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-22 03:42 , Processed in 0.057801 second(s), 34 queries , Gzip On.

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

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

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