簡(jiǎn)單串行接口(SSI)是用于與Maxim嵌入式測(cè)量器件(78M6610+LMU、78M6610+PSU和MAX78630+PPM)通信的二進(jìn)制協(xié)議。
概述
簡(jiǎn)單串行接口(SSI)是一種二進(jìn)制串行協(xié)議,用于在Maxim Integrated的嵌入式測(cè)量設(shè)備(EMD)上進(jìn)行UART通信。本應(yīng)用筆記通過詳細(xì)說明可用命令和相應(yīng)的源代碼示例來介紹該協(xié)議的特性和結(jié)構(gòu)。該協(xié)議的主要特點(diǎn)是:
簡(jiǎn)單性:該協(xié)議可以在主機(jī)處理器上實(shí)現(xiàn),而不會(huì)占用過多的系統(tǒng)資源。
健壯性:每個(gè)數(shù)據(jù)包都包含一個(gè)標(biāo)頭、字節(jié)計(jì)數(shù)、有效負(fù)載和校驗(yàn)和。如果命令的標(biāo)頭、字節(jié)計(jì)數(shù)和校驗(yàn)和不正確,則收件人可以拒絕數(shù)據(jù)包。
效率:數(shù)據(jù)以二進(jìn)制編碼而不是字符編碼值交換,命令不需要回顯到主機(jī)。此外,可以在單個(gè)數(shù)據(jù)包中發(fā)送多個(gè)命令,以進(jìn)一步減少通信開銷。
支持多點(diǎn)系統(tǒng):目標(biāo)設(shè)備尋址能力支持在單個(gè)串行總線上連接多個(gè)目標(biāo)設(shè)備。
SSI 是一種基于數(shù)據(jù)包的協(xié)議,可實(shí)現(xiàn)主從或命令-響應(yīng)通信。SSI 中使用兩種類型的數(shù)據(jù)包:主數(shù)據(jù)包,由主機(jī)設(shè)備發(fā)出;和從數(shù)據(jù)包,由從屬 EMD 發(fā)出,以響應(yīng)來自主機(jī)或主站的命令。
下載相應(yīng)的源代碼。
串行接口選擇
主站通過三個(gè)串行接口訪問Maxim EMD:UART、SPI和I2C。SSI 使用 UART 接口,必須相應(yīng)地配置 EMD 才能使用 SSI。這是通過器件相應(yīng)引腳上的上拉或下拉電阻完成的。有關(guān)配置器件串行接口的說明,請(qǐng)參閱器件數(shù)據(jù)手冊(cè)。
設(shè)備地址
EMD 的器件地址 (SSID) 通過 DevAddr 寄存器和器件的一個(gè)或兩個(gè)引腳的組合進(jìn)行設(shè)置,具體取決于器件的封裝。有關(guān)設(shè)置器件SSID的說明,請(qǐng)參閱器件數(shù)據(jù)手冊(cè)。
主數(shù)據(jù)包
主數(shù)據(jù)包始終包含以下內(nèi)容:
單字節(jié)標(biāo)頭,0xAA
單字節(jié)數(shù)據(jù)包長(zhǎng)度指示器,它是數(shù)據(jù)包中所有字節(jié)的計(jì)數(shù),包括其自身
有效負(fù)載,可以包含多個(gè)命令
校驗(yàn)和,它是數(shù)據(jù)包中所有前面字節(jié)的模 256 和的二進(jìn)制補(bǔ)碼,從標(biāo)頭字節(jié)開始,包括有效負(fù)載的最后一個(gè)字節(jié)
從上面的描述中,有一些特征與所有有效的主數(shù)據(jù)包有關(guān):
主數(shù)據(jù)包的長(zhǎng)度始終為 4 個(gè)或更多字節(jié)。
主數(shù)據(jù)包的長(zhǎng)度不能超過 255 字節(jié)。
字段字節(jié)計(jì)數(shù)為一個(gè)字節(jié)。
數(shù)據(jù)包的最大長(zhǎng)度受從設(shè)備的命令緩沖區(qū)限制。請(qǐng)參閱從器件的數(shù)據(jù)手冊(cè),了解該器件的最大命令長(zhǎng)度。
圖 1 說明了主數(shù)據(jù)包的結(jié)構(gòu)。
圖1.SSI 主數(shù)據(jù)包結(jié)構(gòu)。
從數(shù)據(jù)包
從數(shù)據(jù)包的結(jié)構(gòu)因從設(shè)備從主設(shè)備接收的命令而異。最短的從數(shù)據(jù)包是單字節(jié)響應(yīng),表示對(duì)收到的命令進(jìn)行肯定或否定確認(rèn)。在 SSI 中實(shí)現(xiàn)的所有單字節(jié)數(shù)據(jù)包如表 1 所示。
表 1.單字節(jié)從屬數(shù)據(jù)包
法典 | 定義 |
---|---|
0xAD | 沒有數(shù)據(jù)的正確認(rèn)是接收和執(zhí)行的有效命令,但不需要數(shù)據(jù)響應(yīng)。 |
0xB0 | 否定確認(rèn) |
0xBC | 錯(cuò)誤命令是從設(shè)備不支持的已接收命令。 |
0xBD | 校驗(yàn)和錯(cuò)誤是在主數(shù)據(jù)包中檢測(cè)到的校驗(yàn)和錯(cuò)誤。 |
0xBF | 緩沖區(qū)溢出表示主數(shù)據(jù)包太長(zhǎng)。 |
包含數(shù)據(jù)的從數(shù)據(jù)包遵循與主數(shù)據(jù)包相同的一般結(jié)構(gòu),包括標(biāo)頭字節(jié)、字節(jié)計(jì)數(shù)、有效負(fù)載和校驗(yàn)和,如圖 2 所示。
多字節(jié)從數(shù)據(jù)包的標(biāo)頭字節(jié)可以是0xAA(用數(shù)據(jù)確認(rèn))或0xAE(自動(dòng)報(bào)告數(shù)據(jù)包)。自動(dòng)報(bào)告數(shù)據(jù)包由 78M6610+PSU 等設(shè)備生成,這些設(shè)備可以定期自動(dòng)傳輸測(cè)量數(shù)據(jù)。由于自動(dòng)報(bào)告數(shù)據(jù)和命令響應(yīng)數(shù)據(jù)有不同的標(biāo)頭,因此主機(jī)可以在從站發(fā)送自動(dòng)報(bào)告數(shù)據(jù)時(shí)發(fā)送命令和接收響應(yīng)。
圖2.多字節(jié)從數(shù)據(jù)包。
主命令
SSI主站和從站之間的大多數(shù)通信都涉及請(qǐng)求從設(shè)備中寄存器的內(nèi)容并寫入這些寄存器。典型的命令序列包括向從站發(fā)送目標(biāo)寄存器地址,并發(fā)出讀或?qū)懨钜詮哪繕?biāo)地址開始讀取或?qū)懭胍粋€(gè)或多個(gè)寄存器。其他命令允許在單個(gè)總線上具有多個(gè)從設(shè)備的系統(tǒng)中選擇或取消選擇單個(gè)從設(shè)備。實(shí)現(xiàn)自動(dòng)報(bào)告的設(shè)備還可以接受命令來更改自動(dòng)報(bào)告數(shù)據(jù)包的內(nèi)容。
當(dāng)前版本的 SSI 中支持的所有主命令如表 2 所示。請(qǐng)注意,所有Maxim EMD可能不會(huì)響應(yīng)所有命令。請(qǐng)參閱器件的數(shù)據(jù)手冊(cè),以確定哪些命令可以在特定器件中執(zhí)行。
表 2.主命令
命令 | 參數(shù) | 描述 |
---|---|---|
0xA0 | 那 | |
0xA1 | 1 字節(jié),地址 [7:0] | 設(shè)置目標(biāo)地址位 [7:0]。 |
0xA2 | 1 字節(jié),地址 [15:8] | 設(shè)置目標(biāo)地址位 [15:8]。 |
0xA3 | 2 字節(jié),地址 [7:0],[15:8] | 設(shè)置目標(biāo)地址位 [15:0]。 |
0xD0 | 數(shù)據(jù) | 寫入字節(jié),從目標(biāo)地址開始,由字節(jié)計(jì)數(shù)的剩余部分設(shè)置。 |
0xD1-0xDF | 數(shù)據(jù) | 從目標(biāo)地址開始寫入 1–15 個(gè)字節(jié)。 |
0xE0 | 1 字節(jié),字節(jié)數(shù) | 從目標(biāo)地址開始讀取字節(jié),需要指示要讀取的字節(jié)數(shù)的參數(shù)。 |
0xE1-0xEF | 那 | 從目標(biāo)地址開始讀取 1–15 個(gè)字節(jié),不需要參數(shù),使用低半字節(jié)。 |
0xAE | 那 | 安裝新的自動(dòng)報(bào)告命令。 |
以下命令用于選擇和取消選擇目標(biāo)設(shè)備 | ||
0xC0 | 那 | 取消選擇當(dāng)前選定的從屬設(shè)備 |
0xC1-0xCE | 那 | 選擇目標(biāo)設(shè)備,不需要參數(shù),使用低半字節(jié)。 |
0xCF | 1 字節(jié),設(shè)備的 SSID | 選擇目標(biāo)設(shè)備,需要指示從設(shè)備SSID的參數(shù) |
超時(shí)
當(dāng)設(shè)備空閑(即等待來自主站或目標(biāo)站的數(shù)據(jù)包)時(shí),接收緩沖區(qū)指針將重置并指向第一個(gè)緩沖區(qū)位置。收到第一個(gè)字節(jié)時(shí),設(shè)備會(huì)檢查它是 SSI 標(biāo)頭還是應(yīng)答 (0xAA)。如果是這樣,則重置超時(shí)計(jì)時(shí)器,并且每個(gè)后續(xù)接收字節(jié)也會(huì)重置計(jì)時(shí)器。如果在超時(shí)間隔內(nèi)未收到任何字節(jié),并且數(shù)據(jù)包被視為不完整,則設(shè)備將返回空閑狀態(tài),而不發(fā)送任何內(nèi)容。此時(shí),主服務(wù)器可以重新發(fā)送最后一個(gè)命令或發(fā)送新命令。
當(dāng)數(shù)據(jù)包損壞或未選擇目標(biāo)時(shí),可能會(huì)發(fā)生超時(shí)。主設(shè)備和從設(shè)備都必須實(shí)現(xiàn)超時(shí)。如果在接收數(shù)據(jù)包期間以當(dāng)前波特率在大約 50 字節(jié)時(shí)間內(nèi)未收到字節(jié),則會(huì)發(fā)生超時(shí)。在重新發(fā)送命令之前,主服務(wù)器應(yīng)至少等待此時(shí)間。
SSI 源代碼和示例
開發(fā)以下示例是為了幫助理解 SSI 協(xié)議,并為構(gòu)建自定義應(yīng)用程序奠定基礎(chǔ)。提供的源代碼不執(zhí)行任何特定的應(yīng)用程序;但是,它確實(shí)提供了與Maxim EMD接口所需的基本功能。提供的源代碼文件及其說明列于表 3 中。
表 3.示例源代碼文件及其說明
文件 | 描述 |
---|---|
maxim_ssi.c | SSI 讀取、寫入等的函數(shù)定義 |
maxim_ssi.h | 函數(shù)原型和 SSI 命令#defines |
maxim_em_device.h | 定義應(yīng)用中使用的嵌入式測(cè)量設(shè)備的頭文件 |
78M6610_LMU.h | 嵌入式測(cè)量設(shè)備頭文件 |
78M6610_PSU.h | 嵌入式測(cè)量設(shè)備頭文件 |
MAX78630_PPM.h | 嵌入式測(cè)量設(shè)備頭文件 |
華華 | 客戶的硬件特定功能定義(ssi_tx_byte、ssi_rx_byte) |
呵呵 | 客戶的硬件特定功能原型 |
maxim_ssi.c 和 maxim_ssi.h
頭文件 maxim_ssi.h 提供 SSI 函數(shù)原型,并定義主命令、從屬響應(yīng)和最大數(shù)據(jù)包長(zhǎng)度。
maxim_ssi.c 提供以下功能:
無符號(hào)字符 ssi_get_checksum(無符號(hào)字符 CNT,無符號(hào)字符 X 數(shù)據(jù))
int ssi_send_packet(無符號(hào)字符byte_cnt,無符號(hào)字符 x 有效負(fù)載)
int ssi_deselect_device(無效)
int ssi_select_device(unsigned char ssid)
國(guó)際ssi_set_rw_adrs(emd_register_t ADR)
int ssi_clear_adrs(無效)
無符號(hào)字符 x ssi_read_3bytes(emd_register_t ADR)
int ssi_write_3bytes(emd_register_t ADR,無符號(hào)字符 x 數(shù)據(jù))
無符號(hào)字符 x ssi_read_Nbytes(emd_register_t 個(gè) ADR,無符號(hào)字符n_bytes)
int ssi_write_Nbytes(emd_register_t ADR、無符號(hào)字符 x 數(shù)據(jù)、無符號(hào)字符n_bytes)
maxim_em_device.h 頭文件 maxim_em_device.h
為那些可能在其應(yīng)用中使用部分或全部器件的開發(fā)人員提供了一種定義應(yīng)用中使用的 Maxim EMD 的便捷方法。該文件僅具有可以注釋或取消注釋的#defines,具體取決于所使用的設(shè)備。
78M6610_LMU.h、78M6610_PSU.h、MAX78630_PPM.h 頭文件 78M6610_LMU.h、78M6610_PSU.h 和 MAX78630_PPM.h
通過使用枚舉類型emd_register_t使用戶應(yīng)用程序代碼可讀,為所使用的嵌入式測(cè)量設(shè)備的寄存器提供別名。此外,還提供用于設(shè)備寄存器的位掩碼。
hw.c 和 hw.h
文件 hw.c 提供了函數(shù) ssi_tx_byte() 和 ssi_rx_byte()。這是用戶實(shí)現(xiàn)其硬件特定函數(shù)調(diào)用的適當(dāng)文件。可以使用的功能init_hardware()由用戶自行決定刪除;它僅為方便起見而提供。
結(jié)論
Maxim Integrated的EMD的簡(jiǎn)單串行接口名副其實(shí):簡(jiǎn)單。本應(yīng)用筆記和隨附的源代碼旨在闡明協(xié)議,并在盡可能短的開發(fā)時(shí)間內(nèi)啟動(dòng)并運(yùn)行應(yīng)用。
-
嵌入式
+關(guān)注
關(guān)注
5085文章
19138瀏覽量
305731 -
Maxim
+關(guān)注
關(guān)注
8文章
859瀏覽量
87232 -
寄存器
+關(guān)注
關(guān)注
31文章
5355瀏覽量
120531
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論