1
0
mirror of synced 2024-11-23 23:50:56 +01:00
使用 Arduino 制作的 Aime 兼容读卡器。
Go to file
2024-02-22 14:33:42 +08:00
doc 更改aime示例中SAK(88->08)使写入空白卡后可被读取 2024-02-16 16:58:55 -06:00
tools 更新测试示例:添加FeliCa读取,添加ESP32支持。 2022-04-28 11:57:10 +08:00
Aime_Reader.h 格式调整 2023-07-02 02:40:19 +08:00
Arduino-Aime-Reader.ino 格式调整 2023-07-02 02:40:19 +08:00
README.md Update README.md 2024-02-22 14:33:42 +08:00

Arduino-Aime-Reader

使用 Arduino + PN532 制作的 Aime 兼容读卡器。
当前更新内容未经过长时间测试,如果遇到问题可以回滚到稳定的 v1.0 版本
English: lawliuwuu/Arduino-Aime-Reader

  • 支持卡片类型: FeliCaAmusement IC、Suica、八达通等MIFAREAimeBanapassport
  • 逻辑实现是通过对官方读卡器串口数据进行分析猜测出来的,并非逆向,不保证正确实现
  • 通信数据格式参考了 Segatools 和官方读卡器抓包数据,可在 Example.txtnfc.txt 查看
  • 定制使用例(主要的开发测试环境):ESP32-CardReader

使用方法:

  1. 按照 PN532 的提示安装库
  2. 按照使用方式,在 Arduino 和 PN532 接好连接线I2C 或 SPI并调整 PN532 上的拨码开关
  3. 接上 WS2812B 灯条(可选,不会影响正常读卡功能)
  4. 上传 ReaderTest 测试硬件是否工作正常
  5. 若读卡正常,可按照支持列表打开设备管理器设置 COM 端口号
  6. 按照游戏的波特率设置代码的high_baudrate选项,115200true38400false
  7. 如果有使用 Segatools,参考 segatools.ini 设置教程 关闭 Aime 模拟读卡器
  8. 上传程序打开游戏测试

如果需要自定义 Aime 卡,安装 MifareClassicTool,修改 Aime 卡示例 后写入空白 MIFARE UID/CUID 卡,即可刷卡使用。
关于自定义 Aime 卡的写入和读取问题,请参考 SAK88->08的讨论。
某些 Arduino 可能需要在游戏主程序连接前给串口以正确的波特率发送 DTR/RTS需要先打开一次 Arduino 串口监视器再启动主程序。

支持游戏列表:

代号 默认 COM 号 支持的卡 默认波特率
SDDT/SDEZ COM1 FeliCa,MIFARE 115200
SDEY COM2 MIFARE 38400
SDHD COM4 FeliCa,MIFARE cvt=38400,sp=115200
SBZV/SDDF COM10 FeliCa,MIFARE 38400
SDBT COM12 FeliCa,MIFARE 38400
  • 如果读卡器没有正常工作,可以切换波特率试下
  • 有使用 amdaemon 的,可以参考 config_common.json 内 aime > unit > port 确认端口号
  • 如果 "high_baudrate" : true 则波特率是115200,否则就是38400
  • "high_baudrate" : true 的情况下,本读卡器程序支持 emoney 功能,端末认证和刷卡支付均正常(需要游戏和服务器支持)

开发板适配情况:

开发板名 主控 备注
SparkFun Pro Micro ATmega32U4 需要发送 DTR/RTS未完全测试
SparkFun SAMD21 Dev Breakout ATSAMD21G18 未完全测试
NodeMCU 1.0 ESP-12E + CP2102 & CH340 SDA=D2SCL=D1
NodeMCU-32S ESP32-S + CH340 主要适配环境
Arduino Uno ATmega328P + CH340 未实际测试,据反馈不可用

已知问题:

  • 在 NDA_08 命令的写入 Felica 操作没有实现,因为未确认是否会影响卡片后续使用
  • 未确定res.status错误码的定义,因此res.status的值可能是错误的
  • 因为 PN532 库不支持同时读取多张卡片,所以未实现mifare_select_tag,只会读到最先识别的卡片

引用库: