一. 前言
世平集團針對 RS485 相關技術整理了一系列博文,下圖為詳細的博文索引架構;筆者希望能夠透過這些博文協助大家更了解如何在 i.MX8 相關平臺上使用 RS485,未來筆者也會持續更新此系列的相關博文還懇請支持!而本篇博文會針對 RS485 相關技術索引架構中的【ATU Book-i.MX8 系列-RS485】NXP i.MX8MQ 之使用 RS485 與 PC 傳輸資料實作 ( 上 ) 這篇文章做介紹。文章中會提及一些 RS485 Transceiver IC 的運作原理,看完本篇文章後可以了解到如何在 i.MX8MQ 平臺上使用 RS485 相關元件,再來讓我們繼續看下去吧!
二. RS485 概述
在電子領域中有很多通訊方式,像是 UART ( Universal Asynchronous Receiver/Transmitter ) 就是一種通訊方式。我們於網路上可以找到許多文章在解釋 UART 與 RS485 的關係,以下是筆者覺得敘述很棒的部分在此借鏡引用出來供各位參考:( 參考自 [6] )
(1) UART 是 Interface
可想像為公車站,它的工作就是負責派車 / 發車等事宜;所以 UART 就是用來收發資料到板端的介面。
(2) RS485 是電器協議標準
可想像為公路,而在公路上就要遵守公路的交通規則;像高速公路就有高速公路自己的規則、平路就有平路自己的規則;而 RS485 就像公路一樣,能將資料傳遞到另一端的介面。
舉個例子:
可以先把 UART 想成我們開發板上的 Interface;現在如果我有兩片開發板,那這兩片開發板之間要如何互相傳遞資料呢? 我們可以透過 RS485 ( EIA-485 ) 電器協議標準,來做到資料傳輸。
下圖示意圖描述了兩個 Device 之間,如何透過 RS485 協議傳遞訊息。
下圖示意圖描述了兩個 Device 之間,如何透過 RS485 協議傳遞訊息。
RS485 是由 TIA ( Telecommunications Industry Association ) 與 EIA ( Electronic Industries Alliance ) 發布的一項電器協議標準。而電器協議標準除了 RS485 ( EIA-485 ) 之外,還有 RS232 ( EIA-RS-232 ) 及 RS422 ( EIA-422 ) 等電器協議標準。
一般來說我們較常聽到以及使用的通常是 RS232 這個電器協議標準。那 RS232 與 RS485 這些電器協議標準之間的差異是「電氣特性」以及「物理特性」的規定不同。
RS485 它的特性大概有以下幾點:
一般來說我們較常聽到以及使用的通常是 RS232 這個電器協議標準。那 RS232 與 RS485 這些電器協議標準之間的差異是「電氣特性」以及「物理特性」的規定不同。
RS485 它的特性大概有以下幾點:
(1) 可以在電子雜訊的環境下,進行長距離的通訊。
(2) 資料傳輸方式為半雙工 ( 允許 2 裝置之間做雙向資料的傳輸 ),值得一提的是同一時間內,只允許 1 個裝置做資料傳送。
(3) 電氣特性規定為 2 線式。使用差分訊號來傳遞訊息。( 這 2 個信號的振幅相同、相位相反 )
(2) 資料傳輸方式為半雙工 ( 允許 2 裝置之間做雙向資料的傳輸 ),值得一提的是同一時間內,只允許 1 個裝置做資料傳送。
(3) 電氣特性規定為 2 線式。使用差分訊號來傳遞訊息。( 這 2 個信號的振幅相同、相位相反 )
而 RS485 可以允許連接多個裝置,大多使用在工業控制相關領域;因為差分訊號的關係 RS485 具有抗干擾能力強、可以有效抑制 EMI ( 電磁干擾 )、時序定位準確等優點。透過本篇文章可以了解到如何在 i.MX8MQ 平臺上使用 RS485 相關元件。( 文章中會涉及一些 RS485 Transceiver IC 元件運作原理 ) 後續筆者也會再撰寫其他文章,例如實作「在 i.MX8MQ 平臺上使用 RS485 電器協議標準並進行資料傳輸」還懇請繼續關注相關系列博文。
三. 讓 i.MX8MQ 平臺支援使用 RS485 協議
a. i.MX8MQ 平臺與 RS485 關係
NXP i.MX8 系列的平臺有很多 ( 包含有 i.MX8QXP、i.MX8M Plus、i.MX8M Mini、i.MX8MQ 等平臺 ),從 Reference Manual 中可以發現只有 i.MX8MQ 與 i.MX8M Mini 這 2 個平臺的 Reference Manual 中才有提及到關於 RS485 的相關字眼。( 礙於著作權關係這裡不列出詳細資訊 )
值得一提的是公板線路 Default 沒有上件 RS485 Transceiver IC,若要在 i.MX8MQ 與 i.MX8M Mini 等平臺上使用 RS485 來傳輸資料,還需上件 RS485 Transceiver IC。有鑑於此,本篇文章將使用世平集團自製的開發板 OP-Doflamingo 作為實驗平臺,上面會添加 RS485 相關線路來達成使用 RS485 協議的目標。
b. SP3088E 硬體相關介紹
本篇文章使用世平集團自製的開發板 OP-Doflamingo 作為目標實驗平臺,搭載的 SOC 是 i.MX8MQ;而在 i.MX8MQ 這個平臺上總共有 4 組 UART,本篇文章將會把第 2 組 UART ( UART2 ) 拿來作為 RS485 的資料傳輸介面,主要就是在線路上增加 RS485 相關線路來達成使用 RS485 協議的目標。( 相關線路如下 )
以此線路而言,主要是透過 SP3088E 這個 IC 來協助我們達成轉換 RS485 訊號的目的。平臺需要給它 3 根 Pin ( UART 的 RX / TX 與 1 根 GPIO ),在使用過程中需要控制此根 GPIO 才能使電路順利運作。
以下會對 SP3088E 這顆元件做簡單敘述:( 資料來自 SP3088E Datasheet [11] 礙於著作權的關係這裡只會粗略對運作原理做解釋,若要了解更多細節請自行參閱 Datasheet )
(1) 此元件共有 8 根 Pin 腳,需要將 RO / RE / DE / DI 接到 SOC。( RE / DE 可用同 1 根 GPIO 做控制 )
以下針對較重要的控制 Pin 腳做粗略解釋:
① RO 腳為 Receiver Output 的簡稱,主要就是把對方傳來的資料做輸出。當 RE 腳為 Low 才有作用。
② RE 腳為 Receiver Output Enable 的簡稱。當 RE 腳為 Low 時,RO 腳才會動作。
③ DE 腳為 Driver Output Enable 的簡稱。當 DE 腳為 High 時,才能透過 A / B 腳輸出訊號。
(2) 透過 SP3088E 傳輸資料時,須將 DE ( Driver Output Enable ) 拉 High。
(3) 透過 SP3088E 接收資料時,須將 RE ( Receiver Output Enable ) 拉 Low。
總結一下,我們使用 1 根 GPIO Pin 來控制 SP3088E 元件的 DE ( Driver Output Enable ) 腳與 RE ( Receiver Output Enable ) 腳,當 GPIO 訊號為 High 的時候,可以把 OP-Doflamingo ( i.MX8MQ ) 開發板 TX 的資料送出去;當 GPIO 訊號為 Low 的時候,OP-Doflamingo ( i.MX8MQ ) 開發板的 RX 可以拿到資料。
c. i.MX8MQ 平臺 與 PC 間透過 RS485 傳遞資料的架構
以下為本篇文章的系統架構圖;此圖敘述了板端 ( OP-Doflamingo ) 與 PC 端使用 RS485 協議做資料傳輸的樣貌。
透過以上架構圖,我們可以得知以下訊息:
(1) 從板端 ( OP-Doflamingo ) 的 TX 傳送資料到 PC 端的路線為何。
(2) 從 PC 端送資料到板端 ( OP-Doflamingo ) 的 RX,傳送資料的路線為何。
(3) 也可以透過架構圖得知,若要在 i.MX8MQ 相關平臺使用 RS485 功能還需加裝 RS485 Transceiver IC 才能達成目的。
(2) 從 PC 端送資料到板端 ( OP-Doflamingo ) 的 RX,傳送資料的路線為何。
(3) 也可以透過架構圖得知,若要在 i.MX8MQ 相關平臺使用 RS485 功能還需加裝 RS485 Transceiver IC 才能達成目的。
四. 結語
本篇博文以世平集團自製的開發板 OP-Doflamingo 為例,示範了在 i.MX8MQ 等系列板子上加裝 RS485 相關 Transceiver IC。後續筆者會再撰寫一篇博文來示範 i.MX8MQ 開發板與 PC 透過 RS485 協議互相傳遞資料,再請各位讀者到大大通搜尋【ATU Book-i.MX8 系列-RS485】NXP i.MX8MQ 之使用 RS485 與 PC 傳輸資料實作 ( 下 )。希望各位讀者看完此篇文章後可以對 i.MX8 系列平臺使用 RS485 相關元件會有更深刻的體會,假設讀者們實作過程中有遇到任何問題也歡迎隨時找世平集團一起討論。
五. 參考文件
[1] https://zh.wikipedia.org/wiki/UART
[2] https://zh.wikipedia.org/wiki/USB
[3] https://en.wikipedia.org/wiki/RS-485
[4] https://zh.wikipedia.org/wiki/EIA-485
[5] https://zh.wikipedia.org/wiki/EIA-422
[6] https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/586303/
[7] https://www.itread01.com/content/1546130883.html
[8] https://makerpro.cc/2020/01/uart-part3/
[9] https://zh.wikipedia.org/wiki/%E9%9B%99%E5%B7%A5
[10] https://zh.wikipedia.org/wiki/%E5%B7%AE%E5%88%86%E4%BF%A1%E5%8F%B7
[11] https://www.maxlinear.com/ds/sp3082e_sp3083e_sp3084e_sp3085e_sp3088e.pdf
[2] https://zh.wikipedia.org/wiki/USB
[3] https://en.wikipedia.org/wiki/RS-485
[4] https://zh.wikipedia.org/wiki/EIA-485
[5] https://zh.wikipedia.org/wiki/EIA-422
[6] https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/586303/
[7] https://www.itread01.com/content/1546130883.html
[8] https://makerpro.cc/2020/01/uart-part3/
[9] https://zh.wikipedia.org/wiki/%E9%9B%99%E5%B7%A5
[10] https://zh.wikipedia.org/wiki/%E5%B7%AE%E5%88%86%E4%BF%A1%E5%8F%B7
[11] https://www.maxlinear.com/ds/sp3082e_sp3083e_sp3084e_sp3085e_sp3088e.pdf
參考來源