Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
版主
|
1. 以Microchip的24LC16為例,最快的SCL 頻率為400KH所以使用時I2C的Bus 速率不可超過。
2. Acknowledge bit(ACK)一定要檢查,有很的人是不檢查ACK位元就直接進入下一步驟這是很危險的,ACK的回應代表剛才那筆資料是否正確被收到,如果ACK的回應為1的話就代表先前的資料接收有誤,你必須重新下Restart訊號重投再來。 3. 就一般24系列的EEPROM而言,它大約需4~6mS (最長到10mS)的寫入時間,這時去檢查ACK位元會為1, 代表EEPROM正在忙碌狀態,很多人在寫24系列時(93需check Busy)只用Dealy的方式而忽略應該用polling ACK位元的重要性,這種用Delay的方式有時會因IC的不同而發生有些批號的IC會工作,有些則無法正常工作。 切記!ACK一定要Check.....
發表於: 2004/5/19 12:09
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
版主
|
我的經驗是:不管先前有沒有對EEPROM下過任何指令,反正不管是READ DATA或WRITE DATA的指令,指令第一個BYTE一定是BIT0=0(要先給EEPROM ADDRESS),即是一種形式的WRITE。之後,就要去POLLING ACK。若沒收到ACK,就重送START,再下第一個BYTE (WRITE ADDRESS),一直重覆直到收到ACK為止,再接下去下後面的指令。我用這種方式,存取24LC256,一直很順利。
另外,POWER ON之後,不要太快下指令,否則第一次會收不到ACK。
發表於: 2004/5/19 12:57
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
初級會員
|
其實我本身對這個問題是問過許多位的前輩!我想該注意的地方有前輩說的很清楚了,另一個他們沒說的重點是在eeprom的address 0x00這一個位置不要用!因為這一個位置的資料很容易受到雜訊的干擾!很多人的習慣是0x00-0x0f都不用。另外資料存取的速度我想只要你有判斷ack的訊號是都還好......
以上為小弟拙見,如有謬誤還請大大給予指正!謝謝
發表於: 2004/5/19 21:25
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
新會員
|
請問ACK 與 NO ACK 要如何去判別... pic 新手 --------------------------------------------------- 16c54 ctrl 24lc02 正在研讀如何控制 ---------------------------------------------------
發表於: 2004/5/21 10:22
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
版主
|
參照:
當一個byte由傳送方傳給接收方的時候,當那個byte傳完時,在其後緊接著的那一個clock,即為第9個clock時,傳送方的data線上會「傳」高位元(電位)的資料。如果接收方有將該位元拉為低位元(電位),那就表示接收方回了一個ACK;否則就表示回了一個NACK。為什麼將「傳」用引號括起來呢?這是因為其實I2C的CLOCK及DATA線具有所謂的OPEN COLLECTOR的特性;傳高位元,其實就等於沒傳資料,藉以判斷有沒有人將DATA線拉LOW (ACK)。
發表於: 2004/5/24 10:28
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
版主
|
在 Microchip 台灣網站 http://www.microchip.com.tw/example.htm
中的程式編號12 及 12-1 就有範例可供參考,這是使用硬體的 I2C 存取方式。 至於 Microchip 美國所提供的 I2C 應用範例可參考以下之網址 http://www.microchip.com/stellent/idc ... &nodeId=1490&filterID=392 其中AN554 是如何使用軟體的方式來完成 I2C Multi-Master Access. 有興趣的或不妨詳讀相性I2C的功力會大增。 建議如有資料需存在EEPROM最好有check-sum的檢驗機制會比較穩當點。
發表於: 2004/5/24 17:20
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
新會員
|
那傳送方再傳送第9Bit 位High 時,接收方會回應Low...(ACK)
如果沒回應Low的話是不是需要從傳8個bit再繼續Check ACK 是不是這樣子ㄋ??
發表於: 2004/5/25 13:40
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
管理員
|
參照:
是的。但是8個BIT之前還要先傳一次START。如此重覆的動作,就是一般在EEPROM資料手冊中寫的"ACKNOWLEDGE POLLING"。
發表於: 2004/5/25 14:38
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
版主
|
如果在第九個 bit 的 clock 時間(SCL由hi變Lo時)
沒收到 low 的 ACK 回應,就表示Slave端接收資料 有錯,此時可重新送出 Repeat Start 信號後, 重新再傳一次資料
發表於: 2004/5/25 15:56
|
|||
|