ESM3354是英創(chuàng)公司基于Cortex-A8的高性價比嵌入式主板產(chǎn)品,通過其ISA擴(kuò)展總線,可方便的擴(kuò)展多路通訊接口,以滿足工業(yè)自動化領(lǐng)域的復(fù)雜應(yīng)用。本文主要介紹通過ESM3354的ISA總線同時擴(kuò)展16路串口和2路100M網(wǎng)口的應(yīng)用方案。通過這樣的擴(kuò)展,整個系統(tǒng)的通訊接口配置如下:
接口資源 | 通道數(shù) | 簡要說明 |
100M以太網(wǎng)接口 | 4 | 獨立網(wǎng)口,應(yīng)工作在不同網(wǎng)段 |
標(biāo)準(zhǔn)異步串口 | 22 | COM1為USB虛擬串口 COM2 – COM6為高速串口,3Mbps 16擴(kuò)展串口,最高波特率115200bps |
CAN總線接口 | 2 | ESM3354主板自帶 |
本擴(kuò)展方案的主要電路構(gòu)成如下圖所示:
精簡ISA總線接口
ESM3354工控主板使用英創(chuàng)標(biāo)準(zhǔn)的ESMARC評估底板,其中CN21為精簡ISA總線接口,擴(kuò)展模塊ETA728(2路網(wǎng)口)和2個ETA508(每個模塊擴(kuò)展8路串口)均直接連接到ISA總線。ISA總線的信號定義可從ESMARC EVB數(shù)據(jù)手冊上得到如下:
ISA總線接口信號 | CN21 | ISA總線接口信號 | |
PIN# | PIN# | ||
RESET#,復(fù)位,低電平有效 | 1 | 2 | ISA_ADV#,地址鎖存,低電平有效 |
ISA_SD0,地址數(shù)據(jù)總線 | 3 | 4 | ISA_SD4,地址數(shù)據(jù)總線 |
ISA_SD1,地址數(shù)據(jù)總線 | 5 | 6 | ISA_SD5,地址數(shù)據(jù)總線 |
ISA_SD2,地址數(shù)據(jù)總線 | 7 | 8 | ISA_SD6,地址數(shù)據(jù)總線 |
ISA_SD3,地址數(shù)據(jù)總線 | 9 | 10 | ISA_SD7,地址數(shù)據(jù)總線 |
MSL#,模塊選擇 | 11 | 12 | ISA_WE#,數(shù)據(jù)寫,低電平有效 |
GPIO9,中斷IRQ4,上升沿有效 | 13 | 14 | ISA_RD#,數(shù)據(jù)讀,低電平有效 |
GPIO8,中斷IRQ3,上升沿有效 | 15 | 16 | ISA_CS#,總線片選,低電平有效 |
GPIO25,中斷IRQ2,上升沿有效 | 17 | 18 | +5V,電源輸入 |
GPIO24,中斷IRQ1,上升沿有效 | 19 | 20 | GND,公共地 |
ISA_SD[0..7]為地址數(shù)據(jù)時分復(fù)用的雙向總線信號,與控制信號ISA_CS#、ISA_ADV#、ISA_RD#和ISA_WE#配合,實現(xiàn)總線數(shù)據(jù)的讀入和寫出。具體的總線時序請參考ESM335x數(shù)據(jù)手冊。4路中斷請求信號IRQ1 – IRQ4分別由GPIO24、GPIO25、GPIO8、GPIO9來充當(dāng),均要求為上升沿有效的脈沖信號輸入,將分別由擴(kuò)展模塊提供。
8路串口擴(kuò)展模塊ETA508
ETA508為8串口擴(kuò)展模塊,采用共享中斷的結(jié)構(gòu),其中第一塊ETA508使用IRQ1(GPIO24),第二塊ETA508使用IRQ2(GPIO25)。ETA508擴(kuò)展的8路串口為3線制串口。信號電平均為+3.3V LVTTL電平。有關(guān)這種模塊詳細(xì)的技術(shù)說明請參考它們的數(shù)據(jù)手冊。模塊通過其CN1插座與ESM3354的精簡ISA總線相連,具體信號說明如下:
第一塊ETA508接口信號 | CN1 | 第一塊ETA508接口信號 | |
PIN# | PIN# | ||
ISA_SD0 | 1 | 2 | ISA_SD1 |
ISA_SD2 | 3 | 4 | ISA_SD3 |
ISA_SD4 | 5 | 6 | ISA_SD5 |
ISA_SD6 | 7 | 8 | ISA_SD7 |
ISA_ADV# | 9 | 10 | ISA_SD4 |
ISA_SD5 | 11 | 12 | ISA_SD6 |
ISA_SD7 | 13 | 14 | - |
5k電阻上拉或懸空 | 15 | 16 | ISA_RD# |
ISA_WE# | 17 | 18 | RESET# |
ISA_CS# | 19 | 20 | IRQ1(GPIO24) |
第二塊ETA508接口信號 | CN1 | 第二塊ETA508接口信號 | |
PIN# | PIN# | ||
ISA_SD0 | 1 | 2 | ISA_SD1 |
ISA_SD2 | 3 | 4 | ISA_SD3 |
ISA_SD4 | 5 | 6 | ISA_SD5 |
ISA_SD6 | 7 | 8 | ISA_SD7 |
ISA_ADV# | 9 | 10 | ISA_SD4 |
ISA_SD5 | 11 | 12 | ISA_SD6 |
ISA_SD7 | 13 | 14 | - |
接地 | 15 | 16 | ISA_RD# |
ISA_WE# | 17 | 18 | RESET# |
ISA_CS# | 19 | 20 | IRQ2(GPIO25) |
由于ETA508都是從英創(chuàng)EM9X60產(chǎn)品線發(fā)展起來的,為了兼容兩種產(chǎn)品線,ISA_SD4 – ISA_SD7這4條數(shù)據(jù)線在CN1中被重復(fù)放置了兩次,在設(shè)計接口電路時,上述所列的信號均不能少。另ETA508模塊的電源和地線是通過模塊的CN2接口引入的。
注意:
(1)ESM3354的所有ISA接口信號均為3.3V LVTTL電平,且不是+5V兼容的,因此禁止把5V信號或電源接到ISA信號管腳上,否則會造成ESM3354主板的損壞!
(2)由于ISA總線的速度較高,ETA508在PCB中的布局應(yīng)盡可能靠近ESM3354總線接口所在位置,以保證總線信號的完整性。
2路以太網(wǎng)口擴(kuò)展模塊ETA728
ETA728為2路獨立100M網(wǎng)口擴(kuò)展模塊,每路網(wǎng)絡(luò)控制器是占用1路獨立的中斷。模塊CN1與ISA總線的連接信號定義如下:
ETA728接口信號 | CN21 | ETA728接口信號 | |
PIN# | PIN# | ||
RESET#,復(fù)位,低電平有效 | 1 | 2 | ISA_ADV#,地址鎖存,低電平有效 |
ISA_SD0,地址數(shù)據(jù)總線 | 3 | 4 | ISA_SD4,地址數(shù)據(jù)總線 |
ISA_SD1,地址數(shù)據(jù)總線 | 5 | 6 | ISA_SD5,地址數(shù)據(jù)總線 |
ISA_SD2,地址數(shù)據(jù)總線 | 7 | 8 | ISA_SD6,地址數(shù)據(jù)總線 |
ISA_SD3,地址數(shù)據(jù)總線 | 9 | 10 | ISA_SD7,地址數(shù)據(jù)總線 |
- | 11 | 12 | ISA_WE#,數(shù)據(jù)寫,低電平有效 |
- | 13 | 14 | ISA_RD#,數(shù)據(jù)讀,低電平有效 |
- | 15 | 16 | ISA_CS#,總線片選,低電平有效 |
GPIO25,中斷IRQ2,上升沿有效 | 17 | 18 | +5V,電源輸入 |
GPIO24,中斷IRQ1,上升沿有效 | 19 | 20 | GND,公共地 |
應(yīng)用程序?qū)U(kuò)展接口的操作
無論是在Linux平臺,還是在WinCE平臺,應(yīng)用程序?qū)U(kuò)展串口的操作,都是通過打開其對應(yīng)的設(shè)備驅(qū)動文件來實現(xiàn)的,其具體的設(shè)備文件名如下:
CE平臺設(shè)備名稱 | Linux平臺設(shè)備名稱 | 擴(kuò)展UART說明 |
“\$device\COM20” | “/dev/ttyS7” | 第一塊ETA508 UART0 |
“\$device\COM21” | “/dev/ttyS8” | 第一塊ETA508 UART1 |
“\$device\COM22” | “/dev/ttyS9” | 第一塊ETA508 UART2 |
“\$device\COM23” | “/dev/ttyS10” | 第一塊ETA508 UART3 |
“\$device\COM24” | “/dev/ttyS11” | 第一塊ETA508 UART4 |
“\$device\COM25” | “/dev/ttyS12” | 第一塊ETA508 UART5 |
“\$device\COM26” | “/dev/ttyS13” | 第一塊ETA508 UART6 |
“\$device\COM27” | “/dev/ttyS14” | 第一塊ETA508 UART7 |
“\$device\COM30” | “/dev/ttyS15” | 第二塊ETA508 UART0 |
“\$device\COM31” | “/dev/ttyS16” | 第二塊ETA508 UART1 |
“\$device\COM32” | “/dev/ttyS17” | 第二塊ETA508 UART2 |
“\$device\COM33” | “/dev/ttyS18” | 第二塊ETA508 UART3 |
“\$device\COM34” | “/dev/ttyS19” | 第二塊ETA508 UART4 |
“\$device\COM35” | “/dev/ttyS20” | 第二塊ETA508 UART5 |
“\$device\COM36” | “/dev/ttyS21” | 第二塊ETA508 UART6 |
“\$device\COM37” | “/dev/ttyS22” | 第二塊ETA508 UART7 |
需要注意的是在WinCE平臺,擴(kuò)展串口號為COM20 – COM27和COM30 – COM37,與主板上的串口號(COM2 – COM6)并不連續(xù),而Linux平臺的設(shè)備節(jié)點名稱是與主板串口節(jié)點連續(xù)命名的。打開串口后的操作,都可通過標(biāo)準(zhǔn)函數(shù)實現(xiàn)各個功能。
盡管每路擴(kuò)展串口的最高波特率均為115200bps,但考慮盡可能降低ISA總線的負(fù)載,建議把高波特率串口首先配置在主板的COM2 – COM6(CE平臺)或ttyS1 – ttyS5(Linux平臺),然后再在ETA508上部署。
在應(yīng)用程序設(shè)計中,需注意4路網(wǎng)口的名稱:
網(wǎng)口序號 | Linux平臺名稱 | CE平臺名稱 |
第一路網(wǎng)口(主板自有) | eth0 | CPSW3G1 |
第二路網(wǎng)口(主板自有) | eth1 | CPSW3G2 |
第三路網(wǎng)口(ETA728擴(kuò)展) | eth2 | DM9K3 |
第四路網(wǎng)口(ETA728擴(kuò)展) | eth3 | DM9K4 |
串口驅(qū)動程序的加載
ETA508的驅(qū)動程序已經(jīng)包含在ESM3354的內(nèi)核中,通過適當(dāng)方式加載這個驅(qū)動,就可進(jìn)行串口操作了。
對Linux平臺,驅(qū)動程序為eta503_serial.ko,存放在跟文件系統(tǒng)的/lib/modules/4.1.6路徑下,用標(biāo)準(zhǔn)insmod命令即可實現(xiàn)加載。
對CE平臺,在啟動系統(tǒng)后,telnet登錄到CE的命令窗口,若要啟動ETA508,則帶參數(shù)執(zhí)行eta503set.exe,其中若啟動第一塊ETA508,參數(shù)為8:
若要啟動2塊ETA508,則帶參數(shù)為16。執(zhí)行命令后重啟系統(tǒng),ETA508的驅(qū)動就會自動加載。應(yīng)用程序就可操作擴(kuò)展串口了。
擴(kuò)展網(wǎng)口驅(qū)動程序的加載
ETA728的驅(qū)動程序已經(jīng)包含在ESM3354的內(nèi)核中,通過適當(dāng)方式加載這個驅(qū)動,就可進(jìn)行串口操作了。
對Linux平臺,驅(qū)動程序為eta728.ko,存放在跟文件系統(tǒng)的/lib/modules/4.1.6路徑下,用標(biāo)準(zhǔn)insmod命令即可實現(xiàn)加載。
對CE平臺,在啟動系統(tǒng)后,telnet登錄到CE的命令窗口,若要啟動ETA728,則帶參數(shù)執(zhí)行eta728set.exe,其中參數(shù)為3:
執(zhí)行命令后重啟系統(tǒng),ETA728的驅(qū)動就會自動加載。應(yīng)用程序就可操作擴(kuò)展網(wǎng)口了。
成都英創(chuàng)信息技術(shù)有限公司 028-8618 0660