→ proach:SPI跟I2C不一樣,不能拿來類比吧 06/19 12:49
→ WolfLord:你用push-pull作IO的話你會不知道衝撞也比較容易miss ACK 06/19 13:57
推 ruemann:二樓專業 06/19 21:22
→ ksmrt0123:input時先pull-high然後馬上open-drain試看看 06/19 23:47
→ Jhih8051:想請問二樓所說的那個現象是怎麼回事呢? 06/20 00:10
→ m490521:I2C是可以支援多重M&S的,當其中有一組在佔住bus的時候 06/20 09:38
→ m490521:你必須要先看一下Bus線上是否空的 06/20 09:39
→ m490521:如果用push-pull就看不到了 06/20 09:41
謝謝各位前輩 小弟修正一下處理的方式
*****************
1 Master & 1 slave
若以M端去寫入S端
*****************
1.SCK&SDA為 open drain
(開始傳送)
2.SDA在8th CLK前為push pull 9th CLK時為open drain 用以確ACK
3.SCK在9th CLK前為push pull 10th CLK時轉為open drain
這邊想請教是先進入10th CLK再轉態open drain
還是先轉態為open drain 再進入10th CLK比較OK?
4.SCK=1;
5.while(!CLK); // CLK Sync
以上是以Master 端來輸出CLK的想法
如果今天是由slave 端來輸出CLK 那我就沒輒了@@"
※ 編輯: Deltaguita 來自: 60.251.222.115 (06/20 14:12)
※ 編輯: Deltaguita 來自: 60.251.222.115 (06/20 14:13)
※ 編輯: Deltaguita 來自: 60.251.222.115 (06/20 14:16)
→ jheli:想請教一下... Master端push pull高電位時,如果剛好Slave端 06/20 21:31
→ jheli:open drain拉low,這樣Slave不會燒電路嗎? 06/20 21:32
→ jheli:不好意思,我不是很了解,能不能請高手幫忙解惑一下@@? 06/20 21:33
→ kikiqqp:不會,只是耗電。另外SPI中slave不輸出CLK 06/21 00:05
→ kikiqqp:這邊SPI指的是 SCK(CLK) SDO(MISO) SDI(MOSI) CS(SS) 06/21 00:09
→ m490521:不論是SPI或是I2C,都是由M來輸出CLK 06/21 10:01
→ m490521:1~8CLK是Data,9是ack,10CLK是指?下一筆資料? 06/21 10:06
→ m490521:這顆看來是有硬體I2C的,是純粹想練功嘛? 06/21 10:06
→ m490521:『當SCL在Hi時,SDA才有意義』,SCL為Low時,是拿來給Reload 06/21 10:12
→ m490521:Data用的 06/21 10:12
報告前輩:
說練功也不是,因為小弟想靠軟體達成我要的功能,這樣以後轉換其他51BASE平台的時候
可以無痛轉換
10th CLK 這邊我有點說錯了 是在9th~10th 之間會有一個CLK sync
這邊我有一點搞不清楚是Slave把SDA 拉為LOW 還是單純Master等待而已?
假設今天I2C是由Slave端去觸發Master,也是由Master端送出CLK嗎?
※ 編輯: Deltaguita 來自: 60.251.222.115 (06/21 14:42)
※ 編輯: Deltaguita 來自: 60.251.222.115 (06/21 14:55)
→ m490521:通常Slave端,不會主動發送ST訊號,(但不代表不可以) 06/21 16:14
→ m490521:但是就算觸發了,Master也不知道是誰觸發的 (沒Slave的id) 06/21 16:16
→ m490521:當Slave跟不上Master的速度時,可以將scl拉至Low 06/21 16:22
→ m490521:叫master暫停一下 06/21 16:23
→ m490521:當slave放開(回復至hi),master就可以繼續往下送 06/21 16:24
→ m490521:SPEC是這樣寫,但是實做又不太一樣了,大多數都不會這樣搞 06/21 16:32
→ m490521:你的sck跟clk是同一隻嘛? 06/21 16:44
→ m490521:有沒有圖可以看一下? 06/21 16:51
TO前輩:
所以說我可以不用去管SYNC 直接硬幹Slave端嗎?
我的SPI 跟I2C I/O是分開的
因為OrCAD很貴 目前還沒有畫電路圖XD
※ 編輯: Deltaguita 來自: 60.251.222.115 (06/21 17:30)
→ kikiqqp:提供波型圖和SCH圖吧,這兩種用啥軟體畫都可以 06/21 17:57
→ m490521:波形圖可以用TimeGen畫,有demo版的 06/21 18:21
TO兩位前輩:
我有接電腦的LA可以紀錄波形
這幾天我還在弄一個SPI介面的RF
I2C的部分原廠給的DEMO CODE 要編譯一直都還有問題(太多要定義的沒交代)
可能要等到下禮拜才有半法正式測試
到時候在麻煩你們了Q_Q
※ 編輯: Deltaguita 來自: 60.251.222.115 (06/21 18:30)
→ proach:i2c的規格就是要pull up電阻,你練這個功沒有意義吧 06/22 01:02
→ proach:就算讓你在這邊做出來,也不能保證期它的devices都可用啊 06/22 01:02
→ proach:其他的devices (any masters and any slaves) 06/22 01:03
→ proach:i2c是很基本的東西,如果這個也要參考別人的code 06/22 01:05
→ proach:其實你有很多題目可以練功可以努力吧 :) 加油 06/22 01:05
proach教訓的是
小弟資質不是很好,過去也一直以為用8051做鍵盤一定要用提升電阻
直到看到網路上一些前輩不吝嗇的分享才知道原來鍵盤掃描不需要提升電組也可以
我就是菜逼八才會來這裡問人阿Q_Q
另外CODE的問題 是用來測試一顆設計中的IC
主要是一些define沒有交代清楚
例如說給了一段CODE 其中在程式引用到inline_ptr這個變數7次
可是這個變數並沒有被定義 也沒有任何一段CODE有去給予他初值
結果D house的回覆是:
Search_parameter()以及StrToInt()是用來擷取由Hyper Terminal輸入的參數值
原始的程式是用command shell來操作的
如果貴公司要測試, 直接指定參數值即可
以AP2010_Set_Frame()為例
if( Search_parameter() )
{
Frame = ( unsigned char )StrToInt( inline_ptr );
}
else
{
printf( "\n\rparameter errror!" );
return;
}
原本是用來取得參數Frame
可以直接指定參數 Frame = 0x01;
再由I2C送出
我手上的IC 是下到第2次的板本 每次的版本參數都有點不太一樣
原廠沒說 天知 地知 proach知而已...
※ 編輯: Deltaguita 來自: 114.25.126.198 (06/22 02:59)
→ proach:sorry口氣不好,我沒資格教訓你啊。我是說你用GPIO不掛電阻 06/22 12:53
→ proach:模擬i2c這件事不值得去做,太tricky,省那兩個電阻後系統 06/22 12:54
→ proach:可以保證穩定嗎?i2c register的意義是廠商才知道的 06/22 12:55
→ proach:我不會知道。而操作i2c這件事本身沒什麼難度,不因register 06/22 12:56
→ proach:內容而有難度。 06/22 12:56
謝謝前輩:
雖然我還沒實際RUN過 但是基本的I2C傳輸我想應該沒有問題啦 o.oa
到現在一直都沒有真正有經驗的人可以教我,都要靠自己來摸索,
手頭上又一堆事情
要自己選CHIP 、自己找儀器、自己學各種介面
還要搞IR HDMI-CEC USB
很多東西懵懵懂懂...
所以很容易遇到很多人看起來覺得是很蠢的問題,
如果讓您見笑 真的很不好意思
※ 編輯: Deltaguita 來自: 60.251.222.115 (06/22 16:10)
※ 編輯: Deltaguita 來自: 114.25.126.198 (06/22 22:05)
推 WolfLord:基本上,I2C用電阻Pull Hihg是在做Multi AND Gate,不是 06/25 14:43
→ WolfLord:硬體廠商發明的獨門秘密,這只是一個基本硬體常識而已 06/25 14:44
推 selfhu:I2C在最後一個bit的clk變low前切成OD就可以了,因為slave端 07/01 23:44
→ selfhu:它不知道何時clk會來,所以會在falling後丟出ACK訊號 07/01 23:46
→ Deltaguita:謝謝以上兩位前輩 07/01 23:50
推 selfhu:Pull-high電阻還是要加喔,在OD時會用到 07/02 00:22
對吼 感謝前輩們的提醒!
果然還是得加 因為Slvae 端沒有推挽輸出...
※ 編輯: Deltaguita 來自: 60.251.222.115 (07/12 14:14)