MS522低功耗寻卡
方案:单片机处于低功耗模式,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低功耗寻卡的更多相关文章
- 13.56mhz自动寻卡功能业界最低功耗:SI522
随着智能门锁的不断火爆,很多智能门锁产商为了让产品的功耗下降下来,都在不断寻找能自动寻卡的13.56mhz.今天我就为大家推荐一款13.56mhz芯片自动寻卡业界最低功耗,不仅是业界最低另外还完全PI ...
- 抗干扰性极强非接触式读卡13.56mhz芯片:SI522
由于智能门锁产品不断地火爆,市场上的不断出现破解的方法.对此中科微联合深圳市动能世纪科技有限公司不断满足市场需求,推出一款抗干扰性极强的13.56mhz芯片. 该芯片出了抗干扰性强以外还直接PIN2P ...
- OBU设备非接触式读卡方案:SI522
传统收费站将成历史!全部转为ETC系统 当高速人工收费已经成为我们驾驶出行的习惯后,我们发现,高速人工收费带来低效率.长等待以及落后性等缺点逐渐给人们出行带来不便.伴随着我国汽车保有量的逐年递增,高速 ...
- 功耗极低非接触 13.56mhz读卡芯片:SI522
众所周知13.56mhz是高频,一般用于防伪,做到成品非常薄.在智能门锁以及RFID读卡器是非常多人采用的,不管是在读卡距离.读卡灵敏度都是非常好的.现在智能门锁的竞争性很大,大多厂商及方案商都慢慢往 ...
- 关于 MFRC522引脚功能图
MFRC522是属于13.56mhz芯片.另外SI522也是13.56mhz芯片,SI522 PIN对PIN完全兼容MFRC522,并且软硬件兼容,且引脚功能图都是一样的,功能方面比MFRC522多A ...
- 13.56Mhz SI522兼容MFRC522的资料以及对比性能
(13.56Mhz芯片) SI522是一颗专门替代MFRC522/FM17522,PIN对PIN 完全软硬件兼容.相对于MFRC522,SI522完全替换,不需要做任何更改,同时接受模式下功耗低10m ...
- 非接触式读卡器13.56MHZ芯片:SI522
对于现在的智能锁市场需求竞争极大,中小型厂家月销量更是在慢慢增长.刷卡功能更是智能锁的标配功能,当然13.56Mhz芯片现在讲究的就是超低功耗,为满足市场需求专注于物联网多年的中科微强力推出了13.5 ...
- ETC系列产品非接触式读卡器方案:SI522
随着科技的不断发展,出行上高速这是非常寻常的事.但是在很多节假日高峰时期,在高速路口塞车缴费给很多车主造成很大的烦心.为了解决这一系列的问题,科技发明了ETC这种便捷式缴费技术,让车主们顺畅通过高速路 ...
- 关于SI522替代FM17522和MFRC522的资料对比
以下是SI522与FM17522.MFRC522的对比参数: SI522是完全PIN对PIN软硬件兼容MFRC522.CV520.FM17522,另外我们可提供一对一技术支持解决客户所遇到的问题: 1 ...
随机推荐
- web容器向jar中寻找资源
示例代码下载地址 https://files.cnblogs.com/files/Mike_Chang/web%E5%AE%B9%E5%99%A8%E5%90%91jar%E4%B8%AD%E5%AF ...
- lodop 代码注释
LODOP.SET_PRINT_PAGESIZE(1,1000,1500,""); /*1,纵向输出;1000,宽度;1500,高度*:单位为0.1毫米/LODOP.ADD_PR ...
- Unity Optimization UNITY优化关注列表
这里主要罗列Unity引擎进行开发的应用或游戏,可以进行优化的各个关注点.(此文会持续更新) C# GC alloc Update LateUpdate Serialize String ToStri ...
- Ehcache.xml 配置及属性说明
1.配置样例 <?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStor ...
- 模板与STL学习简单的笔记
一.如何进行泛型编程 C/C++是一种静态编程语言,必须需要把代码翻译成可执行的二进制可执行程序然后再运行,一旦编译好之后就不能再变了(数据类型也就必须确定下无法更改,因此要为每一种数据类型编写一份算 ...
- mysql-sql-standard
https://github.com/zhishutech/mysql-sql-standard
- oracle中存储过程把表导出txt文件
create or replace directory MY_DIR as 'D:\MY_DIR\'; grant read,write on directory MY_DIR to adm; sel ...
- 辉光UIView的category
辉光UIView的category 本人视频教程系类 iOS中CALayer的使用 效果如下: 源码: UIView+GlowView.h 与 UIView+GlowView.m // // UI ...
- 模板(template)包含与继承
Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找). ...
- Git修改子模块的路径
Git在两个地方存储有关子模块的信息.第一个是在一个名为的文件中.gitmodules,该文件被签入git存储库.对此文件的更改将传播到其他存储库. 另一个位置在.git/config,并且它是执行大 ...