方案:单片机处于低功耗模式,MS522处于软掉电模式。单片机用RTC定时(比如每隔1s)唤醒,单片机唤醒后唤醒MS522寻卡。寻到卡则做进一步处理,否则MS522继续进入软掉电模式,单片机进入低功耗模式。

if ( == flag_rtc_wakeup)
{
flag_rtc_wakeup = ; pcd_soft_powerup(); if (pcd_fast_detect() == true)
{
//todo
} pcd_soft_powerdown();
}
void pcd_soft_powerdown(void)
{
write_rawrc(CommandReg, PCD_NOCMDCHANGE | ( << ));
} void pcd_soft_powerup(void)
{
uint8_t count = ; write_rawrc(CommandReg, PCD_NOCMDCHANGE & (~( << )));
do
{
// Wait for the PowerDown bit in CommandReg to be cleared (max 3x10us)
delay_10us();
} while ((read_rawrc(CommandReg) & ( << )) && (++count) < );
}

手册相关内容

//快速寻卡函数
bool pcd_fast_detect(void)
{
uint8_t valid_bits = ;
uint8_t command = PICC_REQIDL;
uint8_t wait_irq = 0x30; // RxIRq and IdleIRq
uint8_t n;
uint16_t i; clear_bit_mask(CollReg, 0x80); // valuesAfterColl=1 => Bits received after collision are cleared. // write_rawrc(CommandReg, PCD_IDLE); // Stop any active command.
write_rawrc(ComIrqReg, 0x7F); // Clear all seven interrupt request bits
set_bit_mask(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization
write_rawrc(FIFODataReg, command); // Write sendData to the FIFO
write_rawrc(BitFramingReg, valid_bits); // Bit adjustments
write_rawrc(CommandReg, PCD_TRANSCEIVE); // Execute the command
set_bit_mask(BitFramingReg, 0x80); // StartSend=1, transmission of data starts i = ; //根据时钟频率修改
while ()
{
n = read_rawrc(ComIrqReg); // ComIrqReg[7..0] bits are: Set1 TxIRq RxIRq IdleIRq HiAlertIRq LoAlertIRq ErrIRq TimerIRq
if (n & wait_irq)
{ // One of the interrupts that signal success has been set.
//debug("t\r\n");
break;
}
if (n & 0x01)
{ // Timer interrupt - nothing received in time
//debug("f\r\n");
return false;
}
if (--i == )
{ // The emergency break. If all other conditions fail we will eventually terminate on this one. Communication with the MFRC522 might be down.
//debug("i\r\n");
return false;
}
} return true;
}
void pcd_reset(void)
{
RC522_RST_ON;
write_rawrc(CommandReg, PCD_RESETPHASE);
uint8_t count = ;
do
{
// Wait for the PowerDown bit in CommandReg to be cleared (max 3x40us)
delay_10us();
} while ((read_rawrc(CommandReg) & ( << )) && (++count) < );
// TAuto=1; timer starts automatically at the end of the transmission in all communication modes at all speeds.10us
write_rawrc(TModeReg, 0x80);
write_rawrc(TPrescalerReg, 0x43); // 10μs
// Reload timer with 0x1e = 30, ie 0.3ms before timeout.
write_rawrc(TReloadRegH, 0x00);
write_rawrc(TReloadRegL, 0x1e); write_rawrc(TxAutoReg, 0x40);
write_rawrc(ModeReg, 0x3d); //和Mifare卡通讯,CRC初始值0x6363 pcd_antenna_on();
}

参考资料:

MS522手册:https://wenku.baidu.com/view/6f5bcabcbcd126fff6050b77

关于软掉电模式的讨论:https://github.com/miguelbalboa/rfid/issues/269

软掉电模式DEMO:https://github.com/akellai/rfid-music/blob/master/RFID_ProMini/RFID_ProMini.ino

MS522低功耗寻卡的更多相关文章

  1. 13.56mhz自动寻卡功能业界最低功耗:SI522

    随着智能门锁的不断火爆,很多智能门锁产商为了让产品的功耗下降下来,都在不断寻找能自动寻卡的13.56mhz.今天我就为大家推荐一款13.56mhz芯片自动寻卡业界最低功耗,不仅是业界最低另外还完全PI ...

  2. 抗干扰性极强非接触式读卡13.56mhz芯片:SI522

    由于智能门锁产品不断地火爆,市场上的不断出现破解的方法.对此中科微联合深圳市动能世纪科技有限公司不断满足市场需求,推出一款抗干扰性极强的13.56mhz芯片. 该芯片出了抗干扰性强以外还直接PIN2P ...

  3. OBU设备非接触式读卡方案:SI522

    传统收费站将成历史!全部转为ETC系统 当高速人工收费已经成为我们驾驶出行的习惯后,我们发现,高速人工收费带来低效率.长等待以及落后性等缺点逐渐给人们出行带来不便.伴随着我国汽车保有量的逐年递增,高速 ...

  4. 功耗极低非接触 13.56mhz读卡芯片:SI522

    众所周知13.56mhz是高频,一般用于防伪,做到成品非常薄.在智能门锁以及RFID读卡器是非常多人采用的,不管是在读卡距离.读卡灵敏度都是非常好的.现在智能门锁的竞争性很大,大多厂商及方案商都慢慢往 ...

  5. 关于 MFRC522引脚功能图

    MFRC522是属于13.56mhz芯片.另外SI522也是13.56mhz芯片,SI522 PIN对PIN完全兼容MFRC522,并且软硬件兼容,且引脚功能图都是一样的,功能方面比MFRC522多A ...

  6. 13.56Mhz SI522兼容MFRC522的资料以及对比性能

    (13.56Mhz芯片) SI522是一颗专门替代MFRC522/FM17522,PIN对PIN 完全软硬件兼容.相对于MFRC522,SI522完全替换,不需要做任何更改,同时接受模式下功耗低10m ...

  7. 非接触式读卡器13.56MHZ芯片:SI522

    对于现在的智能锁市场需求竞争极大,中小型厂家月销量更是在慢慢增长.刷卡功能更是智能锁的标配功能,当然13.56Mhz芯片现在讲究的就是超低功耗,为满足市场需求专注于物联网多年的中科微强力推出了13.5 ...

  8. ETC系列产品非接触式读卡器方案:SI522

    随着科技的不断发展,出行上高速这是非常寻常的事.但是在很多节假日高峰时期,在高速路口塞车缴费给很多车主造成很大的烦心.为了解决这一系列的问题,科技发明了ETC这种便捷式缴费技术,让车主们顺畅通过高速路 ...

  9. 关于SI522替代FM17522和MFRC522的资料对比

    以下是SI522与FM17522.MFRC522的对比参数: SI522是完全PIN对PIN软硬件兼容MFRC522.CV520.FM17522,另外我们可提供一对一技术支持解决客户所遇到的问题: 1 ...

随机推荐

  1. Pig数据类型

    基本类型 int.long.float.double.chararray.bytearray.datatime.boolean.biginteger.bigdecimal 复杂类型 map.tuple ...

  2. Pig脚本 .pig

    pig脚本就是一个文件,保存了多条pig命令,通常后缀是.pig(不强制).       多行注释:/**/     单行注释:--       下面是一个名字是test.pig的脚本的例子: /* ...

  3. zabbix系列之二——安装

    1Getting zabbix Four ways of getting: Index Option note 1 Install it from the distribution packages ...

  4. MVC $.Ajax()+Json实现数据库访问并显示数据

    我们在使用搜索引擎时经常会看到这样一个效果 在输出输入相关文字时会有与之对应的相关提醒,作为一个MVC初学者我也做了一个简单版的“搜索工具”,分享给初学mvc和ajax的童鞋(各位大神勿喷),也加深我 ...

  5. ORACLE闪回机制分析与研究应用

    1.查看数据库归档和闪回状态,及环境准备SQL> archive log list;SQL> select flashback_on from v$database;关闭数据库,启动归档和 ...

  6. [C++] 用Xcode来写C++程序[1] 新建C++项目工程

    用Xcode来写C++程序[1] 新建C++项目工程 第一节从新建工程并编译C++源码开始 新建工程 源码: // // main.cpp // YeHelloWorld // // Created ...

  7. VMware 11 安装苹果系统

    没事研究了一下虚拟机安装苹果系统 1.下载需要的软件- F, c1 X: e- o1 }& V/ o9 J        1.1 VMware 11 下载和安装* P( R; O6 v1 N! ...

  8. C++ new和delete重载

    C++ new和delete重载 2012-02-15 23:25:33|  分类: C/C++|举报|字号 订阅           首先,new和delete是运算符,重载new和delete是可 ...

  9. 全部读取------------ 一次性全部读取的.read() VS 一行一行的for迭代

    全部读取 f = open("喜洋洋",mode= "r",encoding= "utf-8") 方法一:     一次性全部读取f = o ...

  10. 18年10月31日 NOIP模拟赛

    T1.exercise 题解 数据很小直接模拟 代码 #include<iostream> #include<cstdio> #include<cmath> #in ...