I2C 總線的兩根信號線 SCL 和 SDA 需要上拉才能正常工作,當板卡上沒有合適的硬件設置或者沒有合適的 I2Cslave 設備,我們就無法進行 I2C 軟件測試。那么是否可以將兩個 PSI2C 控制器通過 EMIO 接口互連起來呢?
因為在 PL 內部無法設置信號線上拉,所以不能直接將 I2Cmaster 控制器的 scl_o/sda_o 連接到 I2C slave 控制器的 scl_i/sda_i。有另一種方法來實現上拉的效果,就是通過在頂層 wrapper 里 scl_T 和 sda_T 的組合邏輯來模擬 scl_i 和 sda_i,具體邏輯如下,
assign i2c0_scl_i = i2c1_scl_t && i2c0_scl_t;
assign i2c0_sda_i = i2c1_sda_t && i2c0_sda_t;
assign i2c1_scl_i = i2c0_scl_t && i2c1_scl_t;
assign i2c1_sda_i = i2c0_sda_t && i2c1_sda_t;
這些信號都是兩個 PS I2C 控制器的 emio 信號從 block design 導出到頂層 wrapper,其中四個 emio 信號在從 block design 導出到頂層 wrapper 之前需要做邏輯反相。
i2c0_scl_t、i2c0_sda_tn、i2c1_scl_t、i2c1_sda_tn
反相操作如圖中 util_vector_logic_0~3所示,

附件是個例子工程 (附件可點擊閱讀原文 輸入0513獲取),基于 vck190 es1 board 和 Vivado2020.2。里面包含 block design tcl腳本、頂層 wrapper、prebuilt xsa 文件和 vitis application 源碼。Vitis application 把i2c0 配置為 master、i2c1 為 slave,然后做讀寫校驗測試。可以通過串口輸出信息來判斷是否測試成功,block design 里也介入了 ila,可以在 hardware manager 里檢查相關信號。下面是 i2c0_scl_i/i2c0_sda_i/i2c1_scl_i/i2c1_sda_i 波形 :
原文標題:開發者分享 | 如何在 Versal 平臺實現兩個 PS I2C 控制器的回環
文章出處:【微信公眾號:XILINX技術社區】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
控制器
+關注
關注
114文章
17791瀏覽量
193187 -
Versal
+關注
關注
1文章
173瀏覽量
8472
原文標題:開發者分享 | 如何在 Versal 平臺實現兩個 PS I2C 控制器的回環
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
ADM1176熱插拔控制器與I2C電源監測器詳解
10 INCH-D-PRIME-MV Amphenol All Sensors 板機接口壓力傳感器 AXCXL 10 DN P
深入剖析PCA82C250 CAN控制器接口:性能、應用與設計要點
100 PSI-D-PRIME-MV-A6AAQ 板機接口壓力傳感器 Amphenol All Sensors
Microchip SAM4C32 雙核 Cortex-M4 微控制器:為智能電表與工業控制打造的高性能安全平臺
?MCP22301 USB Type-C? PD 3.1控制器技術解析與應用指南
如何將兩個PSI2C控制器通過EMIO接口互連起來?
評論