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