Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
版主
|
看別人的程式是一件很辛苦的事,尤其是組合語言。
可不可以請你用數位式波器量SDA & SCL 兩隻腳的波形 一定有錯不然ACK是會從Slave送出來的。
發表於: 2004/5/31 17:55
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
新會員
|
請問我在傳完8個bit(start+slaveraddress)之後再check
ACK結果都處在1的狀態,試了很多次都是這樣子,請問婐的程式哪裡出錯ㄌㄋ? ;-------------------------- BSF PA,SDA NOP NOP BSF PA,SCL NOP NOP BCF PA,SCL NOP NOP BCF PA,SDA ;START BIT ;--------------------------- MOVLW 07H MOVWF N_DATA RUN_LOOP BTFSS TEMP_DATA,6 GOTO BITLOW BSF PA,SDA NOP BSF PA,SCL NOP NOP NOP BCF PA,SCL NOP RLF TEMP_DATA,F DECFSZ N_DATA,F GOTO RUN_LOOP RETLW 0 BITLOW BCF PA,SDA NOP BSF PA,SCL NOP NOP BCF PA,SCL NOP RLF TEMP_DATA,F DECFSZ N_DATA,F GOTO RUN_LOOP RETLW 0 ;---------------------------- ACK MOVLW 0000B ; TRIS PA BSF PA,SDA MOVLW 0001B ; TRIS PA NOP NOP NOP BTFSC PA,SDA GOTO ERROR_BIT MOVLW 0000B ; TRIS PA RETLW 0 ;***************** ERROR_BIT ;CHECK PROGRAM ERROR BIT ********(NG)********* NOP NOP NOP GOTO ERROR_BIT ;----------------------------
發表於: 2004/5/27 15:49
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
初級會員
|
在判斷是不是有ack訊號的時候,最好能設一個最大的時間!不然....當eeprom出問題的時候就等於當機了!對了忘記說了如果是我在寫的時候,我一定是把所以的中斷關掉,也就是那一個時間只寫入eeprom不做其它的事!我試起來感覺這會會比較穩定啦!當然這也還是小弟的拙見!如有謬誤尚請指正,謝謝
發表於: 2004/5/25 16:23
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
版主
|
如果在第九個 bit 的 clock 時間(SCL由hi變Lo時)
沒收到 low 的 ACK 回應,就表示Slave端接收資料 有錯,此時可重新送出 Repeat Start 信號後, 重新再傳一次資料
發表於: 2004/5/25 15:56
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
管理員
|
參照:
是的。但是8個BIT之前還要先傳一次START。如此重覆的動作,就是一般在EEPROM資料手冊中寫的"ACKNOWLEDGE POLLING"。
發表於: 2004/5/25 14:38
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
新會員
|
那傳送方再傳送第9Bit 位High 時,接收方會回應Low...(ACK)
如果沒回應Low的話是不是需要從傳8個bit再繼續Check ACK 是不是這樣子ㄋ??
發表於: 2004/5/25 13:40
|
|||
|
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需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
版主
|
參照:
當一個byte由傳送方傳給接收方的時候,當那個byte傳完時,在其後緊接著的那一個clock,即為第9個clock時,傳送方的data線上會「傳」高位元(電位)的資料。如果接收方有將該位元拉為低位元(電位),那就表示接收方回了一個ACK;否則就表示回了一個NACK。為什麼將「傳」用引號括起來呢?這是因為其實I2C的CLOCK及DATA線具有所謂的OPEN COLLECTOR的特性;傳高位元,其實就等於沒傳資料,藉以判斷有沒有人將DATA線拉LOW (ACK)。
發表於: 2004/5/24 10:28
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
新會員
|
請問ACK 與 NO ACK 要如何去判別... pic 新手 --------------------------------------------------- 16c54 ctrl 24lc02 正在研讀如何控制 ---------------------------------------------------
發表於: 2004/5/21 10:22
|
|||
|