找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

157

主题

559

帖子

1198

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。$ e$ @9 `9 k( u0 `" ^
在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。/ l, x! @: ~8 o9 o8 k0 P
这个程序的讲解是基于MSP430F149/169单片机的。
$ q" `" |+ T$ `8 b8 M$ l
: C8 X6 K5 _# K3 N8 c3 T; @模块使用的是SPI接口,与单片机接口如下:) x4 u  W- B+ \% N. ]6 |/ l

6 H0 Y6 r# M8 k( r) `#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   ( ?5 }: h0 s1 a% ~/ h3 F  j
#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA
. u& @1 k% [* T- ^8 X1 M#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)5 ]+ C2 g7 }5 Y' w% ]
#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)
; y& m' z/ `& {. o! L! R0 p9 ?#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)
& n7 A2 r4 m& |6 P, M; ?8 i# y4 d7 ^  a4 U6 U3 y+ L
要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;
& P$ v3 W. M- J8 \第一步:寻卡。! ]: u3 a# ?/ U
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型. ]! B8 Z0 i: {6 e5 {2 F# K
if(status2== MI_OK)) i4 S/ u6 k! h; Z# j( A
{, d$ U/ q# H( D4 F
         tochar(Temp[0]);
! @' t2 k1 k# O  u1 qtochar(Temp[1]);//输出卡类型# G8 C* D1 i5 j( q8 l& e4 g
}
/ K) }1 N2 n3 x% y" p其中0x52代表寻天线区内全部卡。
/ T$ u( b/ V, p8 U( v0 P$ i卡类型(TagType):
' l6 L+ x! h$ x/ H+ l$ i# k0x4400 =Mifare_UltraLight$ x% b6 B2 |0 t( A8 a
0x0400 =Mifare_One(S50)
" U( d9 }( G: Q) c4 v$ h* P0x0200 =Mifare_One(S70)& q( s- D/ H2 z6 T! d
0x0800 =Mifare_Pro(X)
# w$ r& ]& t; |5 H- c5 d0x4403 =Mifare_DESFire
* d" T* s8 b( P  @/ e/ J比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。8 _% E' B5 G7 H7 n  F% q( w0 X

  M/ b! g' N7 t第二步:防冲突。
( j6 X: \* v5 L         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节
! ]; O! M3 {/ g9 J! D# Y   if(status2==MI_OK)9 O7 Q' ]% X: z7 U) d3 ~; ^
    {* O! C2 K) e3 ^+ T6 e. N' D
       PutString0("Card Id is:");( m5 }: w4 n( ~; `3 P% p# T3 b/ n
       tochar(UID[0]);+ E- E4 t1 J3 b8 i9 k2 a
       tochar(UID[1]);
- n0 k0 P( T4 A' {2 a3 A" J       tochar(UID[2]);* l$ K9 a0 g4 K, }4 H
       tochar(UID[3]); //输出卡片序列号+ u! j$ R; t* R; e4 i) k. [
}
' S+ `6 O7 I: {1 v. n0 f第三步:选卡。
2 o# O( D: I# d. h/ i% B         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节
- A9 d4 S9 o9 D第四步:在读写卡之前需要先进行认证。) k9 t( w& ~) A6 v
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);. ~+ u8 Y) s* ~
其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。
8 H* H3 L  f; T  n3 s然后进行写操作:7 i/ G; Z5 s, r+ v% J
status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中/ r/ ?# q- v7 J
其中第一个参数  1  代表写入的地址为块1.: m7 t" ^' t$ T' d
或者进行读卡操作:4 h0 n7 d- F% z3 n4 l9 f4 p
status2 = PcdRead(1, str);//读卡
9 K( {: C7 [: W其中第一个参数  1  代表读的地址为块1.  " F* Y1 @( u! O% t4 K/ ?
读卡后得到的数据存放于数组str中。
7 u0 t1 [  J+ {9 A9 _% o: |9 G5 V  Z* ~
7 T* m& |/ f% U3 q
至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。
' B, r( C* X( 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 | 只看该作者
真的谢了,给这么好资料啊!3 n* c; C& f; j' A( V2 E. h6 @% t

169

主题

582

帖子

1242

积分

四级会员(40)

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

积分
1242
3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!
0 a7 J% c& ~) b( p- p

6

主题

288

帖子

764

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-19 09:25 , Processed in 0.085534 second(s), 34 queries , Gzip On.

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

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

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