|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教AT24C02的寫入問題 |
| 作者:白眼狼 欄目:單片機(jī) |
我的AT24C02的程序可以正常讀,但是每次寫都是寫了FFH進(jìn)去(實(shí)際上我控制寫入的并不是FFH)。我想啊,既然能夠正常讀,說明主MCU應(yīng)該是正?刂艭02的,因?yàn)樵谧x的過程中也需要向C02發(fā)送命令啊,既然這些都正常,說明MCU向C02發(fā)送字節(jié)的程序是沒有問題的啊,可是為什么寫進(jìn)去的東西都變成FFH了呢?(我有燒片器,所以可以分開調(diào)試讀寫功能)。 |
| 2樓: | >>參與討論 |
| 作者: zhouss 于 2005/5/13 9:32:00 發(fā)布:
很簡單,沒有寫入,芯片本來的數(shù)據(jù)就是FFH,程序問題 |
|
| 3樓: | >>參與討論 |
| 作者: 白眼狼 于 2005/5/13 10:23:00 發(fā)布:
確定寫入了(有內(nèi)容) 我有燒片器,先用燒片器寫入了不是FFH的數(shù)據(jù),然后再執(zhí)行我的寫程序,然后用燒片器讀出內(nèi)容,我寫的存儲(chǔ)單元就變成FFH了,沒寫的地方就還是沒變。 我想也應(yīng)該是程序問題,可是MCU向24C02發(fā)送字節(jié)的程序應(yīng)該沒錯(cuò)啊,如果要錯(cuò)的話,我的讀程序也不應(yīng)該正常。到底有可能在哪方面出問題呢? |
|
| 4樓: | >>參與討論 |
| 作者: WU1980 于 2005/5/13 10:37:00 發(fā)布:
656 可以把你的chengxu貼出來嗎? |
|
| 5樓: | >>參與討論 |
| 作者: eleven11 于 2005/5/13 10:43:00 發(fā)布:
應(yīng)該是程序問題 把你的chengxu貼出來嗎 |
|
| 6樓: | >>參與討論 |
| 作者: xin___xin 于 2005/5/13 10:43:00 發(fā)布:
把你的“寫”程序貼出來看看 |
|
| 7樓: | >>參與討論 |
| 作者: roon2001 于 2005/5/13 12:15:00 發(fā)布:
注意延時(shí) EEPROM寫的時(shí)候很慢,注意在寫入時(shí)應(yīng)當(dāng)適當(dāng)延時(shí)。 |
|
| 8樓: | >>參與討論 |
| 作者: lmp 于 2005/5/13 12:37:00 發(fā)布:
用93C46代替試一下, 和24C02功能一樣但更皮實(shí), |
|
| 9樓: | >>參與討論 |
| 作者: cxd731 于 2005/5/13 12:40:00 發(fā)布:
也有可能是硬件問題 你24C02的寫保護(hù)腳(WP)確定接地了嗎 |
|
| 10樓: | >>參與討論 |
| 作者: 白眼狼 于 2005/5/13 13:27:00 發(fā)布:
24C02讀寫程序 WP沒有接地,默認(rèn)時(shí)控制為高,寫時(shí)控制為低。 現(xiàn)將程序貼出,請看看為什么總是寫入FFH。 在初始化的時(shí)候(另外一個(gè)文件)還有兩句話:JSR ClrI2CClk; JSR SetI2CWP 外部主要調(diào)用I2CTxStr和I2CRxStr這兩個(gè)函數(shù)。 I2CTxByteBeforeRx: JSR I2CDelay LDA R_BitStatus ORA #BIT0 JMP I2CTxByteIn I2CTxByte: ;input: r1=translated byte ;OUTPUT: A=0:error; A=1:success ;effect: r1-r2,X LDA R_BitStatus AND #BIT0_ I2CTxByteIn: STA R_BitStatus LDX #08H I2CTxByte0: LDA #80H BIT R1 BEQ I2CTxByteLo I2CTxByteHi: JSR SetI2CDat JMP I2CTxByte_ I2CTxByteLo: JSR ClrI2CDat I2CTxByte_: JSR I2CDelay JSR SetI2CClk JSR I2CDelay ASL R1 JSR ClrI2CClk JSR I2CDelay JSR I2CDelay DEX BNE I2CTxByte0 I2CTxByteAck: JSR SetI2CDat NOP NOP JSR I2CDatDirIn JSR I2CDelay LDA PIOS STA R2 LDA #C_C02DatBit BIT R2 BNE I2CTxByteErr I2CTxByteOk: LDA #BIT0 BIT R_BitStatus BNE I2CTxByteOk_ JSR I2CDatDirOut I2CTxByteOk_: JSR SetI2CClk ;Clk=1 JSR I2CDelay JSR ClrI2CClk ;Clk=0 JSR I2CDelay LDA #C_OK RTS I2CTxByteErr: JSR I2CDatDirOut JSR SetI2CClk ;Clk=1 JSR I2CDelay JSR ClrI2CClk ;Clk=0 JSR I2CDelay LDA #C_ERROR RTS I2CRxByte: ;input: none ;OUTPUT: r1=received byte ;effect: r1-r2,X LDX #08H LDA #00H STA R1 I2CRxByte0: ASL R1 LDA PIOS STA R2 LDA #C_C02DatBit BIT R2 BEQ I2CRxByte_ INC R1 I2CRxByte_: JSR SetI2CClk ; Clk=1 JSR I2CDelay JSR ClrI2CClk ; Clk=0 JSR I2CDelay DEX BNE I2CRxByte0 RTS ;;;;;;;;Write a string to 24C02 I2CTxStr: ;input: r4:C02_Addr; r5-C02Buf offset; r6-Length ;OUTPUT: A=0:error; A=1:success ; r4-r6 don't changed ;effect: r1-r3,X,Y JSR ClrI2CWP JSR I2CStart LDA #A0H ;write mesage STA R1 JSR I2CTxByte CMP #00H BEQ I2CTxStrErr LDA R4 STA R1 ;C02_Addr JSR I2CTxByte CMP #C_ERROR BEQ I2CTxStrErr I2CTxStr1: ;Write data LDA R6 ;Length STA R3 LDY R5 ;offset I2CTxStr10: LDA R_I2CBuf,Y STA R1 JSR I2CTxByte CMP #C_ERROR BEQ I2CTxStrErr INY DEC R3 BNE I2CTxStr10 JSR I2CStop & |
|
| 11樓: | >>參與討論 |
| 作者: cxd731 于 2005/5/13 13:36:00 發(fā)布:
我暈 如果你把WP接成高電平,那你寫一輩子也寫不進(jìn)去! 老兄,你就拿起烙鐵把它接至GND試試看吧 |
|
| 12樓: | >>參與討論 |
| 作者: 白眼狼 于 2005/5/13 18:09:00 發(fā)布:
24C02的寫保護(hù)到底是什么意思? 把寫保護(hù)直接接地就一切正常了,那么這個(gè)寫保護(hù)到底起什么作用? |
|
| 13樓: | >>參與討論 |
| 作者: qjy_dali 于 2005/5/14 2:02:00 發(fā)布:
寫保護(hù)當(dāng)然是只讓你讀不讓你寫啊 不過匯編的程序看起來真是累! |
|
| 14樓: | >>參與討論 |
| 作者: cxd731 于 2005/5/14 11:13:00 發(fā)布:
to:白眼狼 這是24C02的SPEC上的一段話,仔細(xì)看看: WRITE PROTECT(WP):The write protect input,when connected to GND,allows normal write operations.When WP is connected to VCC,all write operations to the MEMORY are inhibited. 友情提醒:看樣子樓主是寫軟件出生,出了問題第一反應(yīng)就是程序錯(cuò)了,然后就把代碼帖出來讓別人分析;但做我們這一行的,就算你軟件寫得再牛,如果不了解硬件,基本屬于不稱職的軟件工程師(也許我的詞鋒有點(diǎn)犀利,那就得罪了);所以,我還是比較相信我以前那家公司的一個(gè)臺(tái)灣人說的話:在這個(gè)行業(yè)里(電子行業(yè)),沒有真正的SOFTWARE ENGINEER,只有firmware ENGINEER! |
|
| 15樓: | >>參與討論 |
| 作者: 白眼狼 于 2005/5/14 15:41:00 發(fā)布:
說得對 cxd說得對,搞我們這行的,必須要軟硬兼施。 通過試驗(yàn),WP腳通過一個(gè)上拉電阻接VCC還是起不了保護(hù)作用,仍然可以正常讀寫。我正在嘗試如何讓MCU來控制WP,可以在程序運(yùn)行期間控制WP的寫保護(hù)和正常讀寫,如果有此經(jīng)驗(yàn)的請告知您的做法,謝謝! |
|
| 16樓: | >>參與討論 |
| 作者: cxd731 于 2005/5/14 15:52:00 發(fā)布:
我不明白您為什么一定要用MCU來控制WP 只要將WP接地,一切功能就會(huì)正常;I2C首先傳送的器件地址,所以你不用擔(dān)心你在寫別的器件時(shí)會(huì)干擾24C02。 我是從來沒有用MCU來控制過WP,我想大部分人應(yīng)該也不會(huì)這樣做;不過你的想法到是很有創(chuàng)意,如果有什么新的發(fā)現(xiàn),帖上來讓大家共享你的成果 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |