功能說明
? 引腳配置
??引腳
??引腳說明
??外圍接口選擇
??外圍接口架構(gòu)
??總線協(xié)議
??MTSSP 同步串行協(xié)議
??I2C
??SPI
??UART 半雙工
??帶有 RTS/CTS 流控制的 UART 全雙工
本章介紹 MTi 1-s 引腳排列并提供有關(guān)支持的通信接口的詳細(xì)信息。
引腳配置
MTi 1 系列模塊的引腳配置(俯視圖)
引腳
引腳映射取決于外圍設(shè)備選擇,如下表所示。#Peripheral interface selection 中解釋了配置外設(shè)逻翁。
外設(shè)選擇的引腳映射?
[1]?AUX 和 SYNC_PPS 引腳僅在 MTi-7 上可用
[2]?I2C 地址冈欢,請(qǐng)參閱#I2C 地址列表活玲。
[3]如果接口設(shè)置為 UART 全雙工瞒津,CTS 不能保持未連接狀態(tài)潮饱。如果不使用硬件流控制(HW flow control)来氧,則連接到 GND。
引腳說明
?引腳說明 MTi 1 系列模塊
外圍接口選擇
MTi 1 系列模塊支持用于主機(jī)通信的UART香拉、I2C 和 SPI 接口啦扬。主機(jī)可以通過外設(shè)選擇引腳 PSEL0 和 PSEL1 選擇活動(dòng)接口。模塊在啟動(dòng)時(shí)讀取這些引腳的狀態(tài)凫碌,并根據(jù)下表配置其外設(shè)接口扑毡。要更改所選接口,主機(jī)必須首先設(shè)置 PSEL0 和 PSEL1 引腳的所需狀態(tài)盛险,然后復(fù)位模塊瞄摊。該模塊在 PSEL0 和 PSEL1 引腳上具有內(nèi)部上拉電阻。如果這些引腳懸空苦掘,外設(shè)接口選擇默認(rèn)為 I2C(PSEL0 = 1换帜,PSEL1 = 1)。
?外圍接口選擇
外圍接口架構(gòu)
該模塊的核心是使用 Xsens 專有的 Xbus 協(xié)議鸟蜡,該協(xié)議與所有 Xsens慣性傳感器產(chǎn)品兼容膜赃。 該協(xié)議適用于所有接口、UART(異步串行端口接口)揉忘、I2C 和 SPI 接口。 I2C 和 SPI 接口與 UART 的不同之處在于它們是同步的端铛,并且具有主從關(guān)系泣矛,從屬不能自己發(fā)送數(shù)據(jù)。 這使得 Xbus 協(xié)議不能直接傳輸?shù)竭@些接口禾蚕。 為此您朽,該模塊引入了 MTi 同步串行協(xié)議 (MTi Synchronous Serial Protocol,MTSSP) 協(xié)議换淆,該協(xié)議用于通過 I2C 和 SPI 接口交換標(biāo)準(zhǔn) Xbus 協(xié)議消息哗总。 下圖顯示了 MTSSP 如何適應(yīng)模塊的(簡(jiǎn)化的)通信架構(gòu)。 該模塊具有用于 Xbus 協(xié)議消息的通用輸入和輸出隊(duì)列倍试。 對(duì)于 I2C 和 SPI讯屈,MTSSP 層轉(zhuǎn)換這些消息,而對(duì)于 UART 連接县习,模塊按原樣傳輸消息涮母。
注:MTi 1 系列可通過 UART谆趾、SPI 和 I2C 接口訪問模塊,并在使用開發(fā)板時(shí)提供額外的 USB 接口叛本。 請(qǐng)注意沪蓬,僅在使用串行 (UART/USB) 通信時(shí)才支持圖形軟件工具,例如 MT Manager 和 Magnetic Field Mapper来候,以及大部分 MT SDK跷叉。 對(duì)于 I2C 或 SPI 通信,MT SDK 中提供了專用的“嵌入式示例代碼”营搅。
MTi 1 系列模塊的通信架構(gòu)(簡(jiǎn)化)
Xbus協(xié)議
Xbus 協(xié)議是 Xsens 用于與 MTi 1 系列接口的專有協(xié)議性芬。所述MT低級(jí)通信協(xié)議文檔是針對(duì)協(xié)議的完整參考。為了更好地理解 MTSSP 解釋剧防,建議先閱讀協(xié)議參考植锉。
MTSSP 同步串行協(xié)議
本節(jié)規(guī)定了 MTi 同步串行協(xié)議 (MTSSP)。MTi 1 系列模塊使用 MTSSP 作為 I2C 和 SPI 接口的通信協(xié)議峭拘。嵌入式示例代碼可在 MT 軟件套件的 MT SDK 文件夾中找到俊庇,為協(xié)議的主機(jī)端提供參考實(shí)現(xiàn)。
數(shù)據(jù)流
MTSSP 通信根據(jù)主從模型發(fā)生鸡挠。MTi 1 系列模塊將始終充當(dāng)從機(jī)角色辉饱,而模塊的用戶/集成/主機(jī)始終是主機(jī)。主機(jī)總是發(fā)起和驅(qū)動(dòng)通信拣展。主機(jī)要么向模塊寫入消息彭沼,要么從模塊讀取消息。
下圖顯示了主機(jī)(Master Device)和 MTi 1-s(從機(jī)Slave)之間的數(shù)據(jù)流备埃。主機(jī)可以通過向控制管道發(fā)送 Xbus 消息來控制模塊姓惑。模塊認(rèn)為在單個(gè)總線傳輸中接收的字節(jié)恰好是一個(gè) Xbus 消息。MTi 1-s 將接收到的消息放入輸入隊(duì)列以供進(jìn)一步處理按脚。Xbus 解釋器處理輸入隊(duì)列中的消息于毙,并將響應(yīng)消息放置在輸出隊(duì)列中。主設(shè)備可以從通知管道中讀取這些響應(yīng)消息辅搬。
主機(jī)可以通過向控制管道發(fā)送通常的 GotoConfig 和 GotoMeasurement(簡(jiǎn)化的Xbus)消息來在配置和測(cè)量模式之間切換模塊唯沮。當(dāng)置于測(cè)量模式時(shí),模塊會(huì)將生成的測(cè)量數(shù)據(jù) (MTData2) 放置在測(cè)量管道中堪遂。主設(shè)備必須讀取測(cè)量管道以接收測(cè)量數(shù)據(jù)介蛉。
為了讓主機(jī)知道通知管道(Notification) 和 測(cè)量管道(Measurement )中消息的大小,它可以讀取管道狀態(tài)溶褪。管道狀態(tài)包含通知和測(cè)量管道中(單個(gè))下一條消息的字節(jié)大小币旧。主機(jī)可以通過編寫協(xié)議配置(Protocol Configuration)來調(diào)整協(xié)議的行為。Master 還可以讀取協(xié)議配置來檢查當(dāng)前行為竿滨,并獲取協(xié)議信息佳恬。
注:測(cè)量管道和通知管道都具有有限的大小捏境,因此只能包含有限數(shù)量的(簡(jiǎn)化的)Xbus 消息。 管道中可以包含的消息數(shù)量取決于各個(gè)消息的大小毁葱。 兩個(gè)管道都充當(dāng)先進(jìn)先出 (FIFO) 緩沖區(qū):從任一管道讀取時(shí)垫言,將首先讀取管道中最舊的消息。 一旦管道已滿倾剿,新生成的消息將被 MTi 1-s 丟棄筷频,并且(簡(jiǎn)化的 Xbus)錯(cuò)誤消息(數(shù)據(jù)溢出,0x42 0x01 0x29 0x95)將添加到通知管道前痘。 因此凛捏,主機(jī)及時(shí)讀出新消息很重要,這樣管道就不會(huì)被填滿芹缔,從而導(dǎo)致丟失測(cè)量數(shù)據(jù)或通知坯癣。
有關(guān) I2C 和 SPI 通信的最佳實(shí)踐,請(qǐng)參閱BASE文章:MTi 1 系列的最佳實(shí)踐 I2C 和 SPI
數(shù)據(jù)就緒信號(hào)
數(shù)據(jù)就緒信號(hào)(Data Ready Signal, DRDY)是由模塊驅(qū)動(dòng)的通知線路最欠。它的默認(rèn)行為是在通知或測(cè)量管道中指示新數(shù)據(jù)的可用性示罗。默認(rèn)情況下,當(dāng)兩個(gè)管道都為空時(shí)芝硬,該線路為低電平蚜点,當(dāng)任一管道包含一個(gè)消息時(shí),該線路將變?yōu)楦唠娖桨枰酢R坏┲鳈C(jī)讀取了所有掛起的消息绍绘,DRDY 線將再次變低。
主機(jī)可以使用協(xié)議配置(Procotol Configuration)更改 DRDY 信號(hào)的行為迟赃。有關(guān)更多信息陪拘,請(qǐng)參閱 ConfigureProtocol 操作碼(#List of defined opcodes)的說明。
操作碼
主機(jī)用一個(gè)操作碼(Opcodes)開始每次傳輸捺氢。操作碼決定了傳輸?shù)念愋驮宥6x的操作碼如下表所列。在操作碼之后摄乒,根據(jù)是讀傳輸還是寫傳輸,主設(shè)備讀取或?qū)懭胍粋€(gè)或多個(gè)數(shù)據(jù)字節(jié)残黑。具體傳輸格式取決于底層總線協(xié)議(I2C或SPI)馍佑。
對(duì)于某些操作碼,MTSSP 使用簡(jiǎn)化的 Xbus 消息梨水。簡(jiǎn)化的 Xbus 消息是常規(guī) Xbus 消息拭荤,其中去除了前導(dǎo)碼(preamble)和 busID 字段以節(jié)省帶寬。這些字段對(duì)應(yīng)于常規(guī) Xbus 消息的前兩個(gè)字節(jié)疫诽。簡(jiǎn)化 Xbus 消息的校驗(yàn)和計(jì)算仍包括 busID舅世,并假定其值為 0xFF旦委。有關(guān)可用 Xbus 消息的概述,請(qǐng)參閱MT 低級(jí)通信協(xié)議文檔雏亚。
定義的操作碼列表
ProtocolInfo協(xié)議信息 (0x01)
ProtocolInfo 操作碼允許 Master 讀取活動(dòng)的協(xié)議配置缨硝。報(bào)文格式如下(所有數(shù)據(jù)為小端,字節(jié)對(duì)齊):
struct MtsspInfo
{
????uint8_t m_version;
????uint8_t m_drdyConfig;
};
m_version:
m_drdyConfig:
配置協(xié)議 ConfigureProtocol (0x02)
ProtocolInfo 操作碼允許 Master 更改活動(dòng)協(xié)議配置罢低。報(bào)文格式如下(所有數(shù)據(jù)為小端查辩,字節(jié)對(duì)齊):
struct MtsspConfiguration
{
????uint8_t m_drdyConfig;
};
m_drdyConfig:
控制管道 ControlPipe?(0x03)
控制管道ControlPipe 操作碼允許 Master 將消息寫入控制管道。操作碼后面的字節(jié)表示單個(gè)(簡(jiǎn)化的)Xbus 消息网持。
管道狀態(tài)PipeStatus (0x04)
PipeStatus 操作碼允許主機(jī)檢索模塊的通知和測(cè)量管道的狀態(tài)宜岛。報(bào)文格式如下(所有數(shù)據(jù)為小端,字節(jié)對(duì)齊):
struct?MtsspConfiguration
{
????uint16_t m_notificationMessageSize;
????uint16_t m_measurementMessageSize;
};
通知管道NotificationPipe (0x05)
主機(jī)使用通知管道NotificationPipe 操作碼從通知管道中讀取功舀。讀取的數(shù)據(jù)是單個(gè)簡(jiǎn)化的 Xbus 消息萍倡。
測(cè)量管道 (0x06)
主機(jī)使用測(cè)量管道MeasurementPipe 操作碼從測(cè)量管道中讀取。讀取的數(shù)據(jù)是單個(gè)簡(jiǎn)化的 Xbus 消息 (MTData2)辟汰。
I2C
MTi 1 系列模塊用作 I2C 從設(shè)備列敲。MTi 1 系列模塊的用戶是 I2C 主設(shè)備。
用戶可以通過 ADD0莉擒、ADD1 和 ADD2 引腳配置 I2C 從地址酿炸。模塊在啟動(dòng)時(shí)讀取這些引腳的狀態(tài),并根據(jù)下表配置從機(jī)地址涨冀。ADD0填硕、ADD1 和 ADD2 引腳在內(nèi)部被上拉,因此當(dāng)未連接時(shí)鹿鳖,地址選擇默認(rèn)為 0x6B (ADD = 111)扁眯。
I2C 地址列表
?已實(shí)現(xiàn)的 I2C 總線協(xié)議功能
?注:[4] MTi-1 模塊依靠 I2C 時(shí)鐘拉伸(clock stretching)功能來克服處理時(shí)間的波動(dòng)。 需要主機(jī) 支持此功能翅帜。
寫入 MTi 1-s
寫操作由單個(gè) I2C 寫傳輸組成姻檀。主機(jī)尋址模塊,它發(fā)送的第一個(gè)字節(jié)是操作碼opcode涝滴。后面的字節(jié)是數(shù)據(jù)字節(jié)绣版。這些數(shù)據(jù)字節(jié)的解釋取決于操作碼,如#MTSSP 中所述歼疮。
模塊可以接收的最大消息大小為 512 字節(jié)杂抽。如果主機(jī)發(fā)送超過 512 個(gè)字節(jié),模塊將重置其接收緩沖區(qū)韩脏,從而將接收到的消息減少到僅包含多余的字節(jié)缩麸。
下圖顯示了寫消息操作的 I2C 傳輸:
從模塊中讀取
為了從模塊中讀取,主機(jī)首先執(zhí)行 I2C 寫傳輸以傳輸操作碼赡矢。操作碼告訴模塊主機(jī)想要讀取什么數(shù)據(jù)杭朱。該模塊然后準(zhǔn)備所請(qǐng)求的數(shù)據(jù)以進(jìn)行傳輸阅仔。然后,主機(jī)執(zhí)行 I2C 讀取傳輸以檢索數(shù)據(jù)弧械。下圖顯示了所描述的讀取方法的 I2C 傳輸八酒。
或者,用戶可以使用具有重復(fù)啟動(dòng)條件的 I2C 傳輸來執(zhí)行讀操作梦谜。下圖描述了這種讀取方法丘跌。
主機(jī)控制它讀取的數(shù)據(jù)字節(jié)數(shù)。為了讀取通知管道和測(cè)量管道唁桩,主機(jī)必須讀取的字節(jié)數(shù)取決于待處理消息的大小闭树。為了確定正確的字節(jié)數(shù),主機(jī)應(yīng)該首先讀取管道狀態(tài)Pipe Status 以獲得未決消息的大小荒澡。
如果主機(jī)讀取的字節(jié)數(shù)超出需要报辱,模塊將從頭開始重新發(fā)送請(qǐng)求的數(shù)據(jù)。
SPI
MTi 1 系列模塊用作 SPI 從設(shè)備单山。MTi 1 系列模塊的用戶是 SPI 主設(shè)備碍现。
SPI配置
MTi 1 系列支持 4 線模式 SPI。使用的4條線路是:
? 片選Chip Select (SPI_nCS)
? 串行時(shí)鐘Serial Clock (SPI_SCK)
? 主數(shù)據(jù)輸入米奸,從數(shù)據(jù)輸出 (SPI_MISO)
? 主數(shù)據(jù)輸出昼接,從數(shù)據(jù)輸入 (SPI_MOSI)
該模塊使用 SPI 模式 3:它在時(shí)鐘上升沿捕獲數(shù)據(jù),并在時(shí)鐘下降沿鎖存/傳播數(shù)據(jù)悴晰。(CPOL=1 和 CPHA=1)慢睡。數(shù)據(jù)首先輸出最高有效位(Most Significant Bit, MSB)。該模塊使用 8 位數(shù)據(jù)格式铡溪。
數(shù)據(jù)傳輸
該模塊使用單一類型的 SPI 傳輸進(jìn)行所有通信漂辐。下圖描述了這種基本轉(zhuǎn)移。
主機(jī)通過拉低 SPI_nCS 開始傳輸棕硫,以選擇從機(jī)髓涯。主機(jī)必須在傳輸期間保持 SPI_nCS 線為低電平。從設(shè)備會(huì)將 SPI_nCS 線的上升沿解釋為傳輸結(jié)束哈扮。主機(jī)將它需要傳輸?shù)臄?shù)據(jù)放在 SPI_MOSI 線上纬纪。從設(shè)備將其數(shù)據(jù)放置在 SPI_MISO 線上。
主機(jī)首先發(fā)送操作碼opcode滑肉。操作碼決定了主機(jī)傳輸什么樣的數(shù)據(jù)育八,以及主機(jī)要從從機(jī)讀取什么樣的數(shù)據(jù)(參見#MTSSP)。主機(jī)傳輸?shù)牡诙降谒膫€(gè)字節(jié)是填充字(fill words)赦邻。需要這些填充字來給從設(shè)備時(shí)間來選擇它必須在傳輸?shù)氖S嗖糠种邪l(fā)送的數(shù)據(jù)。主機(jī)和從機(jī)都可以自由選擇填充字的值实檀,接收端應(yīng)該忽略它們的值惶洲。但是按声,MTi 1 系列模塊(從機(jī))傳輸?shù)那?4 個(gè)字節(jié)始終為 0xFA、0xFF恬吕、0xFF签则、0xFF。
前四個(gè)字之后傳輸?shù)氖菍?shí)際數(shù)據(jù)铐料。主機(jī)有責(zé)任確定它必須傳輸多少字節(jié)渐裂。為了讀取通知管道和測(cè)量管道,主機(jī)必須讀取的字節(jié)數(shù)取決于待處理消息的大小钠惩。為了確定正確的字節(jié)數(shù)柒凉,主機(jī)應(yīng)該首先讀取管道狀態(tài)Pipe Status 以獲得未決消息的大小。
Timing
下表和圖指定了適用于 SPI 傳輸層的時(shí)序約束篓跛。主機(jī)必須遵守這些限制膝捞。
SPI timing
UART 半雙工
用戶可以將 MTi 1 系列模塊配置為在半雙工模式下通過 UART 進(jìn)行通信。UART 幀配置為 8 個(gè)數(shù)據(jù)位愧沟,無奇偶校驗(yàn)和 1 個(gè)停止位 (8N1)。除了 RX 和 TX 引腳外,模塊還使用控制線 nRE 和 DE饰恕。模塊使用這些控制輸出來驅(qū)動(dòng)共享介質(zhì)上的 TX 信號(hào)寥枝,并驅(qū)動(dòng) RX 信號(hào)上的共享介質(zhì)的信號(hào)。
此模式的典型用例是控制 RS485 收發(fā)器混坞,其中共享介質(zhì)是 RS485 信號(hào)狐援,nRE 和 DE 線控制收發(fā)器內(nèi)部的緩沖器。
當(dāng)模塊在其 TX 引腳上傳輸數(shù)據(jù)時(shí)拔第,它會(huì)同時(shí)拉高 nRE 和 DE 線咕村,否則會(huì)將這些線拉低。下圖描述了相關(guān)信號(hào)的行為蚊俺。
請(qǐng)注意懈涛,在此模式下,MTi 1-s 本身的 UART 仍以全雙工模式運(yùn)行泳猬。
帶有 RTS/CTS 流控制的 UART 全雙工
用戶可以將 MTi 1-s 模塊配置為在具有 RTS/CTS 流控制的全雙工模式下通過 UART 進(jìn)行通信批钠。UART 幀配置為 8 個(gè)數(shù)據(jù)位,無奇偶校驗(yàn)和 1 個(gè)停止位 (8N1)得封。除了用于數(shù)據(jù)通信的 RX 和 TX 信號(hào)外埋心,該模塊還使用 RTS 和 CTS 信號(hào)進(jìn)行硬件流控制。
CTS 信號(hào)是模塊的輸入忙上。模塊在它傳輸?shù)拿總€(gè)字節(jié)開始時(shí)檢查 CTS 線的狀態(tài)拷呆。如果 CTS 為低,則模塊傳輸字節(jié)。否則茬斧,它會(huì)推遲傳輸腰懂,直到 CTS 降低。當(dāng)在傳輸字節(jié)期間用戶發(fā)出 CTS 信號(hào)時(shí)项秉,模塊會(huì)在推遲進(jìn)一步輸出之前完成該字節(jié)的傳輸绣溜。模塊不會(huì)重傳該字節(jié)。下圖顯示了 TX 和 CTS 線的行為娄蔼。
RTS 信號(hào)是模塊的輸出怖喻。如果 RTS 線為高電平,則模塊忙且無法接收新數(shù)據(jù)岁诉。否則锚沸,模塊的 UART 處于空閑狀態(tài)并準(zhǔn)備接收。接收到一個(gè)字節(jié)后唉侄,模塊的直接內(nèi)存訪問 (direct memory access咒吐,DMA) 控制器會(huì)將字節(jié)傳輸?shù)狡浣邮障冗M(jìn)先出 (FIFO) 緩沖區(qū)。模塊將在此傳輸期間發(fā)出 RTS 信號(hào)属划。因此恬叹,隨著接收到的每個(gè)字節(jié),模塊會(huì)很快升高 RTS 線同眯。下圖顯示了這種行為绽昼。
該用戶可以在沒有硬件流量控制的情況下使用這種通信方式。在這種情況下须蜗,用戶必須將 CTS 線連接到低電平 (GND) 才能使模塊傳輸硅确。