PPS(协议和参数选择)命令 - 全局平台脚本
Posted
技术标签:
【中文标题】PPS(协议和参数选择)命令 - 全局平台脚本【英文标题】:PPS (Protocol and Parameter Selection) command - Global Platform Scripting 【发布时间】:2020-07-23 01:32:12 【问题描述】:我正在尝试在智能卡上设置 PPS。我使用的环境基于 Global Platform 脚本。命令说明:
Boolean pps(Number protocol)
Boolean pps(Number protocol, Number f, Number d)
设置卡的物理协议。 GP 脚本语言 通过 ISO7816 提供对接触式智能卡的支持。其他 可以支持专有协议,但取决于 实现 GP 脚本语言的环境。如果方法 执行成功,然后返回一个真正的布尔值。 否则,如果参数有效,但环境不能 执行card所代表的智能卡的方法,然后a 返回错误值。如果值无效(即未指定值 在本规范或环境不支持的值) 提供任何参数协议、f 或 d,然后是 GPError 使用 GPError.INVALID_DATA 值生成对象。
示例:
// On a card with a contact interface
this.card.pps(Card.T1, myFrequency, myDivisor);
// returns false value if the card doesn’t support T=1 protocol
协议
协议参数将包含所需的协议值 对应于卡配置文件中定义为支持的值。 联系人卡片的有效值(通过 ISO7816)是:
卡.T0 卡.T1 Card.T14
如果指定了上述任何值,则 f 和 d 参数 也是必需的。对于卡支持的专有协议, 可以使用环境支持的唯一协议值,如 只要它不与为卡定义的值冲突 常数。以下是用于表示的默认常量 非标准协议: 卡.其他 请参阅 ISO 规范 ISO7816。
f - 时钟频率转换因子d - 数字波特率调整 因素
根据 GP 平台描述,我的波特率 38400 命令如下所示:
this.card.reset( Card.RESET_COLD );
this.card.pps(Card.T1, 372, 4);
我从 PPS 收到的回复是错误的。冷ATR为:3B680000990200D103042201
问题:
GP PPS 命令参数的数字我不确定它应该是 372、4 还是 10、13 用于波特率 38400? 给定的 ATR 看起来支持 T0 协议,我的命令可能需要是:this.card.pps(Card.T0, 372, 4);? 或者我可能需要进行热复位,如果热 ATR 支持 T1 协议,则发送 this.card.pps(Card.T1, 372, 4);?ATR:
TS:3B T0: 68 -> TB1, TC1, 8 个历史人物 TB1: 00 -> Vpp 未使用; EEPROM 的编程电压在芯片中生成 TC1: 00 -> 没有额外的保护时间 历史字节(T1-T8):990200D103042201【问题讨论】:
【参考方案1】:由于缺乏Javacard经验,部分回答:
如果我理解正确,您想设置您的卡,使其接受 PPS。 (读卡器必须触发,所以卡片只能表示能力。)
您的 ATR 必须提供一个 TA1 字节以向阅读器指示其 PPS 支持。对于 3.57 Mhz 的外部时钟,如果需要最大 38400 位/秒,则该时钟必须为 13。 注意,PPS 只是建立了应用于外部时钟的分频因子。如果阅读器提供与 3.57 MHz 不同的时钟,您的通信速率将成正比。 (对于其他时钟范围,表示 Fi 的 TA1 的高半字节必须根据 ISO 7816-3 进行更改) PPS 只能在重置后才能使用。【讨论】:
Java Card 不响应 PPS,您只能使用它来设置历史字节,并且只有在您拥有正确的权限(即作为默认应用程序)的情况下。所以我想你对这个答案有足够的了解 Java Card。当然,不同的供应商可能有初始化阶段,可以让你修补......以上是关于PPS(协议和参数选择)命令 - 全局平台脚本的主要内容,如果未能解决你的问题,请参考以下文章