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