看板 LinuxDev 關於我們 聯絡資訊
假設有兩個行程都不斷存取兩個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
shaopin:不要兩個process, 合為一個process去讀ㄋ? 09/15 10:39
sceneryview:spin lock沒寫好 ?! 09/15 23:31
elpam:感覺應該是hw 的題吧~~有羅輯分析儀會好點 09/16 10:36
elpam:想辦法確認一下register address沒有衝到先~ 09/16 10:36
WPC001:i2c確定沒衝到...但process部分沒辦法,一定會有多個proc搶 09/16 23:04
WPC001:底層driver試著加入dbg info, 發現read_byte經常回傳<0的值 09/16 23:05
saxontai:driver有針對Arbitration作處理?所有傳輸中該回應該處理 09/17 01:13
saxontai:的ACK都有做?以上皆是的話拿示波器勾勾看是怎麼回事吧。 09/17 01:14
WPC001:i2c io的部分, 應該是直接套用samsung s3c的driver 09/18 06:24
WPC001:追了一下source, 裏頭應該有spin lock 09/18 06:25
WPC001:然後大概是透過gpio去實作i2c, ack應該也都正常 09/18 06:25
TroyLee:用gpio實做? s3c 本身應該有硬體 i2c 吧 09/18 11:19
chris234:是用軟體透過GPIO產生波形嗎? 還是i2c跟GPIO mux在一起? 09/19 11:50
WPC001:samsung的那兩根pin, 是gpio, 但被driver組態成i2c了... 09/25 21:59
milochen:請問你是依據 I2C Bus Protocol 寫這兩隻driver嗎 ? 09/26 23:27
WPC001:I2C的protocol是由s3c本身的driver完成的 09/27 21:24
WPC001:這兩個driver, 僅是與其他i2c chip drv一樣,註冊i2c device 09/27 21:25
milochen:我覺得 elpam 大的建議很好,可以試試,先確認問題在那邊 10/02 19:41
WPC001:目前改用另外一個thread然後配合caching pattern解決了 10/06 00:15