找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 22424|回復(fù): 15
收起左側(cè)

關(guān)于AT24C02的寫入讀取巨坑

  [復(fù)制鏈接]
ID:365802 發(fā)表于 2019-2-20 08:54 | 顯示全部樓層 |閱讀模式
這兩天在學(xué)習(xí)AT24C02, 晶振11.0592MHz 寫了一段代碼, 首先向24C02 0-15地址寫入0-15, 再讀取出來顯示在1602上, 結(jié)果發(fā)現(xiàn), 奇數(shù)位是正確的, 偶數(shù)位錯(cuò)誤.經(jīng)排查發(fā)現(xiàn)時(shí)寫入錯(cuò)誤, 即本應(yīng)寫入0123456789abcdef, 實(shí)際寫入0520456084ace, 困擾我很久. 今天早上突發(fā)奇想, 是不是寫的太快了, 加延時(shí)試試看.問題解決....
總結(jié):
24C02在逐位寫入數(shù)據(jù)時(shí), 必須加延時(shí), 否則器件處理不過來導(dǎo)致偶數(shù)位寫入失敗. 手頭的這顆料, 需要加1毫秒延時(shí)才能保證寫入正確.
讀取時(shí), 不加延時(shí)也能正確讀取到,(可能器件的讀取速度快), 保險(xiǎn)起見, 建議加上延時(shí).

以此提醒各位在使用AT24C02時(shí)注意寫入延時(shí)的問題.

演示代碼:
  1.         for(i=0; i<16; i++)
  2.         {
  3.                 at2402_write(i,i);
  4.                 delayms(1);
  5.         }
  6.        
  7.         for(i=0; i<16; i++)
  8.         {
  9.                 lcdwritechar(2,i,num2str(at2402_read(i)));
  10.         }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:158375 發(fā)表于 2019-2-20 16:59 | 顯示全部樓層
樓主:
仔細(xì)看看 AT24C02 的資料哦。
看資料不仔細(xì)是不行的,不能自己想當(dāng)然!
回復(fù)

使用道具 舉報(bào)

ID:365802 發(fā)表于 2019-2-20 20:05 來自觸屏版 | 顯示全部樓層
笨笨兔 發(fā)表于 2019-2-20 16:59
樓主:
仔細(xì)看看 AT24C02 的資料哦。
看資料不仔細(xì)是不行的,不能自己想當(dāng)然!

確實(shí)沒怎么注意,原以為24C02的響應(yīng)速度會(huì)很快,單片機(jī)應(yīng)該跟不上。沒想到。。。不管怎么樣,算是一次教訓(xùn),以后會(huì)多注意響應(yīng)速度的問題。
回復(fù)

使用道具 舉報(bào)

ID:477932 發(fā)表于 2019-2-20 21:22 | 顯示全部樓層
不是寫與讀要延時(shí)

評分

參與人數(shù) 3黑幣 +40 收起 理由
Trump1438 + 10
zhengchong60 + 15
sheng7533967 + 15

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2019-2-20 22:20 | 顯示全部樓層
它本身對于時(shí)鐘的響應(yīng)速度是比較快的,但是,寫入的速度比較慢
但凡用IIC,對于速度就不會(huì)是很高的要求,加個(gè)延時(shí)就好了
回復(fù)

使用道具 舉報(bào)

ID:373388 發(fā)表于 2019-2-21 01:00 | 顯示全部樓層
這不是坑,我記得at24c02 寫周期最長是5ms,數(shù)據(jù)手冊上有的, 你這個(gè)延時(shí)1ms也是有風(fēng)險(xiǎn)的;at24c02具有8字節(jié)寫模式,連續(xù)寫8字節(jié)后,需要延時(shí)5ms的;字節(jié)寫模式也需要等待5ms是比較安全的;如果不等待5ms,再寫下一字節(jié)是需要判段應(yīng)答位的,應(yīng)答位不對,等待再重新發(fā)寫命令才可以的。

評分

參與人數(shù) 1黑幣 +10 收起 理由
yaoji123 + 10 學(xué)習(xí)要認(rèn)真,仔細(xì)。

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:474677 發(fā)表于 2019-2-21 10:24 | 顯示全部樓層
說不上巨坑,只能說摟主對I2C的工作規(guī)范不了解,其對脈寬時(shí)延是有明確的要求的,其實(shí)不光是I2C,所有串行通信都對時(shí)序有著比較嚴(yán)格的要求,編程時(shí)必須按照時(shí)序規(guī)范要求寫,移植代碼時(shí)也要做到心里有數(shù),否則在低速低頻的單片機(jī)上工作正常的代碼用到高速高頻的單片機(jī)就會(huì)出錯(cuò)
回復(fù)

使用道具 舉報(bào)

ID:280876 發(fā)表于 2019-2-22 19:45 | 顯示全部樓層
是你自己模擬的時(shí)序有問題吧
回復(fù)

使用道具 舉報(bào)

ID:477932 發(fā)表于 2019-2-22 22:20 | 顯示全部樓層
數(shù)據(jù)手冊上有, 根據(jù)手冊上來
回復(fù)

使用道具 舉報(bào)

ID:477932 發(fā)表于 2019-2-22 23:49 | 顯示全部樓層
仔細(xì)看看 AT24C02 的資料,真不難
回復(fù)

使用道具 舉報(bào)

ID:529916 發(fā)表于 2019-5-7 19:28 | 顯示全部樓層
你是怎么知道寫入錯(cuò)誤的,
回復(fù)

使用道具 舉報(bào)

ID:365802 發(fā)表于 2019-5-15 09:07 | 顯示全部樓層
文文12345 發(fā)表于 2019-5-7 19:28
你是怎么知道寫入錯(cuò)誤的,

進(jìn)行讀寫測試, 發(fā)現(xiàn)讀出來的和寫入的數(shù)據(jù)不一樣. 奇數(shù)地址位的正確, 偶數(shù)地址位的不對.
回復(fù)

使用道具 舉報(bào)

ID:394424 發(fā)表于 2021-1-5 13:23 | 顯示全部樓層
我寫一個(gè)的時(shí)候沒有這個(gè)問題 現(xiàn)在我也發(fā)現(xiàn)了  連續(xù)的寫與讀 要加延時(shí)
回復(fù)

使用道具 舉報(bào)

ID:781556 發(fā)表于 2021-1-5 22:16 | 顯示全部樓層
坑是個(gè)好東西,唯希望不是在應(yīng)用項(xiàng)目中的坑
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2021-1-6 09:53 | 顯示全部樓層
do while 判斷,寫進(jìn)去再讀出來,數(shù)值不符就重寫。
回復(fù)

使用道具 舉報(bào)

ID:886398 發(fā)表于 2021-3-17 00:45 | 顯示全部樓層
我試了,要穩(wěn)定的寫入,得有5個(gè)ms延時(shí)才行,
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表