英創(chuàng)EM9x60系列工控主板均板載高速全雙工物理串口,其中除了ttyS3引出方式為232電平以外,其余串口均以TTL電平引出,客戶可以在應(yīng)用底板上將這些串口擴展為標準RS232或RS485串口使用,也可以連接自己的串口外設(shè)。
EM9x60的TTL串口除了ttyS1以外,都是三線串口,提供RXD、TXD、GND這3路信號。為了提高電路的抗干擾能力,實際RS485串口應(yīng)用中,客戶可能需要使用GRTS#硬件方向控制。英創(chuàng)為此提供的方案是:使用板載GPIO作為RTS#信號線,并在內(nèi)核串口驅(qū)動中增加相關(guān)的控制操作,客戶只需在使用串口之前使能RTS#功能,就可以啟動RTS#硬件方向控制功能。
EM9x60支持這一功能的有ttyS3、ttyS4、ttyS5、ttyS6這4路串口,相應(yīng)的用于模擬RTS#信號線的GPIO為GPIO6、GPIO8、GPIO9、GPIO10,具體對應(yīng)關(guān)系如下:
串口名稱 | RTS#使用的GPIO |
ttyS3 | GPIO6 |
ttyS4 | GPIO8 |
ttyS5 | GPIO9 |
ttyS6 | GPIO10 |
須注意的是,上述4路GPIO一旦被用作RTS#信號線,則無法同時作為GPIO使用。
要使用這一功能,在應(yīng)用底板制作的時候,除了引出TXD、RXD,并將串口信號轉(zhuǎn)換為差分信號以外,還需要進行一些電路擴展,如下圖。
從圖中可以看出,方向控制信號COM2_RTSn(即RTS#信號)是低電平有效的,有效時(低電平)串口處于發(fā)送狀態(tài),無效時(高電平)處于接收狀態(tài)。 用戶需要特別注意RTS#信號是低電平有效的控制信號,這是因為:(1)在主板上電復(fù)位時,所有管腳均處于帶上拉的輸入狀態(tài),這時管腳的電平為高。采用低電平輸出有效,防止了在上電復(fù)位過程中,RS485總線被無效信號干擾的問題;(2)若由于某種原因RTS#信號與RS485驅(qū)動斷開,因為懸空管腳在數(shù)字電路中是作高電平狀態(tài)的,因此也避免了電路內(nèi)部的故障影響RS485總線的情況發(fā)生。
EM9x60內(nèi)核中已經(jīng)增加了RTS#控制部分,在串口測試例程中也增加了相應(yīng)結(jié)構(gòu)定義和函數(shù)如下:
#define EM9x60_RTS_CONTROL_TOGGLE (1 << 15)
int enable_rts_toggle(pport_info p_info)
{
struct termios cur_opt;
int status;
tcgetattr(p_info->port_fd,&cur_opt);
// 修改模式,進入rts toggle操作
cur_opt.c_cflag |= EM9x60_RTS_CONTROL_TOGGLE;
status = tcsetattr(p_info->port_fd,TCSANOW,&cur_opt);
if(status != 0)
{
perror('Cannot set the serial port parameters');
return -1;
}
return status;
}
在提供的應(yīng)用例程step2_serialtest中,可在初始化串口函數(shù)OpenPort()中加上使能RTS的代碼,如:
// 使能 RTS
if( enable_rts_toggle( &info )!=0 )
{
printf( 'enable rts toggle fail\n');
}
之后對于串口的讀寫操作和標準的RS232串口操作完全一致。
由于RTS#的控制由驅(qū)動程序自動進行,因此無論是否打開這一功能,客戶的應(yīng)用程序開發(fā)是完全一樣的,可參考英創(chuàng)光盤的Step2_SerialTest進行開發(fā)。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6086瀏覽量
35539
發(fā)布評論請先 登錄
相關(guān)推薦
評論