找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

157

主题

559

帖子

1198

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。1 ^& r1 u! ]! Q; p; p$ f
在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。8 U. w* V+ }4 T
这个程序的讲解是基于MSP430F149/169单片机的。
' ?, b$ |- A, _2 |6 D& B4 B) h! e+ O
模块使用的是SPI接口,与单片机接口如下:
4 Y  O$ t+ T  a. r& z$ G. m* A) K5 B$ b9 e) W' L* n( f# }9 I
#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   
; C/ H8 _  W9 D& Y6 M#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA5 m, ^1 S% v* A2 V5 F0 \
#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)2 w0 |) I! `$ T  q1 B
#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)
% i/ Y; ?- _5 f: ^6 V' v2 d3 |$ w#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)
" J  ^- g8 A2 x+ M  x# q
4 q$ O* N' G, S4 m! h! u要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;
, g& U$ ?! `! e5 `1 v第一步:寻卡。( M" C* R7 v! z
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型
6 q- v/ v3 B1 z8 [& Z1 ~' zif(status2== MI_OK)
* ^7 |$ P' E9 c% Y% `" I: m{
- W1 Z% x- L+ b# m6 I% @- U1 q9 e6 |# ~: c         tochar(Temp[0]);# S/ b/ o6 |1 _, u& T
tochar(Temp[1]);//输出卡类型
/ F) ]+ a" T( k5 l9 Q  y}. M. y$ F2 d/ y" `/ _7 N$ _: i
其中0x52代表寻天线区内全部卡。* o+ i- ]9 A! J" D  {8 t+ W! m
卡类型(TagType):
* T! V- S6 k& x: L1 {) |4 G0x4400 =Mifare_UltraLight
2 T8 b# q, K8 H  X& g0x0400 =Mifare_One(S50)
, N0 }( _5 M5 s# q: Q0x0200 =Mifare_One(S70)& t) ?( J0 r5 v; x5 ^% g( P
0x0800 =Mifare_Pro(X)6 }! s1 }% J' H" E' }8 x# d! n
0x4403 =Mifare_DESFire0 V, F8 R# ]' [; S
比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
$ T' E/ v# w: e  L, u% n& D' \- c3 x" p" E+ B! W
第二步:防冲突。
9 z" j, I, t; P: p1 m8 s  Q) d         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节
$ k8 ~2 y9 {  S/ Y7 k8 P   if(status2==MI_OK): Y6 J! E6 O7 N" N$ Y3 j6 j
    {
7 j$ C7 W5 P9 `6 [0 T7 T5 _- c       PutString0("Card Id is:");
! K( p+ L( q( O; g( a       tochar(UID[0]);5 `3 R/ ]9 x3 R8 a( F* e3 z8 m; g
       tochar(UID[1]);* B1 V* d+ U  m0 w9 c7 K
       tochar(UID[2]);0 V6 Y  M9 @, y8 N9 K
       tochar(UID[3]); //输出卡片序列号) B( `0 I  {: E2 r$ \1 u
}
7 w  F1 l7 m+ e# g' S: `" _  R第三步:选卡。8 g2 a$ J& d' T: `: v- Q& J
         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节9 s: h( d1 q0 @% ]4 J5 U
第四步:在读写卡之前需要先进行认证。) }% A0 ^' |3 m7 A5 K% n& u( L3 p; g
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);- N8 m% S' J& p# x, v
其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。
1 w) q5 Q- P0 J: w然后进行写操作:
& Z- ^' K1 c! H6 H! a+ `status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中! Q2 J7 b) a; s& f
其中第一个参数  1  代表写入的地址为块1.: i/ h$ @# ]- `7 y/ j; f8 m" H9 w2 D
或者进行读卡操作:
, c/ P: w8 j6 w4 L$ ~& qstatus2 = PcdRead(1, str);//读卡; q+ g, M2 h2 o3 l+ j
其中第一个参数  1  代表读的地址为块1.  + _/ Y1 N4 B: _! H' m+ ]4 Z
读卡后得到的数据存放于数组str中。, Z, L1 R- V% F/ [

8 s& F7 R! ^, ?4 T
5 e- q1 }+ Q9 ^) l5 o& D至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。7 Z9 o6 h& ^7 ^; B& e$ Y

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 | 只看该作者
真的谢了,给这么好资料啊!
3 r$ B& M) w! ?  w/ M

169

主题

582

帖子

1242

积分

四级会员(40)

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

积分
1242
3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!6 g# e$ L' l( i2 O9 A

6

主题

288

帖子

764

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-17 04:41 , Processed in 0.057254 second(s), 34 queries , Gzip On.

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

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

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