熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2017-2-23 21:53
正文摘要:STC15的內(nèi)部EEPROM奇怪問(wèn)題 思路如下: 清除地址0x00的內(nèi)容; 地址0x00 寫(xiě)入 0x22數(shù)據(jù); 地址0x01 寫(xiě)入 0x44數(shù)據(jù); 地址0x02 寫(xiě)入 0x66數(shù)據(jù); & ... |
| 2017 年的時(shí)候,樓主自問(wèn)自答 連獎(jiǎng)勵(lì) 都拿走了,可以封貼了吧? |
|
STC內(nèi)置的EEPROM,不是真正的EEPROM,而是Flash閃存。 沒(méi)有字節(jié)擦除,只有扇區(qū)擦除,二進(jìn)制1寫(xiě)0不可逆,擦除后才可以全部恢復(fù)為1(0xFF),一次擦一個(gè)扇區(qū)(512字節(jié))。 擦除扇區(qū) IapEraseSector(i); 其中i可以取0、512、1024、1536等,其他都是錯(cuò)誤的。 問(wèn)題已經(jīng)遇到無(wú)數(shù)次了,很多新人操作EEPROM都會(huì)犯相同的錯(cuò)誤。 |
| 參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
|---|---|---|
|
| + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
| 我也遇到這鬼問(wèn)題了 |
jackenli 發(fā)表于 2017-4-5 22:06 STC單片機(jī)不像24C02那樣寫(xiě)EEPROM,24C02的操作是寫(xiě)器件址->寫(xiě)寄存器地址->寫(xiě)數(shù)據(jù) STC操作是寫(xiě)扇區(qū)清除(會(huì)自動(dòng)把扇區(qū)0x0000~0x01ff 512個(gè)填滿FF)->然后再把數(shù)據(jù)從0位開(kāi)始放入至511位置。每次操作都要重新刷新扇區(qū)內(nèi)的512個(gè)數(shù)據(jù)。 這是我研究了3個(gè)星期的成果,還有一種辦法是每個(gè)扇區(qū)寫(xiě)一個(gè)數(shù)據(jù),(寫(xiě)扇區(qū)地址1->寫(xiě)數(shù)據(jù) , 寫(xiě)扇區(qū)地址2->寫(xiě)數(shù)據(jù)) |
| 參與人數(shù) 1 | 黑幣 +40 | 收起 理由 |
|---|---|---|
|
| + 40 | 回帖助人的獎(jiǎng)勵(lì)! |
|
IAP_ADDRH = (unsigned char)(addr>>8); //設(shè)置目標(biāo)單元地址的高8 位地址 IAP_ADDRL = (unsigned char)(addr&0x00ff); //設(shè)置目標(biāo)單元地址的低8 位地址 樓主可以改成這樣試試。我的沒(méi)問(wèn)題了。 |
| 參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
|---|---|---|
|
| + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
| 請(qǐng)問(wèn)樓主解決這個(gè)問(wèn)題了嗎?我也遇到了,然后有一段時(shí)間是可以的,后來(lái)又不行。 |
|
關(guān)鍵點(diǎn)就是: num=0xEE; IapEraseSector(0);//清除數(shù)據(jù) IapProgramByte(0,num);//寫(xiě)入數(shù)據(jù) 執(zhí)行完后只有EEPROM地址的0是正確,其它地址1、2、3變成了FF |
| 太長(zhǎng),寫(xiě)出關(guān)鍵點(diǎn),或用紅色圈出來(lái)。 |
Powered by 單片機(jī)教程網(wǎng)