找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

157

主题

559

帖子

1198

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。
, z% i7 |% I6 w( X0 M  h: }在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。
1 h: s5 C3 R. W0 _7 U2 ~  P. ~# a3 n这个程序的讲解是基于MSP430F149/169单片机的。
+ K4 {) h) B( V5 ~
# E" [7 `9 b& g! l模块使用的是SPI接口,与单片机接口如下:
7 b* {% `( [5 ]! I7 T
5 r- x- j/ v3 a/ b#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   - {, o2 I0 Z/ ^. S1 Q: M: N
#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA$ B0 u  H% @3 O6 g. k- I. ]
#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)
+ {7 C+ o% E( L0 \3 ?5 v#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)
1 r  ?' L0 }/ ~) d( g9 L1 Q#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)) m1 m$ u, N% `: _2 Z8 V# l
9 {2 Y  R) p; F9 A& p% g4 G
要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;
7 |# ]6 Y. k! z2 ^0 e0 G- U4 c" E; d9 P第一步:寻卡。9 U* @3 \% u- Q. v5 q- e7 F
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型
  q9 e. G- s4 z9 ^8 v6 jif(status2== MI_OK)) W% V; c- o6 u9 d! V0 I
{5 f( W, z0 ^+ }7 y  I7 S+ r% p& [
         tochar(Temp[0]);
0 M* S+ v7 \* {; d+ K) Itochar(Temp[1]);//输出卡类型& c9 A, B4 K# A) ]% w
}! X4 N7 h- {$ P# h# v
其中0x52代表寻天线区内全部卡。
2 h; t& J' B; X  d5 J5 w卡类型(TagType):
% p: N* }. C) g6 T: E  [: F# f0x4400 =Mifare_UltraLight
- m6 y8 W7 R& a0x0400 =Mifare_One(S50)
4 M# N) j) Z  W1 u  f. X& V0x0200 =Mifare_One(S70)
1 \8 _/ _& t! P- I7 b! P% L0x0800 =Mifare_Pro(X)
+ t3 J5 U3 ]# A. Q' Y0x4403 =Mifare_DESFire* Z. T; c: h+ i1 \, t
比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
( o* M9 d5 U/ X( w
5 g3 N- V: c$ p, d' Y6 V第二步:防冲突。; A" B) \: K! z2 q- r# D6 E
         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节4 y( y; f" w4 T" z0 Z  h  w$ T
   if(status2==MI_OK)$ [! K& V$ [! p8 y5 C" V; ?8 l
    {4 Q0 T, y0 ]% v+ M
       PutString0("Card Id is:");7 _% E' Z: [( i  p- Q6 M
       tochar(UID[0]);4 B% F; o& }2 z+ t* w" s$ G" A3 }
       tochar(UID[1]);
# S# x9 s6 u& i9 g5 h' u       tochar(UID[2]);& _, N' b1 a7 A3 O* N6 `% y% T  P7 ?
       tochar(UID[3]); //输出卡片序列号  m; x+ O5 g1 a6 `' q3 K
}, A" [% k8 s0 \) [1 h
第三步:选卡。
& f  P. `, Z) J$ I  ~7 l         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节$ l, y) V; k3 m( c9 s, R
第四步:在读写卡之前需要先进行认证。+ c, M; T8 ?" c9 I1 l# y1 k& W3 u
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);
/ Y$ B  f8 J* a  N# b# x其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。) `0 a/ w" a8 A5 G2 v  k# y" w
然后进行写操作:- r% b# B5 _5 ?! Y! E% [/ O
status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中3 x( y4 J9 E; Q8 Y+ \
其中第一个参数  1  代表写入的地址为块1.* j3 k  @: A6 S) V1 _4 _- T' n! e" c
或者进行读卡操作:# [3 g  n0 J) @
status2 = PcdRead(1, str);//读卡
* e3 N* l2 n0 H$ H" E" J其中第一个参数  1  代表读的地址为块1.  ) M! v% |" }/ @* [5 o8 e
读卡后得到的数据存放于数组str中。0 S, m! }% N" p, q

6 _- M! R7 j( ~1 i7 B9 N6 b- k
/ U+ w" t2 c$ o3 l至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。1 u* ~& @% b; W7 x' H( e+ h- u

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 | 只看该作者
真的谢了,给这么好资料啊!
- x7 q+ e/ q, E) A( o: s

169

主题

582

帖子

1242

积分

四级会员(40)

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

积分
1242
3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!
- e# u  _% D. y' z, ~

6

主题

288

帖子

764

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-4-17 02:13 , Processed in 0.060208 second(s), 35 queries , Gzip On.

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

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

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