多串口通訊在工控領域中是十分常用的一種通訊方式,常用于數(shù)據(jù)交互、搜集、傳送等?;谶@類應用,英利嵌入式Linux工控主板自帶6個異步串口;還支持用戶通過精簡ISA總線、USB等接口擴展出更多的串口。本文介紹使用英利工控主板,通過精簡ISA總線連接ETA503 四串口擴展模塊,組成10串口的擴展應用方案。同時,通過USB接口擴展串口的應用方案參見《英利工控主板8串口應用方案》。
本文以EM9460工控主板為例,然而該方案完全適用于英利EM9x60系列工控主板。
該方案的系統(tǒng)構成如下圖所示:
由EM9460工控主板與ETA503組成的10串口系統(tǒng)
ETA503是一款基于英利嵌入式Linux工控主板的四串口擴展模塊,通過一片16C554和一片邏輯控制器擴展出四個串口供用戶使用。ETA503的硬件設計使得用戶既能快速方便地進行評估,又能很好地將其融入自己的產(chǎn)品設計中。用戶可通過以下步驟來快速實現(xiàn)10串口應用方案:
1、原型評估
ETA503 的外觀示意圖如下:
(標注尺寸:inch(1 inch = 1000mil = 25.4mm))
ETA503包括5個插座,其中CN1為精簡ISA總線接口,其信號定義如下:
信號名稱及簡要描述 | PIN# | 信號名稱及簡要描述 | |
RESET#,復位輸出 | 1 | 2 | SA0,地址總線 |
SD0,數(shù)據(jù)總線,低位 | 3 | 4 | SA1,地址總線 |
SD1,數(shù)據(jù)總線 | 5 | 6 | SA2,地址總線 |
SD2,數(shù)據(jù)總線 | 7 | 8 | SA3,地址總線 |
SD3,數(shù)據(jù)總線 | 9 | 10 | SA4,地址總線 |
SD4,數(shù)據(jù)總線 | 11 | 12 | WE#,寫信號控制線 |
SD5,數(shù)據(jù)總線 | 13 | 14 | RD#,讀信號控制線 |
SD6,數(shù)據(jù)總線 | 15 | 16 | CS1#,片選線 |
SD7,數(shù)據(jù)總線,高位 | 17 | 18 | VCC,+5V電源輸出 |
IRQ1,中斷請求線 | 19 | 20 | GND,公共地 |
CN3-CN6是四個擴展出的9線制串口,LVTTL(3.3V)電平,分別對應ttyISA0-ttyISA3,具有相同的信號定義如下:
信號名稱及簡要描述 | PIN# | 信號名稱及簡要描述 | |
DCD# | 1 | 2 | DSR# |
RXD | 3 | 4 | RTS# |
TXD | 5 | 6 | CTS# |
DTR# | 7 | 8 | RI# |
GND | 9 | 10 | VCC(+5V) |
從英利公司購買EM9x60開發(fā)評估套件和ETA503,通過精簡ISA總線進行連接,可進行快速的功能評估。ETA503的驅(qū)動程序已經(jīng)固化在英利嵌入式Linux工控主板中,在此基礎上,客戶可利用英利公司為ETA503提供的基本通訊應用程序源代碼快速評估多串口擴展單元的基本性能是否滿足其具體的應用需求。
2、設計應用產(chǎn)品
實際應用時,ETA503可以作為一個“器件”直接背插在用戶的應用底板上,以獲得最佳的數(shù)據(jù)傳輸性能。如果需要修改各個串口的驅(qū)動形式,如RS232C、RS485、RS422等,用戶可以參考相應開發(fā)評估底板的電路原理圖和PCB圖。
3、應用程序開發(fā)
在Linux應用環(huán)境中對擴展串口的編程方法與標準的串口應用程序完全一樣,只是需要注意打開擴展串口的設備名稱有所不同,對于擴展串口需采用“/dev/ttyISAx”,而不是板卡上的串口名稱“/dev/ttySx”。
英利所提供的擴展驅(qū)動庫文件放置在根文件系統(tǒng)/lib/modules/2.6.30目錄下,相關的驅(qū)動文件是:
/lib/modules/2.6.30/eta503_serial.ko
在使用時需要首先載入該驅(qū)動功能模塊,在Linux操作系統(tǒng)下,一般是利用系統(tǒng)的內(nèi)部指令insmod來實現(xiàn)向系統(tǒng)內(nèi)核載入模塊:
[root@EM9X60 /mnt/nandflash]# insmod /lib/modules/2.6.30/eta503_serial.ko
在嵌入式領域的應用中,往往是需要自動加載模式的方式,這一功能可通過編程來實現(xiàn),利用C++中的構造函數(shù)以及析構函數(shù)可以很好地實現(xiàn)驅(qū)動功能模塊的自動載入和自動卸載。
定義一個class CSerial 串口通訊類,在該類中主要實現(xiàn)串口通訊應用的功能。
其構造函數(shù):
CSerial:: CSerial ( )
{
system( 'insmod /lib/modules/2.6.30/eta503_serial.ko' ); // 載入擴展串口驅(qū)動模塊
}
對應的析構函數(shù):
CSerial::~CSerial( )
{
system( 'rmmod eta503_serial.ko' ); // 卸載驅(qū)動模塊
}
應用程序中,一旦定義了class CSerial 的實例就實現(xiàn)了鍵盤模塊的自動載入。后續(xù)就可按照標準打開串口設備文件的方式操作擴展串口。在Linux系統(tǒng)中,所有的設備文件都位于“/dev”目錄下,EM9460板卡上6個串口所對應的設備名依次為“/dev/ttyS1”-“/dev/ttyS6”,通過ETA503擴展出的串口設備名依次為“/dev/ttyISA0”-“/dev/ttyISA3”。為了方便統(tǒng)一應用程序,可以做以下操作:
if( PortNo>6 )
sprintf( portname, '/dev/ttyISA%d', PortNo-6); // PortNo為串口端口號,從7開始
else
sprintf( portname, '/dev/ttyS%d', PortNo ); // PortNo為串口端口號,從1開始
m_fd = open( portname,O_RDWR | O_NOCTTY | O_NONBLOCK);
具體串口通訊的細節(jié)可參考《英利Linux工控主板應用程序編程手冊》中的相關章節(jié)。如果還需要更多的串口擴展,可參閱《英利工控主板8串口應用方案》中的介紹作進一步的串口擴展??蛻艨梢跃C合這兩個方案并進行拓展應用,以擴展出符合自己需求數(shù)量的串口。
-
Linux
+關注
關注
87文章
11304瀏覽量
209521 -
嵌入式主板
+關注
關注
7文章
6085瀏覽量
35341
發(fā)布評論請先 登錄
相關推薦
評論