引用:
作者Mr. RC
我想他的意思會不會是用輪詢的方式來看已知裝置是否存在,然後如果發生打架時(2 master in a I2c bus)就會發現異常。畢竟slave device要送資料給master端時,一定要先有master的指令。
換到目前懷疑的晶片來說,如果他是slave device, master端沒送指令,他只會乖乖地待在那。而或如果他是master, 那就更好笑了...他要送給誰? 而且兩個master不符規範。
|
1. 其實寫code, 認真點你就會想去考慮multi master的狀況(所以repeated start的應用現在比較主流, 因為可以佔據住bus, 避免其他裝置占用)
2. 考慮multi master的時候, 你就會想知道是否可以偵測系統上是否存在"別的"住客, 這時候招數就很多了
3. Multi master是符合規範的作法, 有興趣可以找找TI 和STM的文件(但是我知道不少工程師根本忘記這回事......)
4. 實際上的應用來說, multi master的狀況下, 有可能有晶片同時是master又是slave的, 這時候寫起來會很精彩(建議要搞硬體化啦, 不然光是一些異常判斷就要消耗掉很高的cycle數, 有機會會造成部分特別是台灣廠商的晶片異常)
附帶一提的是, 如果是multi master和非multi master的晶片一起運作, 有機會導致Bus Hang, 這時候你只好用GPIO模式敲到系統有回應為止, 這也是很有趣的除錯經驗
--
不過, 還是那句, 這種大小的晶片, 考慮到封裝的話, 這連I2C加暫存器都放不進, 考慮CSP封裝還比較有搞頭
另外, 大多數的使用者現在都不寫這種低階的protocol了, 都靠原廠給的BSP layer或是library, 殊不知這還更有機會埋東西進去 (實際上我是沒看過有埋的啦, 但倒有看過不少廠商寫的I2C或是SPI實際上不符合規範, 根本沒處理error handling以至於系統容易當掉)