通過SerDes遠端I2C接口訪問16位I2C外設寄存器地址
摘要:本應用筆記介紹如何通過吉比特多媒體串行鏈路(GMSL) SerDes的遠端I2C接口訪問16位寄存器地址。
本文引用地址:http://www.ex-cimer.com/article/155208.htm引言
Maxim吉比特多媒體串行鏈路(GMSL)串行器/解串器(SerDes)系列包括MAX9249、MAX9259、MAX9260、MAX9263和MAX9264,具有UART/I2C轉換器,用于遠端控制I2C接口外設。這些外設包括相機傳感器、I/O端口擴展器、音頻模/數(shù)轉換器(ADC)和數(shù)/模轉換器(DAC),以及LED照明。
在GMSL數(shù)據資料和相關技術文件中,通過UART端口直接連接至電子控制單元(ECU)的一端被稱為本地端,另一端被稱為遠端.
I2C外設接口是控制通道基本模式中的默認設置。GMSL系列SerDes只轉換器件地址不同于GMSL串行器或解串器地址的UART數(shù)據包。UART/I2C轉換器接收(比如)汽車ECU發(fā)出的UART讀或寫數(shù)據包,并將其轉換為I2C主控制器協(xié)議。
I2C接口支持外設使用的多種不同格式,有或沒有變址寄存器以及8為或16位變址寄存器地址均可,通過遠端寄存器位I2CMETHOD (寄存器0x05位7)設置實現(xiàn)。
對于沒有變址寄存器的外設:
設置I2CMETHOD = 1,按照標準GMSL UART協(xié)議發(fā)送讀/寫數(shù)據包。UART/I2C轉換器將去掉讀/寫數(shù)據包中的8位寄存器地址,如圖1所示。
圖1. 命令模式(I2CMETHOD = 1)下UART和I2C之間的格式轉換
對于采用8位變址寄存器的外設:
設置I2CMETHOD = 0,按照標準GMSL UART協(xié)議發(fā)送讀/寫數(shù)據包,如圖2所示。
圖2. 帶有寄存器地址(I2CMETHOD = 0)時,UART和I2C之間的格式轉換 對于采用16位變址寄存器的外設: 3.1. 寫操作。設置I2CMETHOD = 1,按照標準GMSL UART協(xié)議產生寫數(shù)據包。將16為變址寄存器地址置于數(shù)據的前2個字節(jié),使字節(jié)的數(shù)量等于發(fā)送數(shù)據的原始數(shù)量加2.UART/I2C轉換器將去掉標準寫數(shù)據包中的8位寄存器地址,如圖1所示。 例如,如果外設需要16位變址寄存器和8位數(shù)據,類似于: 假設device_address = 0x22,index_regiSTer_address = 0x3344,及data = 0x55.主控ECU需要將數(shù)據包0x79 + 0x22 + 0x00 + 0x03 + 0x33 + 0x44 + 0x55寫入UART端口,然后讀取來自UART端口的ACK字節(jié),檢查寫操作是否成功。 0x79為同步字節(jié), 0x22為帶有寫操作指示的器件地址, 0x00為虛擬字節(jié),可為任意值;UART/I2C轉換器在轉換時將其刪除, 0x03為字節(jié)數(shù)量, 0x33為16位變址寄存器地址的高位字節(jié), 0x44為16為變址寄存器地址的低位字節(jié), 0x55為8位數(shù)據。 UART/I2C轉換器之后,數(shù)據包將變?yōu)椋?/p> 3.2. 讀操作。完成寫操作需要2個UART數(shù)據包,1個寫數(shù)據包后跟1個讀數(shù)據包。寫數(shù)據包設置變址寄存器地址,讀數(shù)據包讀取數(shù)據。 假設外設的器件地址和變址寄存器地址相同,需要讀取1個數(shù)據字節(jié),需按以下步驟進行: 設置I2CMETHOD = 1, ECU發(fā)送寫數(shù)據包0x79 + 0x22 + 0x00 + 0x02 + 0x33 + 0x44至UART端口, ECU從UART端口讀取ACK字節(jié), ECU發(fā)送讀數(shù)據包0x79 + 0x23 + 0x00 + 0x01至UART端口, ECU從UART端口讀取ACK字節(jié), 然后ECU從UART端口讀取數(shù)據。 對于寫數(shù)據包: 0x79為同步字節(jié), 0x22為帶有寫操作指示的器件地址, 0x00為虛擬字節(jié),可為任意值;UART/I2C轉換器在轉換時將其刪除, 0x02為字節(jié)數(shù)量, 0x33為16位變址寄存器地址的高位字節(jié), 0x44為16位變址寄存器地址的低位字節(jié)。 對于讀數(shù)據包: 0x79為同步字節(jié), 0x23為帶有讀操作指示的器件地址, 0x00為虛擬字節(jié),可為任意值;UART/I2C轉換器在轉換時將其刪除, 0x01為字節(jié)數(shù)量。
評論