JavaCard小程序开发遇CREF模拟器选卡错误SW1:6e SW2:00求助
解决JavaCard CREF模拟器选卡时SW1:6E SW2:00的问题
SW 6E00这个错误其实很明确——Class Not Supported,也就是你发送的APDU指令里的CLA(类别字节)不被CREF模拟器或者当前卡片环境支持。结合你用的JCDK2.2.2、Eclipse JCDE这套工具链,我给你梳理几个最可能的排查方向:
1. 先检查初始化脚本create-Card.script里的APDU指令
JCDK2.2.2的CREF模拟器默认只认0x00或者0x80作为合法的CLA字节。如果你的脚本里用了其他值(比如常见的0xA0),直接就会触发6E00错误。
- 打开你的脚本文件,逐个检查APDU的第一个字节:
错误示范:
A0 A4 00 00 02 3F 00(用了0xA0作为CLA)
正确示范:00 A4 00 00 02 3F 00或者80 A4 00 00 02 3F 00
2. 确认小程序部署时的安装APDU正确性
你通过Eclipse JCDE的「Java Card Tools > Deploy」部署小程序时,工具会自动生成安装APDU,但偶尔会因为配置问题出现CLA错误。
- 查看部署日志里的安装指令,正确的安装APDU开头应该是
80 E6 00 00 ...(E6是INSTALL命令的INS字节,CLA用0x80是CREF的标准要求)。 - 如果日志里的CLA不是0x80,可以手动调整JCDE的部署配置,强制使用兼容的CLA值。
3. 检查模拟器与工具链的版本匹配
你用的JCDK2.2.2是比较老的版本,对应的CREF模拟器只支持Java Card 2.2.2规范的指令集,不要尝试用Java Card 3.0及以上的指令(比如某些扩展CLA),否则必然会触发兼容性错误。
4. 验证模拟器的连接与基础指令
先跳过自定义脚本,用JCDE自带的APDU发送工具测试一个最简单的SELECT指令:
00 A4 00 00 [你的AID长度] [你的小程序AID字节]
如果这个指令返回9000,说明CLA的问题已经解决,那错误肯定出在create-Card.script里的其他指令上;如果还是返回6E00,那就要检查模拟器的启动参数或者JCDE的配置是否正确。
内容的提问来源于stack exchange,提问作者Strider
相关产品推荐
相关产品推荐

