设为首页 加入收藏

TOP

英利嵌入式Linux工控主板支持ISO7816通讯协议
2014-11-24 03:29:32 来源: 作者: 【 】 浏览:0
Tags:嵌入式 Linux 工控 主板 支持 ISO7816 通讯 协议

在新的国家电网集抄终端相关标准中,规定了通过嵌入式安全控制模块,即通常所说的ESAM芯片,来保证设备数据安全性的方法,而设备主控单元与ESAM芯片采用了广泛应用的ISO7816通讯协议。为了适应这一新的技术需求,我们对嵌入式Linux工控板EM9160的串口驱动进行了升级,使其多个串口都可支持ISO7816协议,为客户进行智能终端整机设计时,提供了灵活的选择。


对EM9160工控主板,可在其异步串口的基础上,通过简单的设置,就可把串口转为符合ISO7816协议的接口,实现与各种智能卡的通讯。EM9160共有6个异步串口,在Linux环境中为“/dev/ttyS1”-“/dev/ttyS6”,其中支持ISO7816的串口如下表所示:




EM9160在硬件上与ESAM芯片的连接很简单,如上表所示,只需要3条信号线,连接示意图如下:


嵌入式Linux主板EM9160支持ISO7816通讯协议


为了简化EM9160对ISO7816协议的参数设置,其FI/DI比值固定为372,事实上这也是应用中最常用的比值,符合国电公司指定的ESAM芯片的要求。若所用串口的波特率为9600bps,则输出的SCK频率为3.5712MHz。


EM9160的“/dev/ttyS4”-“/dev/ttyS6”串口信号均为TTL电平,建议客户首选其中之一作为与ISO7816智能芯片的通讯接口。如果这些串口已分配给设备的其他功能,也可以考虑使用“/dev/ttyS2”口,需要注意的是“/dev/ttyS2”口出厂的缺省电平是RS232电平,若客户考虑配置“/dev/ttyS2”作为ISO7816协议端口,需在订购时通知厂方设置成TTL电平。另外当GPIO15或GPIO14一旦作为了ISO7816的工作时钟输出,就不能再用作其他的用途了。


为了方便设置ISO7816工作模式,在“em9x60_drivers.h”中定义了两个常量:


#define EM9X60_ISO7816_T0 (1 << 27)


#define EM9X60_ISO7816_RXD_RESET (1 << 23)


作为应用程序,在设置ISO7816模式的串口(以”/dev/ttyS4”为例)时,一般的流程如下:


1、按标准方法打开串口 fd = open(“/dev/ttyS4”, O_RDWR | O_NOCTTY);


2、获取数据结构 struct termios new_opt; tcgetattr(fd, &new_opt);


3、设置包括波特率、偶校验、8-bit数据等符合ISO7816规范的串口参数;


4、首先对ESAM芯片进行一次复位操作:


new_opt.c_cflag |= (EM9X60_ISO7816_T0 | EM9X60_ISO7816_RXD_RESET);


tcsetattr(fd, TCSANOW, &new_opt);


udelay(100); //延时100us


new_opt.c_cflag &= ~EM9X60_ISO7816_RXD_RESET;


5、再设置一次正常的ISO7816工作模式:


tcsetattr(fd, TCSANOW, &new_opt);


此时GPIO15已作为SCK输出3.57MHz时钟,若波特率为9600bps的话;


6. 按照ISO7816的协议规范,进行正常数据通讯;


7. 若需要把该串口恢复到正常模式,只需对参数进行设置一次即可:


new_opt.c_cflag &= ~ EM9X60_ISO7816_T0;


tcsetattr(fd, TCSANOW, &new_opt);


8. 按标准方法关闭串口close(fd)。


在实际的嵌入式应用系统中,一个串口一旦配置成与ESAM芯片相连,就不太可能还需要用作它用,因为复用串口会增加系统硬件的成本,更何况EM9160自身就有多达6个异步串口,完全可满足大多数智能终端的需求。


ISO7816协议有一套完整的链路层协议,为此我们将封装专门的协议层软件,并撰写相应的文章在技术天地栏目中介绍其应用,这里就不在赘述。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Ubuntu下编译Linux内核2.6.36-rc4 下一篇Linux Tomcat 集群 利用记实1--搭..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)