當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]RS485接口具有良好的抗噪聲干擾性能、長傳輸距離和多站能力等特點,使其成為工業(yè)控制的首選串行接口。嵌入式系統(tǒng)中也廣泛采用RS485接口作為設備控制的串行接口。RS485采用兩線差分的接線方式進行串口數(shù)據(jù)的傳輸。由于發(fā)送和接收都是采用這兩根差分線進行,因此它是半雙工工作模式。

RS485接口具有良好的抗噪聲干擾性能、長傳輸距離和多站能力等特點,使其成為工業(yè)控制的首選串行接口。嵌入式系統(tǒng)中也廣泛采用RS485接口作為設備控制的串行接口。RS485采用兩線差分的接線方式進行串口數(shù)據(jù)的傳輸。由于發(fā)送和接收都是采用這兩根差分線進行,因此它是半雙工工作模式。基于RS485的特點,分別講述了通過硬件方式和軟件方式來實現(xiàn)RS485發(fā)送和接收方向的切換,重點解決了DM8168嵌入式平臺上軟件實現(xiàn)RS485方向切換的功能。

RS485總線是工業(yè)應用中非常成熟的技術(shù),是現(xiàn)代通信技術(shù)的工業(yè)標準之一。RS485總線用于多站互連十分方便,用一對雙絞線即可實現(xiàn),采用平衡發(fā)送和差分接收,即在發(fā)送端驅(qū)動器將TTL電平信號轉(zhuǎn)換成差分信號輸出,在接收端接收器將差分信號變成TTL電平,因此具有抗共模干擾的能力。根據(jù)RS485標準,傳送數(shù)據(jù)速率達100 kb/s時通信距離可達1200 m.

RS485在嵌入式系統(tǒng)中的應用非常廣泛。嵌入式系統(tǒng)可以通過RS485接口來控制終端設備。由于RS485是半雙工模式,因此發(fā)送和接收的方向切換需要我們的關注和研究。如果方向切換方式選擇不好可能會導致RS485驅(qū)動能力下降、軟件執(zhí)行效率下降,甚至導致系統(tǒng)異常等問題。

本文分別給出硬件實現(xiàn)RS485方向切換和軟件實現(xiàn)RS485方向切換兩種方式。兩種方式各有優(yōu)點,硬件方式控制起來比較簡單。軟件方式的驅(qū)動能力更好,但是和嵌入式平臺關系比較密切,不同的平臺都需要調(diào)試和驗證。

1硬件方式控制RS485方向

圖1所示為硬件控制RS485的電路圖。電路中使用2N7002LT1G MOS場效晶體管把UART_TXD_485這個MCU輸出的RS485發(fā)送信號邏輯取反后送給RS485芯片的RE/DE PIN腳??刂频脑硎?,當UART_TXD_485輸出低電平時RS485芯片的DE使能;輸出高電平時RE使能。默認情況下UART_TXD_485是高電平,RS485芯片處于接收狀態(tài)。發(fā)送數(shù)據(jù)時,UART_TXD_485上面有高低電平信號變化,低電平信號通過RS485芯片SP3072EENL/TR直接輸出,高電平信號通過外部上下拉電阻來控制。

這種方法的優(yōu)點是控制簡單,軟件不需要做額外的工作,控制RS485像控制RS232一樣。但是這種方法的缺點是驅(qū)動能力可能不足,由于這種控制方法沒有完全發(fā)揮出RS485驅(qū)動芯片自身的驅(qū)動能力,輸出信號依賴于外部上下拉電阻,因此在復雜環(huán)境下,譬如很多負載需要控制時,就會存在驅(qū)動能力不足的問題。但是在一些簡單的環(huán)境或者軟件實現(xiàn)較復雜的平臺下,使用這種方法還是切實可行的。



圖1硬件控制RS485電路圖


2軟件方式控制RS485方向

2.1驅(qū)動能力分析

在復雜的RS485控制環(huán)境下,用上面介紹的硬件方式來控制RS485的方向會存在比較突出的驅(qū)動能力不足的問題。修改上述控制方法,將TTL這一側(cè)的2線控制改為3線控制,就是將收發(fā)控制信號不用當前的/TXD來控制,而從主控分出一根GPIO線來控制收發(fā)。

按照輸出電流計算,3線控制方式相對用2線控制的總線上下拉作為輸出的方式,其驅(qū)動能力提高了25~50倍(不同廠家不同型號有差異),如果輔以終端電阻靈活配置的措施,RS485的驅(qū)動能力將完全不是問題。表1是兩種控制方式驅(qū)動能力的對比。

2.2軟硬件環(huán)境



圖2軟件控制方法中的硬件設計


軟件控制方法采用圖2的硬件設計,圖中很突出的修改是使用MCU的GPIO來控制RE和DE.RS485芯片的供電采用5 V供電,提高驅(qū)動能力。RS485芯片的RE和DE控制使用MCU的GPIO輸出高低電平來控制。簡單來說就是,在RS485進行數(shù)據(jù)傳輸時,通過GPIO來控制傳輸方向。這里采用的MCU是TI公司的DM8168處理器來實現(xiàn)軟件的RS485切換功能。軟件版本使用UBoot2010.06和linux2.6.37.用軟件來實現(xiàn)RS485的收發(fā),盡量要保證執(zhí)行效率;要達到上面的目的就需要對串口驅(qū)動進行調(diào)試,使用串口驅(qū)動用到的軟件資源和串口控制器本身的硬件資源來實現(xiàn)RS485的控制。



表1軟件和硬件控制方式驅(qū)動能力的對比


2.3 UBoot代碼修改

需要修改的文件:

①board/ti/ti8168/evm.c

②drivers/serial/ns16550.c

③include/configs/ti8168_evm.h

ti8168_evm.h文件中增加切換宏定義:

#define CONFIG_RS485_DIR_SW 1

evm.c文件中增加切換函數(shù):

void rs485_dir_sw(int rs485_dir){

if(rs485_dir ==0)

_raw_writel(RS485_DIR_MASK, TI81XX_GPIO1_CLEARDATAOUT);

else

_raw_writel(RS485_DIR_MASK, TI81XX_GPIO1_SETDATAOUT);

}

s16550.c串口驅(qū)動文件中增加RS485方向控制:

void NS16550_putc(NS16550_t com_port, char c){

#ifdef CONFIG_RS485_DIR_SW

rs485_dir_sw(1);

#endif

……//此處代碼省略

#ifdef CONFIG_RS485_DIR_SW

while((serial_in(UART_LSR_TEMT)== 0)

rs485_dir_sw(0);

#endif

}

其中UART_LSR_TEMT表示發(fā)送BUF和移位寄存器為空。默認情況下RS485是接收狀態(tài),一旦要發(fā)送數(shù)據(jù),就把RS485切換為發(fā)送狀態(tài)。發(fā)送完數(shù)據(jù)后,等待發(fā)送BUF和移位寄存器為空,然后切換回接收狀態(tài),這里無需使用timeout。

2.4 Linux代碼修改

需要修改的文件:

①arch/arm/machomap2/bordti8168evm.c

②drivers/serial/omapserial.c

③include/linux/serial_core.h

serial_core.h文件,uart_port結(jié)構(gòu)體中增加set_rs485_direction函數(shù)指針,用于執(zhí)行RS485的方向切換void(*set_rs485_direction)(int rs485_dir);原本考慮在uart_ops結(jié)構(gòu)體中增加的,但是這個結(jié)構(gòu)體是常量類型,對它不作改動,因此加到了uart_port結(jié)構(gòu)體中。在該文件中添加相關宏定義和函數(shù)指針類型用于函數(shù)注冊:

#define SET_RS485_RX0

#define SET_RS485_TX1

typedef void(*set_rs485_direction_t)(int rs485_dir);//用于函數(shù)注冊

omapserial.c文件主要做了如下幾點改動:

①添加omap_rs485_dir_fun全局的函數(shù)指針。

static set_rs485_direction_t omap_rs485_dir_fun[OMAP_MAX_HSUART_PORTS]={NULL, NULL, NULL, NULL, NULL, NULL}

②外部驅(qū)動利用omap_rs485_dir_fun_reg注冊函數(shù)對omap_rs485_dir_fun進行賦值。

void omap_rs485_dir_fun_reg(int port_num, set_rs485_direction_t rs485_dir_fun){

if(port_num>=OMAP_MAX_HSUART_PORTS)

printk(KERN_ERR“%s, port_num error max is %d, but %d \n”, __FUNCTION__, OMAP_MAX_HSUART_PORTS-1, port_num);

omap_rs485_dir_fun[port_num]= rs485_dir_fun;

}

EXPORT_SYMBOL(omap_rs485_dir_fun_reg);

③serial_omap_probe函數(shù)中對控制程序中用到的up->port.set_rs485_direction進行賦值。

up->port.set_rs485_direction= omap_rs485_dir_fun[pdev->id];

④默認情況下RS485處于接收狀態(tài)。

⑤serial_omap_enable_ier_thri函數(shù)中把RS485切換為發(fā)送狀態(tài)。

static incline void serial_omap_enable_ier_thri(struct uart_omap_port *up){

if(!(up->ier UART_IER_THRI)){

/* rs485 dir change to tx */

if(up->port.set_rs485_direction != NULL)

up->port.set_rs485_direction(SET_RS485_TX);

……//此處代碼省略

}

}

⑥serial_omap_stop_tx函數(shù)中把RS485切換為接收狀態(tài)。

static void serial_omap_stop_tx(struct uart_omap_port *port){

……//此處代碼省略

if(up->ier UART_IER_THRI){

up->ier ~UART_IER_THRI;

serial_out(up, UART_IER, up->ier);

/* rs485 dir change to rx */

if(port->set_rs485_direction != NULL)

port->set_rs485_direction(SET_RS485_RX);

}

}

⑦transmit_chars更改一下,原先的代碼是當沒有更多的字符要發(fā)送(環(huán)形緩沖為空)時需要關閉發(fā)送中斷,這時串口控制器發(fā)送BUF和移位寄存器中還是有數(shù)據(jù)的,這些數(shù)據(jù)串口控制器自動發(fā)送完成后才算結(jié)束,由于已經(jīng)關閉了發(fā)送中斷,因此發(fā)送結(jié)束后就沒有中斷產(chǎn)生了。但是RS485切換方向需要等到完全發(fā)送完成后才能進行。因此對transmit_chars函數(shù)做了修改。調(diào)用serial_omap_stop_tx函數(shù)前判斷發(fā)送BUF和移位寄存器是否為空,如果為空就可以切換方向了。簡而言之,延后了發(fā)送中斷的關閉時間。

static void transmit_chars(struct uart_omap_port *up){

……//此處代碼省略

if(uart_circ_empty(xmit)|| uart_tx_stopped({

if(up->port.ops->tx_empty(

return;//added for last transmit

serial_omap_stop_tx(

return;

}

……//此處代碼省略

if(uart_circ_empty(xmit)){

if(up->port.ops->tx_empty(

return;//added for last transmit

serial_omap_stop_tx(

}

}

⑧arch/arm/machomap2/boardti8168evm.c文件在ti8168_evm_init函數(shù)中調(diào)用omap_rs485_dir_fun_reg函數(shù)注冊RS485切換函數(shù)。

2.5實驗結(jié)果分析

上述軟件修改有如下幾個優(yōu)點:不增加硬件開銷;不增加和使用任何硬件資源;不增加軟件開銷;不影響軟件執(zhí)行效率;硬件控制是電信號控制,方向切換和TX綁定;軟件控制是整個發(fā)送緩沖區(qū)完成發(fā)送后再進行方向切換,控制實現(xiàn)上更加合理。


對軟件切換RS485做了基本的測試,情況如下:

①控制臺操作。整個啟動打印信息正常。UBoot和Kernel下控制效果和硬件控制一樣,可以很流暢地進行命令的輸入和回顯,串口終端增加輸入字符間的延時后可以進行配置的粘貼。內(nèi)核在115 200和38 400下分別進行測試OK.

②內(nèi)核下加大負責進行大數(shù)據(jù)量的發(fā)送。增加負載,開多個ping包進程(產(chǎn)生大量中斷)、Nand Flash的操作、CPU占有率接近100%條件下,通過RS485輸出大量數(shù)據(jù),沒有亂碼,校驗OK.

③極高的實時性。

由于本文給出的軟件實現(xiàn)方式是基于Linux內(nèi)核實現(xiàn)的,因此很好地保證了方向控制的實時性。實際結(jié)果顯示,DM8168數(shù)據(jù)發(fā)送完成到產(chǎn)生方向控制信號之間的時間在25μs左右,幾乎可以忽略不計。而有些設計在用戶空間使用應用程序進行方向切換的方法會導致20 ms以上的延時,導致了一系列異常問題的產(chǎn)生。

結(jié)語

本文詳細描述了RS485方向控制的硬件和軟件兩種實現(xiàn)方式。兩種控制方式各有特點,硬件控制方式實現(xiàn)簡單,不需要軟件干預,對軟件而言RS485串口收發(fā)就像RS232一樣簡單。軟件控制方式可以極大地提高整個RS485線路的驅(qū)動能力,本文給出的基于Linux內(nèi)核的控制方法又很好地保證了RS485方向切換的實時性,滿足了實用性要求。這兩種方式在很多場合已經(jīng)得到了很好的應用和驗證。特別是軟件實現(xiàn)方式,可以擴展到更多的應用場合,譬如復雜的多主、多從的RS485使用環(huán)境,軟件控制可以根據(jù)自己的需求來實現(xiàn)整個RS485線路不同的數(shù)據(jù)流向,可以規(guī)避某個設備對RS485鏈路上異常信號的干擾,給實際應用帶來了很多的便利性。

本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術(shù)
關閉
關閉