首页 > 解决方案 > PPS(协议和参数选择)命令 - 全局平台脚本

问题描述

我正在尝试在智能卡上设置 PPS。我使用的环境基于 Global Platform 脚本。命令说明:

Boolean pps(Number protocol) 
Boolean pps(Number protocol, Number f, Number d) 

设置卡的物理协议。GP 脚本语言通过 ISO7816 提供对接触式智能卡的支持。可以支持其他专有协议,但取决于实现 GP 脚本语言的环境的支持。如果方法成功执行,则返回一个真正的布尔值。否则,如果参数有效,但环境不能执行card表示的智能卡的方法,则返回false值。如果提供了任何参数协议、f 或 d 的无效值(即本规范中未指定的值或环境不支持的值),则生成带有 GPError.INVALID_DATA 值的 GPError 对象。

样本:

// 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 卡.T14

如果指定了上述任何值,则还需要 f 和 d 参数。对于卡支持的专有协议,可以使用环境支持的唯一协议值,只要它不与卡常量定义的值冲突。以下是表示非标准协议的默认常量:
Card.OTHER
请参阅 ISO7816 的 ISO 规范。

f - 时钟速率转换因子
d - 数字波特率调整因子

根据 GP 平台描述,我对波特率 38400 的命令如下所示:

  this.card.reset( Card.RESET_COLD );
  this.card.pps(Card.T1, 372, 4);

我从 PPS 收到的回复是错误的。冷ATR为:3B680000990200D103042201

问题:

ATR:

标签: smartcardemvglobalplatform

解决方案


由于缺乏 Javacard 经验,部分答案:

如果我理解正确,你想设置你的卡,所以它接受 PPS。(阅读器必须触发它,所以卡片只能指示能力。)

  • 您的 ATR 必须提供一个 TA1 字节以向阅读器指示其 PPS 支持。对于 3.57 Mhz 的外部时钟,如果需要最大 38400 位/秒,则该时钟必须为 13。
  • 请注意,PPS 只是建立了应用于外部时钟的分频因子。如果阅读器提供与 3.57 MHz 不同的时钟,您的通信速率将成正比。(根据 ISO 7816-3,对于其他时钟范围,必须更改指示 Fi 的 TA1 的高半字节)
  • PPS 仅在复位后可用。

推荐阅读