找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

157

主题

559

帖子

1198

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。/ t  q$ a! j6 H0 h
在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。  C- d1 I8 M- q; G  F! W
这个程序的讲解是基于MSP430F149/169单片机的。
- h8 H) b: I+ F6 S& n4 p% P* L4 O+ z0 P7 Z: h. {( ]% W
模块使用的是SPI接口,与单片机接口如下:
4 x' w) o* O7 O0 t9 @
6 b1 Z7 ^+ ]: ?$ h+ q8 Z, I6 _0 ^#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   6 g9 }( f& J/ r% M  U* W9 G; D. a; F
#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA
7 p) j5 J! B- y) {7 H#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)
5 o9 B) H# }- D1 Q#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)* \# I. D2 Z$ U$ w
#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)
; X  o: r7 i; H# Y, ^& |9 {4 R1 j/ C0 J: a
要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;* v0 Y' l2 a# x3 x* r7 x: \1 Q
第一步:寻卡。* u8 ]4 H* S% L  L: G
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型
, o4 [2 {# t% w' k4 C- }if(status2== MI_OK)( `* _3 ?0 n; h' G
{4 U1 b3 ~9 ~& h: \5 z3 S$ @
         tochar(Temp[0]);
% e# ~, ?9 {' ~& a+ ztochar(Temp[1]);//输出卡类型
7 x; ]4 i# G: q+ R}
. E% A, }- ~8 H* j3 a/ m其中0x52代表寻天线区内全部卡。6 v4 ^+ g* N* n8 Z0 n$ ^
卡类型(TagType):: l5 P* R8 V/ g
0x4400 =Mifare_UltraLight
0 l. z" F* i$ n* I$ q2 A0x0400 =Mifare_One(S50)
6 ^0 a! U, J0 b# i' n! q0x0200 =Mifare_One(S70)3 B( K* q; I2 r& ?) c3 F
0x0800 =Mifare_Pro(X)) G# u4 I! f  k3 }- V
0x4403 =Mifare_DESFire+ C, v$ s  j$ |5 A% p
比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
$ d1 a% m/ N7 Q- g: Y: B8 i
7 Z  |# N. d6 l* _2 k第二步:防冲突。
1 D- R- Q8 l5 D         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节8 {+ \' J. F6 \
   if(status2==MI_OK)* B2 b4 l- m0 d6 S( R9 O; i
    {
0 r( g$ x% G4 U8 I       PutString0("Card Id is:");! D2 E6 y) j0 k, h  A9 J
       tochar(UID[0]);
( G+ W- A: {! Q& S; V; t       tochar(UID[1]);
: q) E- `* [& l; y% E8 e" C       tochar(UID[2]);$ c- o$ M7 J; [! P% v
       tochar(UID[3]); //输出卡片序列号- G8 F- f3 H, p, c
}
" ^+ E2 `9 O( {6 U  C第三步:选卡。
0 O4 c- ~2 P- n: _- k, g         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节7 _4 _7 h3 }8 I) O. ?5 K7 P3 O
第四步:在读写卡之前需要先进行认证。- L! `3 ]8 I* C0 }
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);, `5 \; ~/ c% ^! Y# P7 ^0 O! J
其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。
) u5 C  y  Z: r7 |然后进行写操作:+ p6 v' \! q: K9 M! B
status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中
5 K2 V' y3 [( G* Q5 l* w/ g其中第一个参数  1  代表写入的地址为块1.! ?$ g0 T+ K3 c) |6 a9 z
或者进行读卡操作:
7 c2 l6 s) Z1 \3 astatus2 = PcdRead(1, str);//读卡
& g# r- b4 F* b- ?6 R3 c6 X其中第一个参数  1  代表读的地址为块1.  3 Y' L) i" f  H+ x9 N
读卡后得到的数据存放于数组str中。- l% @/ M! P6 H4 v! D

2 A4 d" U7 w7 S% ~5 Q3 L  C5 t9 @  W! C
至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。
4 S) n5 k  V* Z5 q- S

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 | 只看该作者
真的谢了,给这么好资料啊!
" C' h# e" x# t' w1 T

169

主题

582

帖子

1242

积分

四级会员(40)

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

积分
1242
3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!: ]8 Y1 M9 d  C! x

6

主题

288

帖子

764

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-22 04:04 , Processed in 0.057496 second(s), 35 queries , Gzip On.

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

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

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