0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创嵌入式Linux工控主板如何实现ISO7816协议

英创信息技术 作者:英创信息技术 2019-09-27 16:07 次阅读

ISO7816是一套协议标准,这套协议不仅规定了智能IC卡的机械电气特性,而且还规定了智能IC卡的应用方法。智能IC卡的主要用途可归为身份识别、支付安全、加密/解密和信息存储四个方面。智能IC卡已经广泛应用到金融、电信、电子商务等领域,我们平常使用的IC电话卡,充值电卡、燃气卡和手机中的SIM卡都属于智能卡的范畴。

ISO7816协议标准中,将协议模型定义为4层:物理层、数据链路层、传输层、应用层。

• 物理层:定义了位交换,主要定义波特率和字符帧的传输方式

• 数据链路层:定义了字符交换,传输的检错与纠错等

• 传输层:定义了针对协议的面向应用的提出报文传输

• 应用层:定义报文交换的内容

当ISO7816在基于英创的工控主板上应用时,可将ISO7816智能卡简单的理解成一个串口设备。串口的物理连接和系统驱动程序实现了ISO7816协议标准中的物理层和数据链路层(如图1中黄线以下部份)。应用程序负责数据的解析与应用,实现ISO7816协议标准的传输层与应用层(如图1中黄线以上部份)。

图1中黄线与红线之间是英创的工控主板,提供了硬件接口操作系统支持和串口驱动支持,既实现ISO7816协议的数据链路层和物理层。用户将ISO7816智能卡正确的连接到工控主板的串口上,编写应用程序,通过调用系统API函数就能实现对ISO7816智能卡的访问。

图 1:英创工控主板连接ISO7816智能卡

本文将以英创工控主板EM9280连接基于ISO7816协议的ESAM模块为例,讨论用户需要做的两项工作:

1、将智能卡连接到工控主板的串口

2、应用程序如何访问已连接到系统中的智能卡

1、智能卡(ESAM)的硬件连接

如图2中的U2所示,ESAM模块需要一个工作时钟和一个复位信号,通过一位IO与主机连接实现数据通讯。ESAM的复位信号使用EM9280的一位GPIO控制,工作时钟使用EM9280的一路PWM。ESAM模块使用单个I/O与主机通讯,自动切换收发方向,EM9280提供的是标准3线串口,所以没有办法与ESAM直接连接。图2中利用74HCT157,将串口的RXD,TXD模拟成ISO7816单IO通讯模式,利用串口的RTS#信号实现数据收发方向的自动切换。当EM9280发送数据时,RTS#输出低电平,选通74HCT157的A组,数据通过TXD6→2A→2Y输出到I/O脚。而1A通过R2上拉到高电平,所以1Y也是高电平,RXD6不会收到任何数据。数据发送完成后,RTS#被串口驱动程序自动将置为高电平,74HCT157的B组选通,ESAM模块发送的数据由I/O→1B→1Y到达RXD6,串口接收由ESAM模块发来的数据。此时2B由R2上拉到高电平,所以2Y亦是高电平,不会影响I/O上的数据传输。

图 2:EM9280连接ESAM模块

2、应用程序设置方法

对应用程序来讲,与ESAM通讯类似于RS485的半双工通讯,只是在开始串口通讯之前,针对ESAM模块,还需要一些额外的设置。

2.1 产生ESAM工作时钟

ESAM模块缺省工作时钟是其通讯波特率的372倍,我们使用EM9280的PWM1来产生ESAM的工作时钟。


// Generate clock for ISO7816.
m_hPWM = CreateFile(_T('PWM1:'), // name of device
GENERIC_READ|GENERIC_WRITE, // desired access
FILE_SHARE_READ|FILE_SHARE_WRITE, // sharing mode
NULL, // security attributes (ignored)
OPEN_EXISTING, // creation disposition
FILE_FLAG_RANDOM_ACCESS, // flags/attributes
NULL); // template file (ignored)
if( m_hPWM == INVALID_HANDLE_VALUE )
{
goto InitClearUp;
}
PWM_INFO PwmInfo;
PwmInfo.dwFreq = dwFI_DI_Ratio * dwBaud; // = 372 * 9600 = 3.5712MHz
PwmInfo.dwDuty = 50; // 50%
PwmInfo.dwResolution = 1;
dwNumberOfBytesWritten = 0;
WriteFile( m_hPWM, &PwmInfo, sizeof(PWM_INFO), &dwNumberOfBytesWritten, NULL);

2.2 打开串口并使能RTS_TOGGLE功能

使用标准的文件操作函数CreateFile打开串口设备,同时通过SetCommState函数设置串口通讯相关参数。此时ESAM模块的通讯波特率设置为9600bps,8位数据位,1位停止位,偶校验。

DCB dcb;
GetCommState( m_hSer, &dcb );
dcb.BaudRate = Baud; // 波特率 = 9600
dcb.ByteSize = Databits; // 数据位 = 8
dcb.Parity = EVENPARITY; // 偶校验
dcb.StopBits = ONESTOPBIT; // 停止位 = 1
SetCommState(m_hSer, &dcb);

在图2中,将3线串口模拟成单线的ISO7816模式,使用串口的RTS作为数据传输方向控制信号。EM9280可以为打开的串口任意指定一位GPIO作为其RTS信号线,实现方法如下:

DCB dcb;
BOOL bRet;
bRet = DeviceIoControl(m_hSer, // 已经打开的串口设置句柄
IOCTL_SET_UART_RTS_PIN, // I/O control code
&dwRTSPin, // 选择作为RTS的GPIO,如图2中选择GPIO7
sizeof(DWORD),
NULL,
0,
NULL,
NULL);
if( bRet )
{
GetCommState( m_hSer, &dcb ); // Get dcb
dcb.fRtsControl = RTS_CONTROL_TOGGLE; // Enable RTS Toggle
SetCommState(m_hSer, &dcb); // update dcb
}

2.3 数据收发

应用程序可以创建一个线程,然后等待串口事件接收串口数据。

应用程序调用WriteFile函数发送数据,但需要特别注意ISO7816传输协议中关于“保护时间”要求,协议中规定两个连续的字符帧之间必需要有一个最小时间间隔,即保护时间,当波特率为9600bps时,保护时间最小大约为200uS。

如果直接调用WriteFile将要发送的数据一次性发送

WriteFile( m_hSer, Buf, len, &dwLen, NULL);

在EM9280上测得的字符间时间间隔大约为30uS,显示不能满足协议保护时间的要求。为了达到保护时间的要求,可以采用下面的方式,将需要发送的数据一个字节一个字节的发送。

for( int i; i

WriteFile( m_hSer, Buf+i, 1, &dwLen, NULL);

上面的for循环每调用一次WriteFile函数,只发送1个字节,在EM9280上测得的字符间时间间隔最小大约为500uS,满足协议保护时间的要求,实际测试也能正常与ESAM模块通讯。

如果主机串口硬件没有支持ISO7816模式,如英创公司工控主板EM9170、EM9283等,就可以按本文的方法,增加很少的几个器件就能连接ISO7816设备。

英创公司Atmel系列工控主板,CPU的串口本身就支持ISO7816模式,可直接连接IS07816智能卡。我们实现了相应的驱动程序,相关的使用方法可参考下面的文章:

ISO7816通讯协议在工控主板EM9160中的实现方案

工控主板EM9161对ISO7816协议的支持

英创嵌入式Linux工控主板如何实现ISO7816协议

我们还提供了ESAM模块完整的测试程序,需要的用户可与我们联系获取相关代码。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11292

    浏览量

    209328
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35295
收藏 人收藏

    评论

    相关推荐

    ISO7816 智能卡标准下载

    ISO7816 智能卡标准下载 ISO 7816-4 Smart Card Standard: Part 4: Interindustry Commands for Interchange[此贴子已经被作者于2008-
    发表于 05-14 23:27

    支持Linux高级客户自行移植内核

    上市)  该项服务具体说明和实施流程参见:支持客户进行Linux移植  需要该服务的客户需与签订技术保密协议,并承诺严格履行协议
    发表于 01-18 13:52

    工控主板产品选型指南

      成都信息技术有限公司是一家专注于嵌入式工控主板研发、销售与服务的高科技公司,在嵌入式领域
    发表于 02-28 11:28

    嵌入式主板的无线通讯解决方案

    WiFi模块。ETA6210模块继续保持了PPP拨号模式,使得无论是Linux平台的主板还是CE平台的主板,都能方便的使用。  下表列出了当前
    发表于 03-24 14:00

    工控主板通过PPI协议连接西门子PLC

    ,但西门子并未公开PPI协议内容。Modbus是工业控制现场广泛应用的通讯协议,在嵌入式领域,嵌入式主板通常采用Modbus与PLC相连,
    发表于 10-19 16:14

    主板中预装Modbus通讯协议

    modbus_Master.h,与原来的静态库保持不变,相应各个API函数的说明请参见网站技术天地文章《Wince下的Modbus主控通讯协议》、《
    发表于 10-20 10:40

    ISO7816 (part 1-3)异步

    ISO7816 (part 1-3) asynchronous smart card information - Contents -I ) Introduction of the ISO7816 standardII ) Summary
    发表于 03-11 13:14 4138次阅读
    <b class='flag-5'>ISO7816</b> (part 1-3)异步

    信息技术工控主板EM9161对ISO7816协议的支持概述

    在当前的金融POS终端及相关领域,ISO7816通讯协议得到了广泛应用。工控主板EM916
    的头像 发表于 11-17 11:50 1737次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术<b class='flag-5'>工控</b><b class='flag-5'>主板</b>EM9161对<b class='flag-5'>ISO7816</b><b class='flag-5'>协议</b>的支持概述

    信息技术ISO7816通讯协议工控主板EM9160介绍

    在新的国家电网智能终端相关标准中,规定了通过专门的加密芯片来保证设备数据安全性的方法,而设备主控单元与加密芯片采用了广泛应用的ISO7816通讯协议
    的头像 发表于 11-18 09:56 2385次阅读

    信息技术嵌入式Linux主板EM9160支持ISO7816通讯协议介绍

    新的技术需求,我们对嵌入式Linux主板EM9160的串口驱动进行了升级,使其多个串口都可支持ISO7816协议,为客户进行智能终端整机设计
    的头像 发表于 11-18 10:09 2265次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>主板</b>EM9160支持<b class='flag-5'>ISO7816</b>通讯<b class='flag-5'>协议</b>介绍

    信息技术嵌入式Linux工控主板uboot命令简介

    成都利公司提供的EM9X60系列嵌入式Linux工控主板,均预装了Linux2.6.30内核操
    的头像 发表于 01-15 14:01 1375次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>工控</b><b class='flag-5'>主板</b>uboot命令简介

    信息技术EM9X60利用串口实现ISO7816介绍

    为基础,并针对客户应用的需求,增加了更多通用数字IO,该产品继续保持了Linux操作系统作为客户应用程序的软件平台。这三款主板均具备6个串口,其中的4个串口可支持ISO7816,用户可以通过简单的设置,即可将异步串口转换为符合
    的头像 发表于 01-15 14:49 2906次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术EM9X60利用串口<b class='flag-5'>实现</b><b class='flag-5'>ISO7816</b>介绍

    信息技术嵌入式Linux主板Qt串口应用程序简介

    :/dev/ttyS1,设置串口参数,创建一个单独的线程来对数据进行收发,使用read函数读取数据,write函数发送数据。并且公司将其封装成一个serial类,可以使用serial类方便的操作
    的头像 发表于 01-17 09:41 1819次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>主板</b>Qt串口应用程序简介

    信息技术Linux工控主板支持3G网卡介绍

    (3rd-generation,第三代移动通讯技术)运用的普及,公司的工控主板同样对3G无线通讯做了完备的支持。本文就以目前很常用的华为3G网卡770W和E261为例,介绍
    的头像 发表于 01-17 09:49 2206次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b>信息技术<b class='flag-5'>Linux</b><b class='flag-5'>工控</b><b class='flag-5'>主板</b>支持3G网卡介绍

    什么是嵌入式工控主板嵌入式工控主板的分类和应用有哪些?

    什么是嵌入式工控主板嵌入式工控主板的分类和应用有哪些这样的问题,相信对于很多不懂行的人或者是初
    的头像 发表于 07-05 11:15 1253次阅读