簡單的i2c協議理解:
一、技術效能
工作速率有100k和400k兩種;
支援多機通訊;
支援多主控模組,但同一時刻只充許有乙個主控;
由資料線sda和時鐘scl構成的序列匯流排;
每個電路和模組都有唯一的位址;
每個器件可以使用獨立電源;
二、基本工作原理
以啟動訊號start來掌管匯流排;以停止訊號stop來釋放匯流排;每次通訊以start開始,以stop結束,啟動訊號start後緊接著傳送乙個位址位元組,基中7位為被控器件的位址碼。一位為讀寫控制位r/w,r/w位為0表示由主控向被控器件寫資料,r/w為1表示由主控從被控器件讀資料。當被控器件檢測到收到的位址與自已的位址相同時,在第9個時鐘期間反饋應答訊號;每個資料位元組在傳送時都是高位(msb)在前。
三、通訊過程
寫通訊過程:
1、主控在檢測到匯流排空閒的狀況下,首先傳送乙個start訊號掌管匯流排。
2、傳送乙個位址位元組(包括7位位址碼和1位r/w)。
3、當被控器件檢測到主控傳送的位址與自已的位址相同時傳送乙個應答訊號(ack)。
4、主控收到ack後開始傳送第乙個資料位元組。
5、被控器件收到資料位元組後傳送乙個ack表示傳送資料結束。
6、主控傳送完全部資料後,傳送乙個停止位stop,結束整個通訊並且釋放匯流排。
讀通訊過程:
1、主控在檢測到匯流排空閒的狀況下,首先傳送乙個start訊號掌管匯流排。
2、傳送乙個位址位元組(包括7位位址和1位r/w)。
3、當被控器件檢測到主控傳送的位址與自已的位址相同時傳送乙個應答訊號(ack)。
4、主控收到ack後釋放資料匯流排,開始接收第乙個資料位元組。
5、主控收到資料後傳送ack表示繼續傳送資料,傳送nack表示傳送資料結束。
6、主控收到資料後,傳送乙個停止位stop,結束整個通訊並且釋放匯流排。
四、匯流排訊號時序分析
1、匯流排空閒狀態
sda和scl兩條訊號線都處於高電平,即匯流排上所有器件都釋放匯流排,兩條訊號線各自的上拉電阻把電平拉高。
2、啟動訊號start
時鐘訊號scl保持高電平,資料訊號sda的電平被拉低(即負跳變)。啟動訊號必須是跳變訊號,而且在建立該訊號前必需保證匯流排處於空閒狀態。
3、停止訊號stop
時鐘訊號scl保持高電平,資料線被釋放,使得sda返回高電平(即正跳變)停止訊號也必須是跳變訊號。
4、資料傳送
scl線呈現高電平期間,sda線上的電平必須保持穩定,低電平表示0(此時的線電壓為地電壓),高電平表示1(此時的電壓由元器件的vdd決定),只有在scl線為低電平期間,sda上的電平允許變化。
5、應答訊號ack
i2c匯流排的資料都是以位元組(8位)的方式傳送的,傳送器件上每傳送乙個位元組之後,在時鐘的第9個脈衝期間釋放資料線,由接收器傳送乙個ack(把資料匯流排的電平接低)來表示資料成功接收。
6、無應答訊號nack
在時鐘的第9個脈衝期間傳送器釋放資料匯流排,接收器不拉低資料匯流排表示乙個nakc,nack有兩種用途:
a:一般表示接收器未成功接收資料位元組;
b:當接收器是主控時,它收到最後乙個位元組後,應傳送乙個nack訊號,以通知被控傳送器結束資料傳送,並釋放匯流排,以便主控接收器傳送乙個停止訊號stop。
五、定址約定
1、含cpu的智慧型器件,位址由軟體初始化時定義,但不能與其他的器件有衝突。
2、不含cpu的非智慧型器件,同廠家在器件的內部固化,不可改變。
1、高4位屬於固定位址不可改變,由廠家固化的統一位址。
2、低三位為引腳設定位址,可以由外部引腳設定位址,可以由外部引腳來設定(並非所有器件都可以設定)。
工作三個月有感
工作三個月有感 cywater2000 日期 2007 10 4 明天工作就滿三個月了,決定寫下點東西以作紀念。其實最初我是打算工作一周寫點東西的,不過因為懶就算了。另外,一周時間太短,沒有多少發言權。四月份隻身前往上海找工作現在來看應該是正確的。如果當時我安於現狀,我的人生肯定將會不同 當然不知道...
三個月的總結
進入新專案的三個月這麼快,乙個月學習了核心相關知識,第二個月淨測試了,第三個月看原始碼了。這三個月感覺知識像是填鴨似的,我自己都還麼消化完,不過也沒有辦法,大哥們都要撤了,一大堆事情突然讓我來弄,太不適應的。可能自己以前都是過的逍遙慣了,喜歡和大家嘻嘻哈哈的過。反正我知道不幹是不行了,只好硬著頭皮來...
工作三個月心得經驗
第乙份工作 2013年9月16日入職廈門某國企,該企業主要是做國家電網的乙個專案。因為是第一次上班,之前並沒有參加實習。所以初來乍到,對公司的執行很不了解。比如公司有哪些部門,各個部門的職責是什麼,各個部門怎麼協調工作!後來才了解到公司的結構,有市場部 銷售部 運維部 資料中心 測試組 研發部等等。...