找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

157

主题

559

帖子

1198

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。
! l  e# A- B5 w6 J6 F/ \$ ]在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。% e) k7 U5 ]" t* N" [5 b/ v
这个程序的讲解是基于MSP430F149/169单片机的。2 T+ q+ p* d% m, |5 p+ f
0 P" w- O9 E4 S0 W" f! ?
模块使用的是SPI接口,与单片机接口如下:
: s# Q5 F; X2 l8 g. f1 A* H( o' @$ F, F& [4 v' g+ V
#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   6 E2 w# z8 P( z# r0 g0 M
#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA
/ S- W) s) U. J#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)7 }4 _5 |4 }4 K6 {
#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)) Q  e9 f0 E  ?. F  X
#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)
% F- i* g. L4 F" P2 `; S2 }1 ]( z8 B2 M  t7 I4 v+ w
要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;' Y6 o5 e3 E8 Y! J1 b( e
第一步:寻卡。9 l1 N- y, e3 C6 v. o9 J0 _2 \
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型$ B/ \( e$ K# a
if(status2== MI_OK)" _6 O3 r! ~4 L& B
{
$ Z- a) N. L4 P1 C  Z& b         tochar(Temp[0]);
* o0 A) ?  `$ Ktochar(Temp[1]);//输出卡类型
! Y- I% b9 O4 t3 |6 Q, |}
! U1 y$ l* l% B" t0 r其中0x52代表寻天线区内全部卡。
4 p" x" N. c% d2 K: U  L; c% c卡类型(TagType):
3 m9 y( T3 c) j) K  f5 X6 y9 x9 e0x4400 =Mifare_UltraLight7 Q5 ~0 ]3 N9 @- k& y% D( n9 G9 }
0x0400 =Mifare_One(S50)- X# B; ~  u& @- M2 u, }2 R
0x0200 =Mifare_One(S70)& Q+ {& X( W+ @6 F, ]9 e) Z, F
0x0800 =Mifare_Pro(X)
. h, e, M$ U0 L0x4403 =Mifare_DESFire
3 A1 O" A" ~" W  Y$ U比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。
5 M. q, p8 t* @- e6 F0 c4 p+ C" N0 g
第二步:防冲突。! H+ z/ v: N; M
         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节9 {) m- Z. J- t
   if(status2==MI_OK)6 P& i* v& [  ~) n* c; @
    {$ b& q, g% R% @% ~5 V
       PutString0("Card Id is:");
9 d, S0 a0 O, B/ n) O0 a       tochar(UID[0]);
; F3 x0 u: e; H7 v       tochar(UID[1]);
  H9 `2 \! r# h+ K# _' h/ b       tochar(UID[2]);
( d( n; A( R7 Z       tochar(UID[3]); //输出卡片序列号0 T$ z$ r& R; m. }2 u! A1 I( f
}
% y( g. }1 D6 k  z1 `9 E3 b第三步:选卡。
) u2 S. a7 \" h( M( K/ n8 Z         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节# Z4 {$ R& s; w+ F
第四步:在读写卡之前需要先进行认证。9 r# s  B6 i, q3 _
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);" Q2 q* b1 L# J2 o* f/ b6 X. B* p
其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。( Q( o: [3 l8 F0 W0 P, O# K* u* Z
然后进行写操作:# f/ w) V& }' G' d1 N6 S
status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中
" k8 i+ j* p! B0 ?' }, z) h其中第一个参数  1  代表写入的地址为块1./ H. {$ f: |: u
或者进行读卡操作:
* i3 N* s7 f4 z7 o* j7 y. wstatus2 = PcdRead(1, str);//读卡
' o6 a; a! l$ s3 x8 W2 p* X其中第一个参数  1  代表读的地址为块1.  
7 h$ A7 y! q3 C% A) _( B读卡后得到的数据存放于数组str中。& z' F$ g1 Z. }& U! T( k1 C
3 T4 N7 p5 C7 L8 a

+ I9 i) c& \/ J2 {  i' L至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。" z" w6 ^+ i, U) x) O1 i

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 | 只看该作者
真的谢了,给这么好资料啊!
0 z  ?# I& \5 E

169

主题

582

帖子

1242

积分

四级会员(40)

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

积分
1242
3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!
( P3 x. ~6 t# v, i

6

主题

288

帖子

764

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-19 10:00 , Processed in 0.061657 second(s), 35 queries , Gzip On.

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

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

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