引用:
作者Mr. RC
那個....可以先問一下哪顆IC I2C可以同時當master or slave? 方便給料號參考一下嗎? 我只看過HW strap pin選擇interface為mater or slave, 還沒看過可以動態切換的。就算可以動態切換,是用什麼interface去acess register? 還是用GPIO + reset來做到選擇?
I2C multi master其實只是用法的問題,因為slave device只會收他自己address的資料,加上有開始、結束位元,所以可以判定一個master的行為是否結束。而在這之後由另一個master開始動作。簡單的說,可以利用時序來避開兩個master同時動作的狀況。這是你說的避開access collision做法嗎?
Multi master理論上看起來用法很簡單,但實際的系統面我自己的經驗來看,並沒有想像中那麼好達到。
現在系統例如sensor與driver偵測行為無時無刻都在動作,I2C上master一直在戳slave看slave狀態,這種狀態下就不適合。比較多的作法就是利用多組I2C bus去達到所要...
|
1. multi master的裝置通常是一堆MCU群組比較常見, 你可以看看MSP430F5529的programming guide會有比較詳細的描述(也有實作硬體), 會搞I2C master而且可擴展的, 老實說, 除了CPLD和FPGA以外, 也只剩下MCU了, 所以MCU是這類搞法的大宗(STM和Ambicom最近都有滿省電的東西出現, 特別是STM的U系列)
2. 時序上根本無法避開, 只能夠承受碰撞以後, 決定優先權, 可以reference to 上面那個文件, 關鍵字是Arbitration, 通常自己寫的code會"禮讓"其他產生衝撞的方式, 你應該要假定其他裝置不會對衝撞產生反應(所以這時候要順便利用time out機制, 看看clock stretch多久以後你應該去當救世主release這個bus)
3. 還是那句, 看了datasheet並理解你就會知道該怎麼幹, 經常翻翻.h檔裡面有描述但是datasheet裡面根本沒提到的register也會對你有幫助
只要你會Arbitration, 基本上, Multi Master也不是太大的問題
但是現實層面來說, 台灣會搞Multi Master而且搞得正常的工程師, 我在業界數不到十個, 因為大多數都是直接撈人家寫好的來用
關於bus reset, 可以找找Analog device的文件
會有Multi Master通常就表示你的系統可能是個小型可擴展的系統, 所以A和B系統間傳輸可能會共用到這個multi master的架構
會搞到這程度, 軟體工程師是幹不來的, 通常是有硬體底子的軟體工程師, 或著是硬體工程師兼職軟體才會想到這招
這搞法可以有效節省系統的電力並減少wake up time, 但也同時需要硬體和軟體的搭配
誰搞過? HP某些不太正常用途機器有(不能說project name), Lenovo也有