EM9287是英創(chuàng)公司新近推出的,專門針對(duì)網(wǎng)絡(luò)通訊應(yīng)用的工控主板產(chǎn)品,通訊接口方面以獨(dú)立雙以太網(wǎng)口、雙CAN接口以及7路標(biāo)準(zhǔn)串口為特色。若客戶應(yīng)用有HMI的需求,通常可選擇預(yù)裝Windows CE6.0操作系統(tǒng)的主板產(chǎn)品,另一方面,若不需要圖形顯示功能的,選擇預(yù)裝Linux-3.9.7操作系統(tǒng)的EM9287,則更能發(fā)揮其網(wǎng)絡(luò)通訊的能力。進(jìn)一步的,EM9287可把未使用的LCD顯示接口轉(zhuǎn)換成16-bit的精簡(jiǎn)ISA擴(kuò)展總線,作為主板與客戶專用電路單元的數(shù)據(jù)傳輸通道。EM9287的精簡(jiǎn)ISA總線的數(shù)據(jù)傳輸速度最高可達(dá)8MB/s,可滿足絕大多數(shù)用戶擴(kuò)展電路的數(shù)據(jù)傳輸需求。本文以下部分,主要介紹EM9287的精簡(jiǎn)ISA總線的技術(shù)特性,以及在Linux環(huán)境下,應(yīng)用程序?qū)崿F(xiàn)ISA總線數(shù)據(jù)讀寫的方法。
EM9287主板上共有4組接口排針,分別命名為CN1 – CN4,如下圖所示:
EM9287的CN1 – CN4所在位置示意圖
其中的CN4即為精簡(jiǎn)ISA總線的接口排針。由于LCD顯示被作為了EM9287的標(biāo)準(zhǔn)配置,因此一般情況下,EM9287只焊了CN3插座,沒有焊CN4的插針。若客戶要求所購的EM9287支持精簡(jiǎn)ISA總線,則需要在購買時(shí)特別申明此需求。注意,支持精簡(jiǎn)ISA總線的EM9287主板,不再焊接CN3插座,而是帶有CN4雙排插針。與CN1和CN2不一樣,CN4為2mm間距的雙排插針。
CN4上個(gè)插針的信號(hào)定義如下表:
信號(hào)名稱及簡(jiǎn)要描述 | CN4 | 信號(hào)名稱及簡(jiǎn)要描述 | |
PIN# | PIN# | ||
NC | 1 | 2 | ISA_CS#,ISA總線片選信號(hào) |
ISA_RD#,ISA總線讀信號(hào) | 3 | 4 | ISA_WE#,ISA總線寫信號(hào) |
ISA_A0,ISA地址總線 | 5 | 6 | ISA_A1,ISA地址總線 |
ISA_A2,ISA地址總線 | 7 | 8 | ISA_A3,ISA地址總線 |
ISA_A4,ISA地址總線 | 9 | 10 | ISA_A5,ISA地址總線 |
ISA_A6,ISA地址總線 | 11 | 12 | ISA_A7,ISA地址總線 |
ISA_D0,ISA數(shù)據(jù)總線(LSB) | 13 | 14 | ISA_D1,ISA數(shù)據(jù)總線 |
ISA_D2,ISA數(shù)據(jù)總線 | 15 | 16 | ISA_D3,ISA數(shù)據(jù)總線 |
ISA_D4,ISA數(shù)據(jù)總線 | 17 | 18 | ISA_D5,ISA數(shù)據(jù)總線 |
ISA_D6,ISA數(shù)據(jù)總線 | 19 | 20 | ISA_D7,ISA數(shù)據(jù)總線 |
ISA_D8,ISA數(shù)據(jù)總線 | 21 | 22 | ISA_D9,ISA數(shù)據(jù)總線 |
ISA_D10,ISA數(shù)據(jù)總線 | 23 | 24 | ISA_D11,ISA數(shù)據(jù)總線 |
ISA_D12,ISA數(shù)據(jù)總線 | 25 | 26 | ISA_D13,ISA數(shù)據(jù)總線 |
ISA_D14,ISA數(shù)據(jù)總線 | 27 | 28 | ISA_D15,ISA數(shù)據(jù)總線(MSB) |
GND | 29 | 30 | GND |
3.3V 電源輸出 | 31 | 32 | 3.3V 電源輸出 |
所有接口信號(hào)的電平均為3.3V TTL。EM9287的精簡(jiǎn)ISA總線支持雙向16-bit數(shù)據(jù)總線,8位地址總線,以及3條控制總線。3條總線控制信號(hào)(片選、讀脈沖、寫脈沖)均為低電平有效。單數(shù)據(jù)讀寫的總線周期為360ns,而多數(shù)據(jù)讀寫的總線則只有240ns,可保證每秒8M字節(jié)的數(shù)據(jù)吞吐能力。精簡(jiǎn)ISA總線的典型總線時(shí)序如下:
單數(shù)據(jù)寫時(shí)序
單數(shù)據(jù)讀時(shí)序
數(shù)據(jù)塊寫時(shí)序
數(shù)據(jù)塊讀時(shí)序
精簡(jiǎn)ISA總線驅(qū)動(dòng)的設(shè)備節(jié)點(diǎn)為“/dev/em9287_isa”,通過標(biāo)準(zhǔn)的文件open函數(shù)打開:
int fd;
fd = open('/dev/em9287_isa', O_RDWR);
EM9287精簡(jiǎn)ISA總線的地址范圍為0 – 255。為了簡(jiǎn)化應(yīng)用程序,避免使用ioctl專用定義,總線地址通過標(biāo)準(zhǔn)函數(shù)lseek來設(shè)置:
unsigned int offset;
//設(shè)置地址到offset
lseek(fd, offset, SEEK_SET);
總線讀寫的數(shù)據(jù)盡管只有16位,但驅(qū)動(dòng)程序要求的數(shù)據(jù)類型為32位格式,具體可選unsigned int或u32。32位變量中的低16位為真正的總線數(shù)據(jù),高16位無意義。調(diào)用函數(shù)write將啟動(dòng)總線寫,調(diào)用函數(shù)read將啟動(dòng)總線讀。
寫操作的基本調(diào)用形式為:
int rc;
unsigned int buf[]; //數(shù)據(jù)buffer
unsigned int len; //實(shí)際寫的數(shù)據(jù)長(zhǎng)度
//準(zhǔn)備需要寫出的數(shù)據(jù)....
rc = write(fd, buf, len * sizeof(unsigned int));
相應(yīng)地,讀操作的基本調(diào)用形式為:
rc = read(fd, buf, len * sizeof(unsigned int));
//處理在buf的讀取數(shù)據(jù)....
讀寫數(shù)據(jù)的長(zhǎng)度至少為1,最長(zhǎng)不能超過16K(16384)。在進(jìn)行數(shù)據(jù)塊讀寫時(shí),需要注意,16K數(shù)據(jù)的讀或?qū)憣⒑臅r(shí)4ms,而Linux分給每個(gè)線程的時(shí)間片最長(zhǎng)只有10ms。一般情況下,為了保證系統(tǒng)的及時(shí)響應(yīng),每個(gè)線程運(yùn)行的時(shí)間都不宜過長(zhǎng)。
成都英創(chuàng)信息技術(shù)有限公司 028-8618 0660