找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

157

主题

559

帖子

1198

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。
0 n$ l6 x: b' Z' `8 ^. ~在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。
. m# _* j% w, |- I这个程序的讲解是基于MSP430F149/169单片机的。- S# ?6 x' r5 J) L* l9 Y# D

# {# H! ]5 g3 I2 F1 B模块使用的是SPI接口,与单片机接口如下:! Y4 i7 E) R$ A5 Y

6 Y# Y- W! m3 T, L& k  Y#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   
! h% j3 N/ P! `9 U#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA
8 l+ C. I, n6 G* H- Z#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)
- E  s& d- c0 o7 W#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)
, D$ A' R0 u9 j1 S: B#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)  [8 y2 G! r, ], O( v$ @

7 P" l7 n2 C, g6 B0 x0 X% z要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;
7 M0 V: l6 G  @) f0 {: o: s) W7 A第一步:寻卡。" G% n) z* q4 R5 M( {9 `
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型
1 V. h9 Y& \( Z1 u# ]$ Mif(status2== MI_OK)8 I3 g+ v8 n  y
{
3 m5 R7 o, ~4 ~+ n* q6 }" J- I7 d         tochar(Temp[0]);
" p/ ~8 S4 C3 {* C) x2 I- E# S1 Wtochar(Temp[1]);//输出卡类型) r6 p) n4 C7 h: b, ~
}3 {3 Z" b/ p/ B- P) d0 j6 X
其中0x52代表寻天线区内全部卡。7 l0 D8 F4 u- I/ I0 w9 A
卡类型(TagType):: e: x) D0 ~+ }7 m/ F7 ]! R
0x4400 =Mifare_UltraLight
3 U# F, ~* |/ ^0 h0x0400 =Mifare_One(S50)
* C: E6 k0 t1 c0x0200 =Mifare_One(S70)
. }9 X5 V8 D, a) z9 A% h0x0800 =Mifare_Pro(X)
7 j  k$ L2 e: `% g0x4403 =Mifare_DESFire
4 ^2 s" w3 y( {0 e; J) r比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
9 [5 Z0 Y9 D- W! Z& b# u3 L9 q
' k- F  G: L/ ~' ?0 o6 u0 q第二步:防冲突。5 H! j: n& T! F- X) K; x+ F
         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节
- d7 r8 }7 w: E( |/ z. `5 X0 s4 g   if(status2==MI_OK)0 V) v. }) ^6 I' t
    {
9 P$ X6 l4 j6 w9 ]- M$ u# R! S# d       PutString0("Card Id is:");
0 E( a8 h  D+ o% L3 w% A       tochar(UID[0]);
( `6 R! m. [) u9 j5 z5 W       tochar(UID[1]);. t3 c  q( s; f$ P$ e
       tochar(UID[2]);
5 C, {! G1 P9 l$ v+ N  Z- D       tochar(UID[3]); //输出卡片序列号) c9 P2 ]" h: u1 ^
}
* c( v2 B5 c! `, s. x第三步:选卡。
" X: k0 c8 e' N6 F' x5 b* K2 j         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节
* L: s: q" `' B+ y第四步:在读写卡之前需要先进行认证。- G% ]. ?' D- [6 V3 H
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);2 W& ]% w% }. |/ E  O
其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。! A* G5 x( `( H, ]/ y
然后进行写操作:" c0 }9 W! |" C" {& J
status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中
8 h8 {6 H4 ~( f其中第一个参数  1  代表写入的地址为块1.
/ m2 X: k1 V2 J& ]" N或者进行读卡操作:
/ d# F0 E* S0 E! Rstatus2 = PcdRead(1, str);//读卡. {1 I0 Y* t( O- m3 C! _$ b: j
其中第一个参数  1  代表读的地址为块1.  7 b: `4 t! z7 e" `. C- s
读卡后得到的数据存放于数组str中。
8 e8 f% r' k& k  P0 l) ?
1 I8 g5 ^8 S) d/ p. d) ^' n4 m- ]3 @: b3 G2 ^9 I4 P
至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。
$ G& J( ^0 j4 f0 Q! E. ~

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 | 只看该作者
真的谢了,给这么好资料啊!# A7 S+ M8 L4 W. R# H$ D  a) G

169

主题

582

帖子

1242

积分

四级会员(40)

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

积分
1242
3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!! E3 u2 t5 P  D& t% O3 n2 c( O7 `! e. ]

6

主题

288

帖子

764

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-21 22:48 , Processed in 0.057650 second(s), 34 queries , Gzip On.

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

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

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