瀏覽單個文章
lifaung
Senior Member
 

加入日期: Aug 2001
您的住址: 台中or桃園
文章: 1,128
引用:
作者NTC_TW_IT
1: 10bit很少見,一般都7bit為主,常見的100HZ來看,只是probe來說,應該一秒上下就可以搞定,所以應該還好吧?
slave address必須是唯一吧?
當預期發生衝突時,一般都是掛i2c expander,然後再由軟體/韌體去切通道不是?
2: 抓很乖的client就沒問題, 死不回你的就兩手一攤了~至於master,沒得玩
3: 運氣阿~基本上i2c又不是多穩定的東西,retry也司空見慣了

不過multi master device跟一個線路上有多個master是兩回事吧?
可以請教有更實際的做法,找出現路上有沒有被偷掛master?
小弟對i2c大概有一點點了解~偏軟體


1. 商用系統至少都得保證要有400KHz的回應速度....有些picky的客戶會挑1MHz, Slave address是否唯一要看情況, 有可能某裝置存在有數個Slave address(但不應該重複, 我也曾經犯蠢搞過重複的狀況, 這時候系統還是可能運作正常, 但是slave裝置的回應可能會很微妙, 畢竟是open drain的架構, ACK照樣會回Orz); 設計者不應該預期他是否會發生衝突, 通常設計的時候就要考慮這問題, 所以error control的手段要準備, I2C expander? 要是有這個功夫, 還不如寫個code切回GPIO模式敲到bus release比較實在
2. 假設你預期你是唯一的master的情況下才能偷聽別的master發起的傳送, 通常這會是保安系統的一部分
3. I2C不穩定你應該回去問你的硬體工程師, 阻抗匹配和上拉電阻電流量有沒有正常; 如果都正常的情況下, 你應該回去看看你的code是不是有問題; 我個人寫的driver會對這些都做handle, 但是實際上, 根據一年多來log住的資訊, 會啟動error handling機制大概在0.1ppm以下的機率(用發起和接收的指令數量來計算, 如果你算的是byte數可能還要低很多)

Multi master就是指你的單條I2C或是SM Bus上存在多個master裝置, 還是那句, 這個是標準規範
只是這些master裝置可能同時也存在有slave 模式

其實這些玩法應該都很"正常", 你看看無線系統的封包碰撞的時候該怎麼處理, I2C就是秉持基本的精神處理就是了(但順序應該倒過來, 因為I2C比起那些WiFi或是BT, Zigbee出現的時間都要早)

被裝了多餘的master的情況下, 你只能"知道"而很難逮到他對應的slave address.....
但是當你知道的時候就應該記錄error log來讓管理者來找問題了
--
基本上, 你需要一個系統RTC, 以及各個master都應該要有自己的mailbox來提供被查詢何時發起甚麼活動的功能
但是基本上你也只能"知道"有異物存在在你的bus上而已
舊 2018-10-18, 02:18 AM #164
回應時引用此文章
lifaung離線中