最近使用S家的I2C VIP驗證芯片的外圍I2C、SMBus總線,作為同樣由SCL和SDA兩根線支撐起的串行總線,協議相似,因此該I2C VIP也可以配置成SMBus總線使用。只需要更改其最上層的configuration即可,這一點User Guide寫的很清楚,很方便。
具體到SMBus模式的使用場景,我需要在發送完一筆數據后,修改數據中的command值,即第一筆數據和第二筆數據使用的command相同,但需要修改command對應的值。該command在_agent_configuration中聲明,VIP提供了reconfigure_via_task( )來更改該command。
我參考VIP中提供的示例編寫了sequence,其中更改command的代碼如下:
smbus_cfg.master_cfg[0].xxx_cmd = 'hxx; env.system_env.master[0].reconfigure_via_task(smbus_cfg.master_cfg[0]);
但遇到了問題,數據包發送不完,仿真會掛死在某個地方,波形上也會變成一條直線,但run.log暗示數據的確是產生了。隨后,根據VIP提供的另一個示例,嘗試在調用完reconfigure_via_task( )后,通過調用start( )的方式重新啟動sequence,但情況沒有發生改變。至此,基本定位到了問題出在調用reconfigure_via_task( )這行代碼上。
重新看run.log,發現調用完該task后,VIP的master_agent[0]會被重新配置成默認標準的I2C模式上,這樣問題就合理了,I2C standard模式的確發不了SMBus fast模式的數據,這也證實了run.log中現實數據產生了,但總線上沒有數據的情況。
因此,解決的辦法也很簡單,在調用reconfigure_via_task( )之前,將SMBus相關的配置重新配置上即可。
run.log中藏著debug的信息,在出現bug時一定要仔細閱讀run.log,經驗+1。
這個問題也和config_db跨層傳參失誤有關,后面再寫~
審核編輯:劉清
-
芯片
+關注
關注
456文章
51121瀏覽量
426010 -
I2C總線
+關注
關注
8文章
406瀏覽量
61096 -
SMBus
+關注
關注
1文章
117瀏覽量
22123 -
SCL
+關注
關注
1文章
239瀏覽量
17121
原文標題:日常 - I2C VIP 配置小問題
文章出處:【微信號:小杜的芯片驗證日記,微信公眾號:小杜的芯片驗證日記】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論