[問題] 兩個不同的I2C Chip 搶佔Bus 資源

看板LinuxDev作者 (突然覺得自己是孤獨的...)時間15年前 (2010/09/15 00:20), 編輯推噓6(6013)
留言19則, 8人參與, 最新討論串1/1
假設有兩個行程都不斷存取兩個i2c driver 但真實的i2c bus就只有一個, 也就是第一個driver在存取i2c slave devices時 第二個driver一定是無法存取的 (應該是有spin lock) 但我的疑問是來自於, 這兩個driver似乎常常打架, 協調的很差 i2c_smbus_read_byte_data時常傳回<0的錯誤值 雖然我可以藉由判別傳回值, 來確保資料正確 但實測的結果是, 讀取速率慢非常非常多(時常在打架) 原本兩個driver在讀取時, delay各為20ms (也就是每秒約有50筆資料輸出) 現在變成每秒2~3筆資料輸出 (非常容易碰撞), 想請問有甚麼好的解法 (兩個driver都是自己寫的) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.54.146

09/15 10:39, , 1F
不要兩個process, 合為一個process去讀ㄋ?
09/15 10:39, 1F

09/15 23:31, , 2F
spin lock沒寫好 ?!
09/15 23:31, 2F

09/16 10:36, , 3F
感覺應該是hw 的題吧~~有羅輯分析儀會好點
09/16 10:36, 3F

09/16 10:36, , 4F
想辦法確認一下register address沒有衝到先~
09/16 10:36, 4F

09/16 23:04, , 5F
i2c確定沒衝到...但process部分沒辦法,一定會有多個proc搶
09/16 23:04, 5F

09/16 23:05, , 6F
底層driver試著加入dbg info, 發現read_byte經常回傳<0的值
09/16 23:05, 6F

09/17 01:13, , 7F
driver有針對Arbitration作處理?所有傳輸中該回應該處理
09/17 01:13, 7F

09/17 01:14, , 8F
的ACK都有做?以上皆是的話拿示波器勾勾看是怎麼回事吧。
09/17 01:14, 8F

09/18 06:24, , 9F
i2c io的部分, 應該是直接套用samsung s3c的driver
09/18 06:24, 9F

09/18 06:25, , 10F
追了一下source, 裏頭應該有spin lock
09/18 06:25, 10F

09/18 06:25, , 11F
然後大概是透過gpio去實作i2c, ack應該也都正常
09/18 06:25, 11F

09/18 11:19, , 12F
用gpio實做? s3c 本身應該有硬體 i2c 吧
09/18 11:19, 12F

09/19 11:50, , 13F
是用軟體透過GPIO產生波形嗎? 還是i2c跟GPIO mux在一起?
09/19 11:50, 13F

09/25 21:59, , 14F
samsung的那兩根pin, 是gpio, 但被driver組態成i2c了...
09/25 21:59, 14F

09/26 23:27, , 15F
請問你是依據 I2C Bus Protocol 寫這兩隻driver嗎 ?
09/26 23:27, 15F

09/27 21:24, , 16F
I2C的protocol是由s3c本身的driver完成的
09/27 21:24, 16F

09/27 21:25, , 17F
這兩個driver, 僅是與其他i2c chip drv一樣,註冊i2c device
09/27 21:25, 17F

10/02 19:41, , 18F
我覺得 elpam 大的建議很好,可以試試,先確認問題在那邊
10/02 19:41, 18F

10/06 00:15, , 19F
目前改用另外一個thread然後配合caching pattern解決了
10/06 00:15, 19F
文章代碼(AID): #1CZw35P1 (LinuxDev)