最近使用S家的I2C VIP驗證芯片的外圍I2C、SMBus總線,作為同樣由SCL和SDA兩根線支撐起的串行總線,協(xié)議相似,因此該I2C VIP也可以配置成SMBus總線使用。只需要更改其最上層的configuration即可,這一點User Guide寫的很清楚,很方便。
具體到SMBus模式的使用場景,我需要在發(fā)送完一筆數(shù)據(jù)后,修改數(shù)據(jù)中的command值,即第一筆數(shù)據(jù)和第二筆數(shù)據(jù)使用的command相同,但需要修改command對應(yīng)的值。該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]);
但遇到了問題,數(shù)據(jù)包發(fā)送不完,仿真會掛死在某個地方,波形上也會變成一條直線,但run.log暗示數(shù)據(jù)的確是產(chǎn)生了。隨后,根據(jù)VIP提供的另一個示例,嘗試在調(diào)用完reconfigure_via_task( )后,通過調(diào)用start( )的方式重新啟動sequence,但情況沒有發(fā)生改變。至此,基本定位到了問題出在調(diào)用reconfigure_via_task( )這行代碼上。
重新看run.log,發(fā)現(xiàn)調(diào)用完該task后,VIP的master_agent[0]會被重新配置成默認標準的I2C模式上,這樣問題就合理了,I2C standard模式的確發(fā)不了SMBus fast模式的數(shù)據(jù),這也證實了run.log中現(xiàn)實數(shù)據(jù)產(chǎn)生了,但總線上沒有數(shù)據(jù)的情況。
因此,解決的辦法也很簡單,在調(diào)用reconfigure_via_task( )之前,將SMBus相關(guān)的配置重新配置上即可。

run.log中藏著debug的信息,在出現(xiàn)bug時一定要仔細閱讀run.log,經(jīng)驗+1。
這個問題也和config_db跨層傳參失誤有關(guān),后面再寫~
審核編輯:劉清
-
芯片
+關(guān)注
關(guān)注
462文章
53290瀏覽量
455748 -
I2C總線
+關(guān)注
關(guān)注
8文章
410瀏覽量
62893 -
SMBus
+關(guān)注
關(guān)注
1文章
128瀏覽量
22955 -
SCL
+關(guān)注
關(guān)注
1文章
244瀏覽量
17878
原文標題:日常 - I2C VIP 配置小問題
文章出處:【微信號:小杜的芯片驗證日記,微信公眾號:小杜的芯片驗證日記】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
深入剖析I2C協(xié)議
第十六章 一文淺談I2C
I2C總線通信原理 如何設(shè)計I2C總線電路
I2C總線的優(yōu)缺點分析
I2C總線與Arduino的接口示例
I2C總線的工作模式介紹
I2C總線協(xié)議詳細解析
I2C總線與單片機的連接
I2C總線設(shè)備地址設(shè)置方法
I2C總線應(yīng)用實例分析
I2C總線與SPI總線的比較
I2C總線上拉電阻阻值如何確定?

記錄一下使用I2C VIP驗證芯片的一個bug
評論