亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        嵌入式系統(tǒng)應(yīng)用中實(shí)現(xiàn)RS485的方向切換

        2014-06-25 02:46:14吳麗萍戈志明
        關(guān)鍵詞:串口芯片驅(qū)動(dòng)

        吳麗萍,戈志明

        (蘇州工業(yè)園區(qū)職業(yè)技術(shù)學(xué)院,蘇州 215123)

        吳麗萍(講師),主要研究方向?yàn)樽詣?dòng)控制系統(tǒng);戈志明(工程師),主要研究方向?yàn)榍度胧较到y(tǒng)、軟件測(cè)試。

        引 言

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

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

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

        1 硬件方式控制RS485方向

        圖1所示為硬件控制RS485的電路圖。電路中使用2N7002LT1GMOS場(chǎng)效晶體管把UART_TXD_485這個(gè)MCU輸出的RS485發(fā)送信號(hào)邏輯取反后送給RS485芯片的RE/DE PIN腳??刂频脑硎?,當(dāng)UART_TXD_485輸出低電平時(shí)RS485芯片的DE使能;輸出高電平時(shí)RE使能。默認(rèn)情況下 UART_TXD_485是高電平,RS485芯片處于接收狀態(tài)。發(fā)送數(shù)據(jù)時(shí),UART_TXD_485上面有高低電平信號(hào)變化,低電平信號(hào)通過(guò)RS485芯片SP3072EEN-L/TR直接輸出,高電平信號(hào)通過(guò)外部上下拉電阻來(lái)控制[3]。

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

        圖1 硬件控制RS485電路圖

        2 軟件方式控制RS485方向

        2.1 驅(qū)動(dòng)能力分析

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

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

        2.2 軟硬件環(huán)境

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

        圖2 軟件控制方法中的硬件設(shè)計(jì)

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

        2.3 U-Boot代碼修改

        需要修改的文件:

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

        2.4 Linux代碼修改

        需要修改的文件:

        ①arch/arm/mach-omap2/bord-ti8168evm.c

        ② drivers/serial/omap-serial.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)體中增加的,但是這個(gè)結(jié)構(gòu)體是常量類(lèi)型,對(duì)它不作改動(dòng),因此加到了uart_port結(jié)構(gòu)體中。在該文件中添加相關(guān)宏定義和函數(shù)指針類(lèi)型用于函數(shù)注冊(cè):

        omap-serial.c文件主要做了如下幾點(diǎn)改動(dòng):

        ① 添加omap_rs485_dir_fun全局的函數(shù)指針。static set_rs485_direction_t omap_rs485_dir_fun[OMAP_M(jìn)AX_HSUART_PORTS]= {NULL,NULL,NULL,NULL,NULL,NULL}

        ② 外部驅(qū)動(dòng)利用omap_rs485_dir_fun_reg注冊(cè)函數(shù)對(duì)omap_rs485_dir_fun進(jìn)行賦值。

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

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

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

        ⑧arch/arm/mach-omap2/board-ti8168evm.c文件在ti8168_evm_init函數(shù)中調(diào)用omap_rs485_dir_fun_reg函數(shù)注冊(cè)RS485切換函數(shù)。

        2.5 實(shí)驗(yàn)結(jié)果分析

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

        對(duì)軟件切換RS485做了基本的測(cè)試,情況如下:

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

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

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

        結(jié) 語(yǔ)

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

        [1]TI.RS-422and RS-485Standards Overview and System Configurations,2010.

        [2]TI.GPIO User′s Guide,2011.

        [3]魏永明,耿岳,鐘書(shū)毅.LINUX設(shè)備驅(qū)動(dòng)程序[M].北京:中國(guó)電力出版社,2010.

        [4]劉剛,趙建川.LINUX系統(tǒng)移植[M].北京:清華大學(xué)出版社,2011.

        猜你喜歡
        串口芯片驅(qū)動(dòng)
        基于模糊PI控制的驅(qū)動(dòng)防滑仿真系統(tǒng)分析
        淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
        屈宏斌:未來(lái)五年,雙輪驅(qū)動(dòng),砥礪前行
        軌旁ATC系統(tǒng)門(mén)控柜接收/驅(qū)動(dòng)板改造
        芯片測(cè)試
        基于S3C6410的Wi-Fi驅(qū)動(dòng)移植實(shí)現(xiàn)
        USB接口的多串口數(shù)據(jù)并行接收方法探索
        多通道采樣芯片ADS8556在光伏并網(wǎng)中的應(yīng)用
        基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無(wú)線(xiàn)通信
        基于并行控制的FPGA多串口拓展實(shí)現(xiàn)
        国产免费久久精品99久久| 日韩有码中文字幕第一页| 日韩亚洲一区二区三区在线| 久久婷婷五月综合色奶水99啪| 精品国产一区二区三区av片| 精品久久久久一区二区国产| 国产精品久久中文字幕亚洲| 亚洲一区二区三区蜜桃| 国产好大好硬好爽免费不卡| 美女啪啪国产| 区三区久久精品水蜜桃av| 国产情侣自拍一区视频| 成人免费看www网址入口| 久久精品—区二区三区无码伊人色 | 国产在线一区二区三区av| 亚洲日本中文字幕乱码| 国产成人av一区二区三区在线观看 | 久久久精品亚洲一区二区国产av| 国产成人亚洲综合无码品善网| 99久久久无码国产精品9| 新久久久高清黄色国产| 精品人妻av区乱码色片| 日日澡夜夜澡人人高潮| 国产69口爆吞精在线视频喝尿 | 日本不卡视频一区二区三区| 久久国产免费观看精品3| 欧美日韩成人在线| 久久色悠悠亚洲综合网| 亚洲中文字幕av天堂自拍| 久久久天堂国产精品女人| 69av视频在线| 成人一区二区三区国产| 日韩乱码人妻无码中文字幕久久| 中日韩欧美在线观看| 日本高清人妻一区二区| 国产69精品久久久久9999apgf | 丰满多毛的大隂户毛茸茸| 亚洲综合色一区二区三区小说| 国产亚洲精品视频在线| 久久婷婷国产综合精品| 国产白嫩美女在线观看|