大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
最近想要复刻一下稚晖君的小卡片,因此来学习一下。
一、一些开始着手时的模糊的问题解决
1.ST25DV作为NFC的PHY通过I2C总线和STM32通信,主要作用有两个:能量采集以及NFC通信。注意,ST25DV只是负责和手机进行NFC通信,而不负责IC卡的读写功能,因为ST25DV只支持ISO 15693的RFID协议,而我们常用的IC卡(M1卡)是ISO 14443协议的,所以并不能直接使用这颗芯片进行IC卡模拟。
2.IC卡的模拟功能这一版中实现得比较简单,就是直接集成了多颗UID芯片(很便宜,1~2元一片),然后和ST25DV共用NFC天线,卡片的切换是通过拨轮换挡实现的。好处在于,你可以把L-ink当作多张独立卡片的合集处理,复制和刷卡都是很直接的(使用PM3或者PN532等模块读取原卡信息并写入L-link)。当然缺点就是添加的卡片一多,按键的数量就要增加(因为每一档对应一张卡)。
所以,用到的PN532不需要编程开发
二、通信协议
1.硬件SPI与模拟SPI
硬件SPI因为有专用的寄存器支持,所以很少占用CPU资源,但是并不是每一款处理器都能提供SPI,而且有时候即使有SPI硬件接口,可能因为数量不够或者管脚被占用,导致硬件SPI不能使用,这时候就可以使用GPIO模拟SPI通讯,这样的好处是可以使用任意GPIO管脚实现SPI通讯,并且代码通用性很强,可以在不同处理器甚至不同架构之间移植,比较方便。
2.SPI与IIC通信协议
SPI与IIC通信协议_NaCl鱼呜啦啦的博客-CSDN博客
IIC:ST25DV
SPI:墨水屏
3.SPI通信时序
由于墨水屏只需要显示,这里将从机发,主机收的数据线(MISO)隐藏。
CS:从机片选,当CS为低电平的时候,芯片使能
DC:数据/命令控制引脚,当DC=0时写入命令;DC=1时写入数据
SCLK: SPI通信时钟
SDIN:SPI通信主机发送,从机接收
时序:CPHL=0, CPOL=0 (SPI0)
时钟极性(CPOL)定义了时钟空闲状态电平:CPOL=0为时钟空闲时为低电平
时钟相位(CPHA)定义数据的采集时间:CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。
三、墨水屏
1.工作原理
微胶囊电泳显示”技术:其基本原理是悬浮在液体中的带电纳米粒子受到电场作用而产生迁移。电子纸显示屏是靠反射环境光来显示图案的,不需要背光,在环境光下,电子纸显示屏清晰可视,可视角度几乎达到了 180°。
2.注意事项
- 注意屏幕不能长时间上电,在屏幕不刷新的时候,要将屏幕设置成睡眠模式,或者进行断电处理。否则屏幕长时间保持高电压状态,会损坏膜片,无法修复!
- 使用墨水屏的时候,建议刷新时间间隔至少是180s, 并且至少每24 小时做一次刷新,如果长期不使用墨水屏的话,要将墨水屏刷白存放。(具体储存环境需求参考数据手册)
四、产品选型
1.NFC通信芯片–st25dv
支持能量采集功能,将卡片获得的能量同时传输出来供一部分给MCU使用;MCU用来驱动刷新墨水屏。
2.主控芯片MCU的选择
超低功耗L051
五、ST25DV的NFC协议——ISO15693
1.ISO15693与ISO14443A/B
①通信距离的不同:
ISO15693协议的理论读写距离≤1m,ISO14443A/B协议的理论读写距≤10cm
读写远距离换来的就是私密性的丧失和通信速率的降低。
2.NFC学习笔记
近场通信(Near-field communication,简称NFC)技术可以提供短距离无线连接,实现电子设备间的双向交互通信。NFC技术由RFID(非接触式射频识别)演变而来,但NFC有特定的标准集,确保具有NFC功能的设备的互操作性。
NFC采用电磁耦合感应技术,电磁场频率是13.56MHz,该载波频段是全球无需许可证的波段。发起设备用13.56MHz信号激励天线,产生磁场。通过近场耦合,将能量传递给目标。目标对磁场进行调制,将数据返回给发起设备完成通信。
NFC有三种工作模式,该项目应该使用的是读卡器模式。
3.NFC标签
将 NFC 标签与 Android 设备结合使用时,用于读取和写入标签数据的主要格式是 NDEF。当设备扫描具有 NDEF 数据的标签时,Android 会尽可能在解析消息和通过 NdefMessage
传递该消息方面提供支持。不过,在某些情况下,您扫描的标签可能不包含 NDEF 数据,或者 NDEF 数据无法映射为 MIME 类型或 URI。在这些情况下,您需要直接开启与标签的通信,并使用自己的协议(以原始字节形式)对标签执行读写操作。Android 通过 android.nfc.tech
软件包对这些用例提供一般性支持,如表 1 所述。您可以使用 getTechList()
方法确定标签支持的技术,还可以使用 android.nfc.tech
提供的一个类来创建相应的 TagTechnology
对象。
六、卡片的复制
1.cuid和uid卡有什么区别
CUID卡不响应后门指令。UID卡响应后门指令。
后门程序一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法。在软件的开发阶段,程序员常常会在软件内创建后门程序以便可以修改程序设计中的缺陷。
相应后门指令的UID卡是可以格式化的,在练习读写卡的时候,最好使用UID卡,这样便于在将数据写坏后重置。
2.IC卡
UID与CUID的区别:
UID具有“后门”,CUID则没有“后门”。具有“后门”则可以绕过正常的权限,对数据进行激活成功教程、格式化等。
每张IC卡都有16个扇区,包括1个公共区和15个数据区。每个扇区有4个块,每个块占16字节。
每个扇区的块0,块1,块2可以用来存储数据(扇区0的块0除外)。
第0扇区的块0为厂商代码,已经固化。包括芯片序列号UID,ATQA和SAK。
每个扇区的块3为控制块,用来存放密码和控制权限 ,不能用来存储数据。
块3的前6个字节为KeyA,后6个字节为KeyB。中间的4个字节为存储控制。
每个扇区可以通过它包含的密钥A或者密钥B单独加密。
七、图像处理
1.灰度处理
在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红、绿、蓝三原色来表示真彩色,R分量,G分量,B分量的取值范围均为0~255。
灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。
图像的灰度化处理可用两种方法来实现。
第一种方法使求出每个像素点的R、G、B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。
第二种方法是根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:Y=0.3R+ 0.59G +0.11B,以这个亮度值表达图像的灰度值。
2.二值化
二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0~255,在二值化后的图像中的灰度值范围是0或者255。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/226859.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...