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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。; ?' E6 q* k4 t- s* D
在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。- \! `6 K; k; x' F# l2 d' X  K. f- s
这个程序的讲解是基于MSP430F149/169单片机的。
# B4 w& U$ i5 Y9 ~5 s* D! R2 n# r/ _
7 ?1 e: V! y7 ]: r  I模块使用的是SPI接口,与单片机接口如下:8 F: N) ^: |2 y1 S) n$ t2 U
3 _* R( O6 V/ f) S+ C
#define RF_LPCTL               BIT3  // P2.3 射频卡休眠控制------RST   2 `6 V4 D( R1 D; G9 }
#define RF_SS                  BIT7  // p2.7 射频卡从机选择(SS)---SDA' n& q9 u' l8 o+ R3 \) o
#define RF_SCLK                BIT6  // p2.6 射频卡数据时钟输出(SCLK)$ E$ `  Y% m) O5 a; m& X0 P1 q+ @
#define RF_DATA_OUT            BIT5  // p2.5 射频卡数据输出(MOSI)- v; J2 c$ G- ~' |1 m# Y
#define RF_DATA_IN             BIT1  // p2.1 射频模块输入(MISO)' L+ t; V- D  A
  L: M0 |& F; a% c; _# f8 \! h6 g2 K
要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;
! s, [, B7 N% S( i2 `( @6 y- X第一步:寻卡。6 I  V+ W- V5 r4 g* Y* \  j
   status2=PcdRequest(0x52,Temp);////寻卡 参数Temp为返回的卡类型
( c# \1 k! ~8 k2 O7 t4 tif(status2== MI_OK)
1 {9 _) c+ f, a) Y# f' h{
# f7 d" d! V' d7 ~( k+ Q         tochar(Temp[0]);/ W! N* l1 \; G' V; o. p" Y: p; y, C2 }
tochar(Temp[1]);//输出卡类型7 P+ q; Y0 V9 _9 I& V/ ]' ~
}0 C# l$ Y0 G- s# ]5 C0 J( P
其中0x52代表寻天线区内全部卡。
: ?6 _# Q: A; G3 G: q% m3 D/ [# T卡类型(TagType):
7 L3 Z# O+ E4 s0x4400 =Mifare_UltraLight2 e: b: w7 j  F5 D
0x0400 =Mifare_One(S50): v  H' u- d( A! ?1 A
0x0200 =Mifare_One(S70)
- U" j/ p1 m6 f0 o  b+ u0x0800 =Mifare_Pro(X)
7 r) l$ ~" o% e9 l! X6 j1 @; \0x4403 =Mifare_DESFire4 }- a$ e* u. z3 ?( g
比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。3 f/ M+ U/ A6 T/ K; S$ m
) q2 z% Q7 H# W9 L
第二步:防冲突。
. I* Z1 J- }) U, ]/ V& c) K         status2= PcdAnticoll(UID);  //防冲撞处理,输出卡片序列号,4字节4 `; U/ |6 d6 K/ I3 r8 m" F
   if(status2==MI_OK)
+ s4 N( x' a$ C8 N, z: _2 |1 c    {5 T( Y+ V5 s1 y3 b8 B9 o8 |9 ]
       PutString0("Card Id is:");4 G6 v6 x' l8 F  F6 Q) I9 T/ T
       tochar(UID[0]);8 s  S" z" B! M
       tochar(UID[1]);) \" |( R: Y6 |. |. H! X- s5 |$ c
       tochar(UID[2]);& }5 j9 [/ H0 p% G
       tochar(UID[3]); //输出卡片序列号. y& }5 V! s0 f! h, _9 W
}
6 S* V" y% i+ f, Z* A第三步:选卡。- j; t5 b- m" N$ j
         status2= PcdSelect(UID);    //选择卡片,输入卡片序列号,4字节
* z' }5 W) i0 ^  r第四步:在读写卡之前需要先进行认证。
( }7 h5 \# H& D0 v: ^1 z         status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);! E! A" Y/ w8 D
其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。6 B$ I& \; ]# k% e
然后进行写操作:
, ?# |" H" s8 ?, A! xstatus2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中
4 N9 V4 a. L- W2 y+ k其中第一个参数  1  代表写入的地址为块1.- Z! T# {! j5 ^5 v: U) v
或者进行读卡操作:, Q; W4 L% ]1 e5 @! W' }
status2 = PcdRead(1, str);//读卡( D+ {* i3 p& k; h$ x
其中第一个参数  1  代表读的地址为块1.  
' A4 T" t) P/ W6 f8 P" t* P% q读卡后得到的数据存放于数组str中。5 A) q6 _7 b$ C

, N# o' b, o" }; h; ?$ [
- Q: a& ^2 L6 Z* S4 h" J至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。& d8 R  a: A/ j# V; p

RC522速成教程.pdf

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

MSP430F149读卡号参考例程.rar

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

该用户从未签到

2#
发表于 2016-6-23 13:44 | 只看该作者
真的谢了,给这么好资料啊!
" t- e* W" \  f, x1 I( U  _. Y) G

该用户从未签到

3#
发表于 2016-6-23 14:42 | 只看该作者
路过捧场,谢谢分享!, ^4 y; \5 W9 f" Q
  • 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 22:21 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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