11

我们开发了一个带有微控制器的原型板,它可以与智能卡通信(它可以读取 ATR、发出和读取对 APDU 命令的响应等)。现在我想将此硬件与 Android 手机或平板电脑一起使用。我们的开发板有一个 USB 连接,通过它我们可以通过 Android 读取和写入 MCU。

最终目标是在支持 PKCS #11 的 Android 平台上拥有一个功能正常的智能卡读卡器,并为智能卡读卡器的最终用户提供一个库,以便他们可以与他们的卡进行通信。

我已经阅读了几个关于这个主题的讨论,其中一些说我必须构建一个定制的 Android 来做到这一点。我对 Android 架构不是很熟悉,无法理解为什么当我可以通过 USB 与外围设备(读卡器)通信时,我必须重新构建 Android。在我看来,如果我提供了一个实现类似 CCID 接口的库,那么用户可以通过将我的库集成到他们的目标 .apk 文件来使用 Android USB 堆栈与我的阅读器进行通信。

上述计划是否存在我们不知道的问题?我担心我们缺少一些关于 Android 或智能卡读卡器的基本知识(例如:安全性),这会在我们开始实现上述库时给我们带来问题。

4

3 回答 3

2

我已将 USB 外围设备集成到我的自定义平台的自定义 Gingerbread 发行版中。您自定义 Android 平台的唯一原因是添加或修改一些驱动程序,使您可以访问您的 USB 设备。如果您的 USB 设备已经使用标准 Android 设备支持的协议,那么祝您好运!你几乎都准备好了。但在庆祝你的胜利之前,我会在各种设备上试一试。在 Android 和内核级别,Google 提供了一个非常准系统的发行版,其中包含大量驱动程序源代码。由手机/平板电脑制造商根据设备使用的硬件决定他们将包含哪些低级驱动程序和协议。由于手机/平板电脑的内存量是有限的,所以一般规则是只包含所需的内容。

希望这个简单的答案会有所帮助。

于 2013-04-17T13:26:05.067 回答
2

在对该领域进行了更多研究之后,您可以使用几种解决方案:

  1. 制作您的自定义驱动程序(简单的通信,一些简单的命令来重置卡并为其供电)。在这种情况下,您只需要执行重置/电源命令和 T=1 通信协议,但是这种方法的最大缺点是它只能与您的读卡器一起使用,这是一个很大的限制。
  2. 在控制器上实现 CCID 接口并将其包装在 APDU 命令周围。这种方法是可扩展的,只要你遵守规范(很多制造商不这样做,这就是为什么 pcsc-lite 有支持的阅读器列表的原因)。如果您想卖给很多读者,这种方法是最具成本效益的。你可以在这里找到规范
  3. 将 CCID 芯片添加到已经实现 CCID 通信的组件中。此类芯片由多家供应商制造,STMelectronics 有很多,但是在这种情况下,您的最终阅读器将花费更多,并且您将无法完全控制协议。

至于Android端,seek提供了pcsc-lite驱动的移植,没试过,但从源码看,他们只是修改了原驱动的usb api,使用JNI接口与c 代码。

于 2019-08-21T15:59:54.093 回答
1

我不确定读者的 CCID 实现,但对于 android 有一些 C/C++ 端口,但不确定它们是否有效。在android部分很容易实现CCID协议看看这个。最难的部分是为读者制作固件,有很多小细节需要注意。

于 2019-03-11T16:57:56.000 回答