窥视Nokia C7
首先从nokia开始吧,为什么?因为你们可能不知道世界上真正商用的支持NFC的手机早在05年左右就由nokia发布了,它可是起了个大早赶了个晚集,当时没扇呼起来,现在别人扇呼起来了,当然第一时间跟上了。
先看看它的手机结构图吧,你会发现它使用了NXP的PN544,那么这个设备显然是支持SWP方式的,而且是采用UICC也就是我们所说的USIM卡来作为安全组件的。
想引爆它,nokia需要升级他们的固件以支持合适的协议栈。Nokia很可能会和google的选择一样使用NXP的FRI。
NXP的FRI
FRI是通过HCI命令控制NFC芯片的基本软件协议栈。android和symbian^3都是基于C实现的内核,所以FRI会很容易融合到这两个操作系统中的。
这个软件协议栈包含了读写模式,P2p/LLCP模式和使用SWP或其他安全组件的卡模拟模式的全部功能。
在FRI的上层Nokia将会提供JSR257用来实现读写功能和交换NDEF数据结构。至于是否支持使用SWP的UICC方式的卡模式依赖于FRI的配置。
Nokia已经提供了JSR177的api是的J2me的应用能够访问UICC。但是有人做过真正可用的JSR177的程序么?我说恐怕没有,为什么?因为两点:如果你需要使用JSR177开发的程序能在手机上运行,你需要J2ME软件最高级别的签名,不说签名价格的问题,但是有没有人能给你签都是回事,真真是拿着猪头找不到庙门。目前除了nokia还在支持J2ME,其他的大的手机厂商都已经放弃了,你包括摩托和爱立信已经不再支持J2ME的功能,android手机的java是自己另外的解决方案,有个老外开发者早在08年就喊了J2ME已经死了。我也举得他死了,不说别的,从去年开始我就花钱从nokia的技术支持前后开了3个case,到现在还没有能够拿到nokia提供的可用于C7的jsr177测试程序,人家说这个程序不同于最早jsr177由sun给出的,新的他们的研发还没拿出来呢,现在我依然在等待,而且据说这个签名很难提供给第三方开发者的。
Nexus S藏着惊喜
那么来看看三星吧。三星用的芯片是NXP的PN65N。这个芯片是一个PN544的NFC控制器和一个内嵌的SmartMX安全组件集合体。如图:
很明显这个手机支持SWP协议的卡模拟模式。但是软件如何呢?它是一个android手机,你从android的开源网站上可用看到NXP的FRI库。
但是如果你看源码的话你会发现SWP的标识是disabled的,同样在java的api中你也可用看到暂不提供mNfcAdapter.getSecureElementList()支持的。
在Nexus S上DIY一把NFC如何?
首先下载源码,改代码,然后重新编译,然后写入手机,然后ok,Nexus S已经支持SWP和卡模拟模式了。
我们做了一个android的应用可用完全控制手机里的NFC芯片,但是我们还下个从android里直接控制UICC,这个咋办呢?I have no idea?
我们知道google真的不需要SWP,但是这是一种NFC的解决方案,这回被不同的市场和不同的手机厂商选择,支持他对android来说当然也不错。