在新的國家電網(wǎng)智能終端相關(guān)標(biāo)準中,規(guī)定了通過專門的加密芯片來保證設(shè)備數(shù)據(jù)安全性的方法,而設(shè)備主控單元與加密芯片采用了廣泛應(yīng)用的ISO7816通訊協(xié)議。工控主板EM9160為了適應(yīng)這一新的技術(shù)需求,對其內(nèi)核進行了升級,使其多個串口都可支持ISO7816協(xié)議,為客戶進行智能終端整機設(shè)計時,提供了靈活的選擇。
對EM9160工控主板,可在其異步串口的基礎(chǔ)上,通過簡單的設(shè)置,就可把串口轉(zhuǎn)為符合ISO7816協(xié)議的接口,實現(xiàn)與各種智能卡的通訊。EM9160共有6個異步串口,在Windows CE環(huán)境中為“COM2:”- “COM7:”,其中支持ISO7816的串口如下表所示:
串口 |
管腳配置 |
備注 |
COM3 |
TXD:半雙工數(shù)據(jù)線 | |
RXD:復(fù)位輸出控制 | 低電平有效 | |
GPIO14:作為SCK | 輸出頻率與波特率等參數(shù)有關(guān) | |
COM5 |
TXD:半雙工數(shù)據(jù)線 | |
RXD:復(fù)位輸出控制 | 低電平有效 | |
GPIO15:作為SCK | 輸出頻率與波特率等參數(shù)有關(guān) | |
COM6 |
TXD:半雙工數(shù)據(jù)線 | |
RXD:復(fù)位輸出控制 | 低電平有效 | |
GPIO15:作為SCK | 輸出頻率與波特率等參數(shù)有關(guān) | |
COM7 |
TXD:半雙工數(shù)據(jù)線 | |
RXD:復(fù)位輸出控制 | 低電平有效 | |
GPIO15:作為SCK | 輸出頻率與波特率等參數(shù)有關(guān) |
EM9160的“COM5:”- “COM7:”串口信號均為TTL電平,建議客戶首選其中之一作為與ISO7816智能芯片的通訊接口。如果這些串口已分配給設(shè)備的其他功能,也可以考慮使用COM3口,需要注意的是COM3口的缺省配置是RS232電平,客戶需要在購買時特別通知我們把COM3設(shè)置為TTL電平才能與安全模塊相連。當(dāng)然GPIO15或GPIO14一旦作為了ISO7816的工作時鐘輸出,就不能再用作其他的用途了。
作為應(yīng)用程序,在操作ISO7816模式的串口(以COM5為例)時,一般的流程如下:
1、按標(biāo)準方法打開串口“COM5:”;
2、通過DeviceIoControl(…)函數(shù)使能ISO7816通訊模式;
3、設(shè)置包括波特率、奇偶校驗在內(nèi)的相關(guān)串口參數(shù);
4、根據(jù)需要可通過DeviceIoControl(…)函數(shù)對對端芯片進行一次復(fù)位操作;
5、進行正常數(shù)據(jù)通訊;
6、通過DeviceIoControl(…)函數(shù)禁止ISO7816通訊模式;
7、按標(biāo)準方法關(guān)閉串口“COM5:”。
在上述流程中,需要注意的是一定要先使能ISO7816模式,再設(shè)置波特率,才能保證得到正確的通訊參數(shù)。
為了實現(xiàn)從通常的異步串口到ISO7816的轉(zhuǎn)換,EM9161的串口驅(qū)動增加了3個IOCTL功能如下:
#include
#define IOCTL_SERIAL_ENABLE_ISO7816 \
CTL_CODE(FILE_DEVICE_SERIAL_PORT,40,METHOD_BUFFERED,F(xiàn)ILE_ANY_ACCESS)
#define IOCTL_SERIAL_DISABLE_ISO7816 \
CTL_CODE(FILE_DEVICE_SERIAL_PORT,41,METHOD_BUFFERED,F(xiàn)ILE_ANY_ACCESS)
#define IOCTL_SERIAL_RESET_ISO7816 \
CTL_CODE(FILE_DEVICE_SERIAL_PORT,42,METHOD_BUFFERED,F(xiàn)ILE_ANY_ACCESS)
使能ISO7816的DeviceIoControl調(diào)用,需要同時設(shè)置相應(yīng)的參數(shù)。這些參數(shù)包括ISO7816的協(xié)議類型,幀數(shù)據(jù)的應(yīng)答規(guī)范等,定義相應(yīng)的參數(shù)如下:
#define AT91C_US_USMODE_ISO7816_0 0x4 // ISO7816 protocol: T = 0
#define AT91C_US_USMODE_ISO7816_1 0x6 // ISO7816 protocol: T = 1
#define AT91C_US_INACK (0x1 《《 20) // Inhibit Non Acknowledge
#define AT91C_US_DSNACK (0x1 《《 21) // Disable Successive NACK
此外ISO的波特率按如下公式計算:
BR = SCK /(FI / DI)
上式中的SCK = 串口波特率×(FI / DI),例如串口波特率為9600,則SCK時鐘頻率為3.5712MHz。在EM9161中,對DI和FI的設(shè)置,是通過設(shè)置(FI/DI)這個比值來實現(xiàn)的,其中有效的值如下表所示:
DI = 1 |
DI = 2 |
DI = 4 |
DI = 8 |
DI = 16 |
DI = 32 |
DI = 12 |
DI = 20 |
|
FI = 372 |
372 |
186 |
93 |
47 |
23 |
12 |
31 |
19 |
FI = 558 |
558 |
279 |
140 |
70 |
35 |
17 |
47 |
28 |
FI = 774 |
774 |
372 |
186 |
93 |
47 |
23 |
62 |
37 |
FI = 1116 |
1116 |
558 |
279 |
140 |
70 |
35 |
93 |
56 |
FI = 1488 |
1488 |
744 |
372 |
186 |
93 |
47 |
124 |
74 |
FI = 1806 |
1806 |
930 |
465 |
233 |
116 |
58 |
155 |
93 |
FI = 512 |
512 |
256 |
128 |
64 |
32 |
16 |
43 |
26 |
FI = 768 |
768 |
384 |
192 |
96 |
48 |
24 |
64 |
38 |
FI = 1024 |
1024 |
512 |
256 |
128 |
64 |
32 |
85 |
51 |
FI = 1536 |
1536 |
768 |
384 |
192 |
96 |
48 |
128 |
77 |
FI = 2048 |
2048 |
1024 |
512 |
256 |
128 |
64 |
171 |
102 |
選擇藍色區(qū)域的值,可得到對應(yīng)的黃色區(qū)域的FI和綠色區(qū)域的DI,由此可計算相應(yīng)的波特率。
在具體的調(diào)用中,參數(shù)的傳遞是通過兩個DWORD實現(xiàn)的,代碼如下:
DWORD dwMode, dwFI_DI_Ratio;
DWORD pBuf[2];
dwMode = AT91C_US_USMODE_ISO7816_0;
dwFI_DI_Ratio = 372;
pBuf[0] = dwMode;
pBuf[1] = dwFI_DI_Ratio;
if (!DeviceIoControl ( m_hSer, // 串口handle
IOCTL_SERIAL_ENABLE_ISO7816, // 命令碼
pBuf, sizeof(pBuf), // input parameters
NULL, 0, // output parameters
NULL, NULL ))
{
printf(‘IOCTL_SERIAL_ENABLE_ISO7816 failed!\r\n’);
}
關(guān)閉ISO7816通訊模式比較簡單,沒有任何參數(shù):
if (!DeviceIoControl ( m_hSer, // 串口handle
IOCTL_SERIAL_DISABLE_ISO7816, // 命令碼
NULL, 0,
NULL, 0,
NULL, NULL ))
{
printf(‘IOCTL_SERIAL_DISABLE_ISO7816 failed!\r\n’);
}
對ISO7816對端芯片的復(fù)位,需要設(shè)置復(fù)位時間,以ms為單位:
DWORD dwMilliseconds = 1; // 可以設(shè)為0,實際復(fù)位時間為幾十微秒
if (!DeviceIoControl ( m_hSer,
IOCTL_SERIAL_RESET_ISO7816,
&dwMilliseconds, sizeof(DWORD), // input parameters
NULL, 0, // output parameters
NULL, NULL ))
{
printf(‘IOCTL_SERIA, L_RESET_ISO7816 , failed!\r\n’);
}
&am, p;nb, sp; 設(shè)置了ISO模式后, ,應(yīng)用程序仍然可以像操作普通串口那樣,進行數(shù)據(jù)的讀寫,只是需要注意, 的, 是I, SO7816的半雙工模式的,所以數(shù)據(jù)通訊的過程更像是RS485的過程。
-
WINDOWS
+關(guān)注
關(guān)注
4文章
3586瀏覽量
89929 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6092瀏覽量
35839
發(fā)布評論請先 登錄
相關(guān)推薦
嵌入式工控主板EM9160的PWM功能
英創(chuàng)信息技術(shù)嵌入式工控主板EM9160的PWM功能使用方法
英創(chuàng)信息技術(shù)嵌入式主板EM9160精簡ISA總線硬件中斷的使用方法

英創(chuàng)信息技術(shù)工控主板EM9160L的低功耗應(yīng)用介紹
英創(chuàng)信息技術(shù)工控主板的復(fù)位管理介紹

英創(chuàng)信息技術(shù)工控主板EM9161對ISO7816協(xié)議的支持概述

英創(chuàng)信息技術(shù)工控主板EM9160對紅外通訊用途介紹

英創(chuàng)信息技術(shù)嵌入式Linux主板EM9160支持ISO7816通訊協(xié)議介紹

英創(chuàng)信息技術(shù)工業(yè)主板EM9160介紹
英創(chuàng)信息技術(shù)嵌入式Linux工控板EM9160介紹

英創(chuàng)信息技術(shù)工控主板EM9160介紹

英創(chuàng)信息技術(shù)主板EM9160硬件介紹
英創(chuàng)信息技術(shù)主板EM9160測頻功能的使用介紹
英創(chuàng)信息技術(shù)EM9X60利用串口實現(xiàn)ISO7816介紹

評論