本應(yīng)用筆記涵蓋了在MxTNI?上開(kāi)發(fā)串行應(yīng)用的硬件和軟件方面。在某些情況下必須使用特殊方法。本應(yīng)用筆記討論了其中的每一個(gè),以及它們與內(nèi)部和外部串行端口的關(guān)系。還包括關(guān)于使用外部串行端口所需硬件的討論。
介紹
許多設(shè)備使用串行端口作為與其他電子設(shè)備通信的手段 - 從個(gè)人計(jì)算機(jī)和調(diào)制解調(diào)器等非常著名的示例到制造和工業(yè)自動(dòng)化設(shè)備。事實(shí)上,對(duì)于許多人來(lái)說(shuō),串行端口提供了與外界通信的唯一機(jī)制。這些設(shè)備沒(méi)有直接參與更大的計(jì)算機(jī)網(wǎng)絡(luò)的手段。因此,彌合串行設(shè)備與聯(lián)網(wǎng)主機(jī)之間的通信鴻溝是Maxim微型網(wǎng)絡(luò)接口(MxTNI)技術(shù)最受歡迎的應(yīng)用之一。本應(yīng)用筆記涵蓋了在MxTNI上開(kāi)發(fā)串行應(yīng)用的硬件和軟件方面。
MxTNI 主板型號(hào) 390 (TBM390) 的 MxTNI 運(yùn)行時(shí)環(huán)境最多可以支持四個(gè)串行端口。MxTNI 板 400 型 (TBM400) 支持五個(gè)串行端口。串行端口通過(guò) 指定。、 使用的 UART 集成在 MxTNI 的微控制器中,稱(chēng)為“內(nèi)部”串行端口。UART使用的UART需要一個(gè)專(zhuān)用的外部雙UART芯片。這些被稱(chēng)為“外部”串行端口。
內(nèi)部串行端口
由于 serial0、serial1 和 serial4 使用內(nèi)部 UART,因此它們的效率更高。內(nèi)部串行端口驅(qū)動(dòng)程序不必執(zhí)行幾乎那么多的工作即可從UART加載或卸載數(shù)據(jù)。但是,內(nèi)部串行端口在配置選項(xiàng)方面受到一定限制。支持的串行字符配置包括:
8 個(gè)數(shù)據(jù)位,1 個(gè)停止位,無(wú)奇偶校驗(yàn)(默認(rèn))
8 個(gè)數(shù)據(jù)位,1 個(gè)停止位,具有奇偶校驗(yàn)(僅奇數(shù)/偶數(shù))
7 個(gè)數(shù)據(jù)位,2 個(gè)停止,無(wú)奇偶校驗(yàn)
7 個(gè)數(shù)據(jù)位,1 個(gè)停止,具有奇偶校驗(yàn)(僅奇數(shù)/偶數(shù))
如果使用內(nèi)部端口,則無(wú)法使用僅使用 5 或 6 個(gè)數(shù)據(jù)位或 1.5 個(gè)停止位的配置。然而,這很少引起實(shí)際關(guān)注。列出的選項(xiàng)允許內(nèi)部端口與最常見(jiàn)的串行設(shè)備通信。內(nèi)部端口還支持 XON/XOFF 流量控制。但是,一組硬件握手線在所有內(nèi)部端口之間共享。這意味著一次只有一個(gè)端口可以使用 RTS/CTS 流量控制。默認(rèn)情況下,serial0 不擁有硬件握手信號(hào)。使用 TINIOS 1.0x,可以使用類(lèi)中定義的方法更改此所有權(quán)。TINIOS 1.1x 應(yīng)用程序必須使用 setSerial 方法作為第一個(gè)參數(shù)。
public static boolean setRTSCTSFlowControlEnable(int portNumber, boolean enable) throws UnsupportedCommOperationException public static int setSerial(int cmd, int port, boolean arr) throws UnsupportedCommOperationException
端口號(hào)必須指定一個(gè)內(nèi)部串行端口(0、1 或 4)。如果是,則硬件握手信號(hào)將專(zhuān)用于用作指定串行端口的硬件握手信號(hào)。如果是,則信號(hào)可以自由地作為通用TTL I/O與類(lèi)一起使用。
使用 時(shí)還需要記住幾點(diǎn)。首先,默認(rèn)情況下專(zhuān)用于與外部1-Wire?線路驅(qū)動(dòng)器通信的任務(wù)。如果您的MxTNI硬件實(shí)現(xiàn)不需要(或支持)使用外部1-Wire適配器,則可以回收使用通用串行端口。要在 TINIOS 1.0x 中重寫(xiě) 的默認(rèn)用法,應(yīng)用程序必須調(diào)用類(lèi)中定義的方法。對(duì)于 TINIOS 1.1x,應(yīng)使用該方法,并將 作為第一個(gè)參數(shù)。
public static final void enableSerialPort1() public static int setSerial(int cmd, int port, boolean arr) throws UnsupportedCommOperationException
此選項(xiàng)在系統(tǒng)引導(dǎo)后仍然存在。如果使用TBM390,則還需要禁用DS2480B 1-Wire驅(qū)動(dòng)器。這是通過(guò)將信號(hào)接地(SIMM 連接器的引腳 26)來(lái)實(shí)現(xiàn)的。關(guān)于 ,要記住的另一件事是,它不支持低于 2400bps 的任何數(shù)據(jù)速率。與現(xiàn)代串行設(shè)備通信時(shí),這通常不是問(wèn)題。EN2480serial1
外部串行端口
在使用外部串行端口之前,必須添加必要的硬件。外部串行端口由五個(gè)模塊組成:DUART、RS-232電平轉(zhuǎn)換器、中斷電路、解碼邏輯和一組去耦電容。下圖顯示了可與 E10 插座板一起使用的每個(gè)模塊的一些示例電路。還包括用于這些電路的材料清單。
圖1.解碼電路。
圖2.去耦電容器。
圖3.中斷電路。
圖4.DUART 和 RS-232 驅(qū)動(dòng)程序。
Component | Description | Package |
C9–C13, C8, C16, C18, C19, C21–C25, C26, C31–C34 | 0.1μF | 1206 |
C14 | 22pF | 1206 |
C15 | 22pF | 1206 |
C17 | 470pF | 1206 |
J18, J19 | 10-pin, 0.1 center header connector | |
R4, R5, R21 | 10kΩ | 1206 |
R7 | 1.5kΩ | 1206 |
R8 | 1MΩ | 1206 |
U2 | 74AC02 | 14-pin SO |
U3 | 74AC32 | 14-pin SO6 |
U6, U9 | DS229 | 20-pin TSSOP |
U7 | National | DS14C89A |
U8 | National PC16552D | 44-PLCC |
U10 | 74AC138 | 16-pin SO |
Y1 | 3.6864MHz | HC49 |
添加硬件后,必須使用類(lèi)中的方法(TINIOS 1.0x)或方法(TINIOS 1.1x)啟用外部串行端口。
public static void setExternalSerialPortEnable(int portNum, boolean enable) public static int setSerial(int cmd, int port, boolean arr) throws UnsupportedCommOperationException
端口號(hào)必須指定其中一個(gè)外部端口(2 或 3)。啟用值 true 允許使用外部串行驅(qū)動(dòng)程序。由 建立的設(shè)置在系統(tǒng)引導(dǎo)期間保持不變。
外部串行驅(qū)動(dòng)程序允許靈活地將外部UART硬件映射到MxTNI的內(nèi)存空間。外部 UART 的默認(rèn)基址為 0x380020。可以使用 中的方法 (TINIOS 1.0x) 或 setSerial 方法 (TINIOS 1.1x) 覆蓋此位置。
public static void setExternalSerialPortAddress(int portNum, int address) public static int setSerial(int cmd, int port, boolean arr) throws UnsupportedCommOperationException
端口號(hào)必須指定其中一個(gè)外部端口(2 或 3)。地址是指內(nèi)存映射中使用的基本(或最低)地址。由 建立的設(shè)置在重新啟動(dòng)后仍然存在。
最后,如果內(nèi)部串行端口的可能配置受到限制,則外部串行端口支持可以使用 Java? 通信 API 實(shí)現(xiàn)的所有配置,但 XON/XOFF 流控制除外。
MxTNI 運(yùn)行時(shí)環(huán)境,以及slushserial0
在開(kāi)發(fā)使用串行通信的應(yīng)用程序時(shí),還需要記住其他一些事項(xiàng)。當(dāng)MxTNI啟動(dòng)時(shí),它以115,200bps的數(shù)據(jù)速率傳輸進(jìn)度消息。這可能會(huì)導(dǎo)致某些嵌入式串行設(shè)備混淆,因?yàn)閿?shù)據(jù)是未經(jīng)請(qǐng)求的,并且傳輸速度可能與設(shè)備配置為接收數(shù)據(jù)的速度不同。TINIOS 1.0x 應(yīng)用程序可以使用類(lèi)中的方法禁用引導(dǎo)進(jìn)度消息。TINIOS 1.1x 應(yīng)用程序必須使用該方法。
public static final void setSerialBootMessagesState(boolean on) public static int setSerial(int cmd, int port, boolean arr) throws UnsupportedCommOperationException
串行啟動(dòng)消息狀態(tài)在系統(tǒng)啟動(dòng)期間是持久的。
MxTNI 的默認(rèn)外殼 也用于傳輸狀態(tài)消息并允許用戶(hù)登錄。要禁用串行服務(wù)器并防止 slush 在啟動(dòng)過(guò)程中抖動(dòng),應(yīng)從文件中刪除行 “”。這將防止在 上喋喋不休。如果希望能夠在不禁用 的串行服務(wù)器的情況下使用,則可以在類(lèi)中使用該方法。
public static void setConsoleOutputEnabled(boolean set)
使用 equal to 調(diào)用此方法將指示以靜默方式啟動(dòng),以免干擾可能連接到的任何設(shè)備。
最后要注意的是,不需要采取任何特殊操作來(lái)強(qiáng)制 的串行服務(wù)器釋放,以便另一個(gè)應(yīng)用程序可以訪問(wèn)它。每當(dāng)另一個(gè)應(yīng)用程序請(qǐng)求時(shí),將自動(dòng)放棄其所有權(quán)。只需確保在嘗試打開(kāi)端口時(shí)指定足夠的超時(shí)值(五秒通常足夠大)。
結(jié)論
除了這里提到的幾種方法外,MxTNI上的所有串行端口編程都可以使用Java Communications API中定義的技術(shù)來(lái)完成。這為開(kāi)發(fā)人員提供了一種使用MxTNI構(gòu)建串行應(yīng)用程序的簡(jiǎn)單標(biāo)準(zhǔn)方法。這些應(yīng)用程序?qū)⒃试SMxTNI與各種串行設(shè)備連接,包括那些從未打算成為更大網(wǎng)絡(luò)一部分的設(shè)備。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7566瀏覽量
151614 -
調(diào)制解調(diào)器
+關(guān)注
關(guān)注
3文章
854瀏覽量
38840 -
uart
+關(guān)注
關(guān)注
22文章
1240瀏覽量
101488
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論