Skip to content

使用 Arduino 制作的 Aime 兼容读卡器。

Notifications You must be signed in to change notification settings

Sucareto/Arduino-Aime-Reader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arduino-Aime-Reader

使用 Arduino + PN532 制作的 Aime 兼容读卡器。

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

使用方法

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

如果需要自定义 Aime 卡,安装 MifareClassicTool 或其他同样效果的软件,修改 Aime 卡示例 后写入空白 MIFARE UID/CUID 卡,即可刷卡使用。
关于自定义 Aime 卡的写入和读取问题,请参考 SAK(88->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
  • 在游戏和服务器支持的情况下,本读卡器程序可正常使用 emoney 端末认证和刷卡支付功能

开发板适配情况

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

已知问题

  • 默认未启用 FeliCa 读写功能,仅在 CMD_CARD_DETECT 时读取 IDm 和 PMm,该设置可以通过 SKIP_FeliCa_THROUGH 控制
  • 启用 FeliCa 读写功能后,默认启用 PN532_FeliCa_THROUGH,FeliCa 操作命令直接转发给 PN532 处理,如果需要控制读写过程,可以禁用该定义,然后修改实现函数
  • 如果启用 FeliCa 读写功能,某些游戏可能不支持所有 FeliCa 卡种类,和官方读卡器行为一致
  • 因为 PN532 库支持的问题,未实现多卡同时读取,只会读到最先识别的卡片;刷数据不正确的 MIFARE 卡片(如交通卡、模拟卡)会导致游戏状态异常
  • 对于未适配的命令,默认回复 STATUS_INVALID_COMMAND,可能会导致游戏认为读卡器不可用

版本更新情况

通过 QHPaeek/pull/19nerimoe/pull/21 实现了 FeliCa 的正确读写、固件更新处理。
因未持有官方读卡器和框体等环境,无法进行更多测试,如没有 bug 或者新文档,将不会再更新。

参考 AiMeLib/AiMeNFCRW.h 重写命令标记和函数名,引入 status 定义表,并未在官方设备上确认效果。

参考 segatools 编写了基本实现;
分析了官方读卡器串口数据,通过猜测数据结构完成了大部分功能。

参考