英利EM9160、EM9460系列產(chǎn)品,均以豐富的串口資源為特色,已大量地應(yīng)用于工業(yè)環(huán)境中,特別是在電力系統(tǒng)中應(yīng)用。最近公司即將推出一款新的產(chǎn)品EM9560工控主板,該主板是是以EM9460工控主板為基礎(chǔ),并針對(duì)客戶應(yīng)用的需求,增加了更多通用數(shù)字IO,該產(chǎn)品繼續(xù)保持了Linux操作系統(tǒng)作為客戶應(yīng)用程序的軟件平臺(tái)。這三款主板均具備6個(gè)串口,其中的4個(gè)串口可支持ISO7816,用戶可以通過(guò)簡(jiǎn)單的設(shè)置,即可將異步串口轉(zhuǎn)換為符合ISO7816的接口,從而方便地實(shí)現(xiàn)和各種智能卡之間的通訊。本文將詳細(xì)介紹在EM9160、EM9460、EM9560工控主板上設(shè)置ISO7816的方法。
1、ISO7816接口資源配置
可支持ISO7816的串口資源包括:ttyS2 + GPIO14、ttyS4 + GPIO15、ttyS5 + GPIO15、ttyS6 + GPIO15,其中的GPIO14和GPIO15分別作為ISO7816的工作時(shí)鐘輸出,需要注意的是ttyS4、ttyS5、ttyS6這三個(gè)串口共用的是一個(gè)工作時(shí)鐘輸出,如果需要同時(shí)使用的話,要求波特率是一致的。以下為資源列表:
串口 | 管腳配置 | 備注 |
ttyS2 | TXD:半雙工數(shù)據(jù)線 | |
RXD:復(fù)位輸出控制 | 低電平有效 | |
GPIO14:作為SCK | 輸出頻率與波特率等參數(shù)有關(guān) | |
ttyS4 | TXD:半雙工數(shù)據(jù)線 | |
RXD:復(fù)位輸出控制 | 低電平有效 | |
GPIO15:作為SCK | 輸出頻率與波特率等參數(shù)有關(guān) | |
ttyS5 | TXD:半雙工數(shù)據(jù)線 | |
RXD:復(fù)位輸出控制 | 低電平有效 | |
GPIO15:作為SCK | 輸出頻率與波特率等參數(shù)有關(guān) | |
ttyS6 | TXD:半雙工數(shù)據(jù)線 | |
RXD:復(fù)位輸出控制 | 低電平有效 | |
GPIO15:作為SCK | 輸出頻率與波特率等參數(shù)有關(guān) |
其中ttyS4-ttyS6缺省為TTL電平,所以建議客戶首選其中之一作為ISO7816接口。ttyS2缺省出廠配置為RS232電平,如果選擇了該串口,需要特別通知我們公司在出廠時(shí)將該串口設(shè)置為TTL電平。一旦GPIO14、GPIO15作為ISO7816的工作時(shí)鐘,就不能再做其他用途使用。
2、硬件接口電路
需要注意的是我們將串口的RXD作為對(duì)ISO7816接口的復(fù)位信號(hào),相應(yīng)的在串口驅(qū)動(dòng)中已實(shí)現(xiàn)了該功能,在后續(xù)應(yīng)用程序介紹中會(huì)介紹對(duì)ISO7816進(jìn)行復(fù)位的方法。
3、應(yīng)用程序設(shè)置方法
對(duì)于ISO7816設(shè)置我們已經(jīng)在底層的串口驅(qū)動(dòng)中完全實(shí)現(xiàn),因此上層的應(yīng)用程序在進(jìn)行ISO7816設(shè)置、通訊時(shí),和使用標(biāo)準(zhǔn)的串口方法是類似的。也是按照標(biāo)準(zhǔn)的方式打開(kāi)串口,只是在設(shè)置串口的通訊參數(shù)時(shí)增加對(duì)ISO7816的設(shè)置即可,然后就可以按照串口數(shù)據(jù)收發(fā)的標(biāo)準(zhǔn)方式進(jìn)行ISO7816的數(shù)據(jù)讀寫(xiě),只是需要注意的是ISO7816的半雙工通訊模式。
根據(jù)ISO7816協(xié)議類型以及幀應(yīng)答規(guī)范,所定義的ISO7816的相關(guān)參數(shù)均定義在我們公司提到個(gè)em9x60_drivers.h文件中。
#define EM9X60_ISO7816_T0 (1 << 27) // D27 of termios.c_cflag
#define EM9X60_ISO7816_T1 (1 << 26) // D26 of termios.c_cflag
#define EM9X60_ISO7816_RXD_RESET(1 << 23) // D23 of termios.c_cflag
#define EM9X60_ISO7816_MODE (EM9X60_ISO7816_T0 | EM9X60_ISO7816_T1)
設(shè)置這些參數(shù)的方法和標(biāo)準(zhǔn)設(shè)置串口的波特率等其他通訊參數(shù)一樣,直接調(diào)用標(biāo)準(zhǔn)函數(shù)tcsetattr( )就可完成。如:
int enable_iso7816(pport_info p_info)
{
struct termios cur_opt;
int status;
tcgetattr(p_info->port_fd,&cur_opt);
// 修改模式,啟動(dòng)iso7816復(fù)位操作
cur_opt.c_cflag |= ( EM9X60_ISO7816_T0 | EM9X60_ISO7816_RXD_RESET );
status = tcsetattr(p_info->port_fd,TCSANOW,&cur_opt);
if(status != 0)
{
perror('Cannot set the serial port parameters');
return -1;
}
// 修改模式,進(jìn)入iso7816
cur_opt.c_cflag &= ~EM9X60_ISO7816_RXD_RESET;
status = tcsetattr(p_info->port_fd,TCSANOW,&cur_opt);
if(status != 0)
{
perror('Cannot set the serial port parameters');
return -1;
}
return status;
}
-
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209538 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35345
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論