找回密码
 注册
关于网站域名变更的通知
查看: 1083|回复: 7
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。
$ w0 F/ `; @+ `- ]在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。- r( }5 F3 L2 a( J: x
这个程序的讲解是基于MSP430F149/169单片机的。
( U( d% z; w- H1 Z2 d- G
2 z5 [7 |% e% R0 V/ ?模块使用的是SPI接口,与单片机接口如下:
, Z$ c: L+ c) A- k0 ]6 l" U: D+ o
4 K8 z2 S2 D4 s+ r. j2 D5 u. V#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   
, x8 r  n1 l: L. D. w- ~3 u$ W#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA/ J" i' b7 T# a3 r; @# d
#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)
# I' |  ]+ Y+ \7 e* t: n#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)
  P$ ?" w) I; }7 W$ y- ]2 e#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)
5 |7 k* U7 u0 d& Q% \' P: @
" [- ]; \5 `- r( R" ?要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;9 Z/ s2 O0 U+ V7 C
第一步:寻卡。  {9 S0 S5 t- j: k: {6 y% a
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型
0 V- R+ h& u3 \. w8 Zif(status2== MI_OK)' Q/ x# r- e7 \
{& r. i/ l2 l+ c, e$ R5 ?( K
         tochar(Temp[0]);
: V" r( d7 r! n: s/ T$ ktochar(Temp[1]);//输出卡类型
* ~2 X1 v9 |( G: a& y}
# z1 v6 T# i% o  _其中0x52代表寻天线区内全部卡。
! v: v. u- x% |" f卡类型(TagType):
( w) l% S3 j' y0 `9 K$ i) @0x4400 =Mifare_UltraLight
7 c& t+ _2 s+ P! ~  O, V0x0400 =Mifare_One(S50)
$ W2 l- U, {8 C( E( Z. |" i0 [0x0200 =Mifare_One(S70)- s. t# @# w) P  Y! B2 T6 ]
0x0800 =Mifare_Pro(X)% s  B/ G- ^. }3 I! v) x! `& C3 ^
0x4403 =Mifare_DESFire7 a2 a5 X+ n; k( Z  f
比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。: e  J9 B: g. ?+ j
6 i0 J7 H& k+ b' i
第二步:防冲突。
& ~% m) K0 `, H         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节% b# d( E6 k- u+ M& {1 N
   if(status2==MI_OK)3 y& j: l1 @" U7 o
    {
; E' _, i9 @  n5 b" ~7 T7 y       PutString0("Card Id is:");
6 o. v, Q5 D% D4 \, k7 a       tochar(UID[0]);  {8 h* Z# t! ]! w  K. x
       tochar(UID[1]);# G: j8 I4 U/ ^8 R# [2 i, U$ R% q
       tochar(UID[2]);- z6 e* q) _3 K
       tochar(UID[3]); //输出卡片序列号( v( S8 l& [7 }/ {$ O3 @* t9 l
}
( |  {' a2 c5 B1 v第三步:选卡。
; i1 s5 {: s) w( C2 E, ?         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节* @- Y$ C! M0 [* M( W, j# I
第四步:在读写卡之前需要先进行认证。/ g: o! o  \: i9 A+ D! m
         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);9 [7 `2 Q7 ]2 z
其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。
, p7 T/ E" m9 g7 b2 Y然后进行写操作:) V4 _3 b. a  V0 g' G! I
status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中0 [' z) [& {9 K3 ^/ L
其中第一个参数  1  代表写入的地址为块1.
  c. X# X3 @4 b1 @# r或者进行读卡操作:
! O+ h9 D8 S3 o2 b! sstatus2 = PcdRead(1, str);//读卡* X" v) e) Q7 K9 X8 t. V* I) {
其中第一个参数  1  代表读的地址为块1.  9 I; V/ h. G0 [8 I% o, u. r
读卡后得到的数据存放于数组str中。
. d. V3 z- D9 G* h8 c6 A1 ^- a+ J7 A4 b5 u; s! B8 A4 `/ X" `5 {

" u- O: {) S4 X3 m- c; W至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。# j, O4 Q- G4 N) B2 @4 {2 s

RC522速成教程.pdf

318.93 KB, 下载次数: 4, 下载积分: 威望 -5

MSP430F149读卡号参考例程.rar

404.19 KB, 下载次数: 1, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2016-6-23 13:44 | 只看该作者
真的谢了,给这么好资料啊!1 J' X3 ?; Q4 R, _6 ]' o3 m- s% H

该用户从未签到

3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!, d4 k$ R+ n3 o3 A' F- v$ Z
  • TA的每日心情
    开心
    2020-9-8 15:07
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2018-5-4 17:30 | 只看该作者
    学习了,感谢分享

    该用户从未签到

    5#
    发表于 2019-7-24 21:07 | 只看该作者
    谢谢想看看

    该用户从未签到

    8#
    发表于 2020-1-9 10:29 | 只看该作者
    谢谢分享,学习了
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-25 14:03 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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