EM928x(嵌入式Linux版)串口的RTS硬件方向控制方法

 2013-6-25          [nemail]    
[lablebox]

        英创EM928x系列主板包括板载8路物理串口的EM9281和EM9280,以及板载7路串口的EM9281,其中ttyS1-ttyS5为高速全双工串口;ttyS6-ttyS8为低速串口。除了ttyS3引出方式为232电平以外,其余7路串口均以TTL电平引出,客户可以在应用底板上将这些串口扩展为标准RS232或RS485串口使用,也可以连接自己的串口外设。

 

        EM928x的TTL串口除了ttyS1以外,都是三线串口,提供RXD、TXD、GND这3路信号。为了提高电路的抗干扰能力,实际RS485串口应用中,客户可能需要使用RTS#硬件方向控制。英创为此提供的方案是:用户程序可设置主板上的某位GPIO作为RTS#信号线,设置后内核串口驱动中将增加相关的控制操作,客户只需在使用串口之前使能RTS#功能,就可以启动RTS#硬件方向控制功能。

 

        目前支持这一功能的有ttyS1、ttyS3、ttyS4、ttyS5这4路串口,相应的可以配置GPIO用于模拟RTS#信号线,EM9280的GPIO中能够作为RTS#信号线的有:GPIO0、GPIO1、GPIO6、GPIO7、GPIO10、GPIO11、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24、GPIO25、GPIO26、GPIO27、GPIO28、GPIO29、GPIO30、GPIO31。而EM9821和EM9287的GPIO都可以作为RTS#信号线。

 

        须注意的是,上述4路GPIO一旦被用作RTS#信号线,则该管脚不能同时作为GPIO使用。

 

        要使用这一功能,在应用底板制作的时候,除了引出TXD、RXD,并将串口信号转换为差分信号以外,还需要进行一些电路扩展,如下图。

 

 

        从图中可以看出,方向控制信号COM2_RTSn(即RTS#信号)是低电平有效的,有效时(低电平)串口处于发送状态,无效时(高电平)处于接收状态。 用户需要特别注意RTS#信号是低电平有效的控制信号,这是因为:(1)在主板上电复位时,所有管脚均处于带上拉的输入状态,这时管脚的电平为高。采用低电平输出有效,防止了在上电复位过程中,RS485总线被无效信号干扰的问题;(2)若由于某种原因RTS#信号与RS485驱动断开,因为悬空管脚在数字电路中是作高电平状态的,因此也避免了电路内部的故障影响RS485总线的情况发生。

 

        EM928x内核中已经增加了RTS#控制部分,在串口测试例程中也增加了相应结构定义和函数如下:

 

  unsigned int pin=GPIOx; //x为哪一路GPIO 
  res=ioctl(m_fd,EM9280_IOCTL_SET_RTS_PIN,&pin);

 

  之后对于串口的读写操作和标准的RS232串口操作完全一致。

 

  由于RTS#的控制由驱动程序自动进行,因此无论是否打开这一功能,客户的应用程序开发是完全一样的,可参考英创光盘的Step2_SerialTest进行开发。  

 

        另,用户还可以通过修改u-boot配置来启动RTS#硬件方向控制功能,如需实现这一操作,可与我公司联系以获得相关技术支持。

 

        英创联系电话:028-86180660

        技术支持邮箱:support@emtronix.com    support@emlinix.com

        相关技术文章:英创工控主板同时驱动RS232和RS485的方法

[lablebox]