找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 3073|回復(fù): 21
打印 上一主題 下一主題
收起左側(cè)

現(xiàn)在的很多單片機(jī)都有內(nèi)置的EEPROM為什么還是有很多人使用外接的呢?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:978375 發(fā)表于 2022-11-25 13:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
有什么優(yōu)勢(shì)嗎?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:675287 發(fā)表于 2022-11-25 15:26 | 只看該作者
內(nèi)置的好像是FLASH,不能像外置EEPROM那樣一個(gè)字節(jié)的讀寫(xiě),只能按塊或扇區(qū)操作,寫(xiě)之前要先擦除塊或扇區(qū),才能寫(xiě)入
回復(fù)

使用道具 舉報(bào)

板凳
ID:978375 發(fā)表于 2022-11-25 15:46 | 只看該作者
zh_junwei 發(fā)表于 2022-11-25 15:26
內(nèi)置的好像是FLASH,不能像外置EEPROM那樣一個(gè)字節(jié)的讀寫(xiě),只能按塊或扇區(qū)操作,寫(xiě)之前要先擦除塊或扇區(qū),才 ...

剛剛了解到很多單片機(jī)內(nèi)置EEPROM是用FLASH模擬的,可能穩(wěn)定性不如硬件的
回復(fù)

使用道具 舉報(bào)

地板
ID:1043747 發(fā)表于 2022-11-25 17:31 來(lái)自觸屏版 | 只看該作者
內(nèi)置的擦寫(xiě)壽命短
回復(fù)

使用道具 舉報(bào)

5#
ID:401564 發(fā)表于 2022-11-25 20:31 | 只看該作者
單片機(jī)內(nèi)部的EEPROM是FLASH的,只能塊寫(xiě)入,一般有EEPROM存儲(chǔ)數(shù)據(jù)不會(huì)每次都存上一個(gè)塊的,有時(shí)候是單獨(dú)改一個(gè)地址的數(shù)據(jù)而已,FLASH不能像24C01那樣操作的
回復(fù)

使用道具 舉報(bào)

6#
ID:419909 發(fā)表于 2022-11-25 21:52 | 只看該作者
應(yīng)該是不習(xí)慣吧。個(gè)人覺(jué)得內(nèi)置的EEPROM方便使用。雖然是塊操作,但是需要保存的數(shù)據(jù)一般也不多。存在一個(gè)數(shù)組里,每次全部重寫(xiě)一次就可以了。擦寫(xiě)壽命這個(gè),官方說(shuō)明里好像也挺多的。又不是每時(shí)每刻要更新。
回復(fù)

使用道具 舉報(bào)

7#
ID:101869 發(fā)表于 2022-11-26 10:11 | 只看該作者
內(nèi)置EEPROM最大缺點(diǎn)就是存一個(gè)數(shù)據(jù)就要整頁(yè)擦除,比如你這一頁(yè)有200個(gè)數(shù)據(jù),修改任何一個(gè)數(shù)據(jù)就要先把這200個(gè)保存到緩存,然后擦除,然后再把這200個(gè)數(shù)據(jù)寫(xiě)入.
回復(fù)

使用道具 舉報(bào)

8#
ID:997026 發(fā)表于 2022-11-26 10:35 來(lái)自觸屏版 | 只看該作者
好多人說(shuō)單片機(jī)內(nèi)置eeprom是flash的完全是誤導(dǎo),估計(jì)都是只用過(guò)stc的,用內(nèi)部flash模擬eeprom大多是國(guó)產(chǎn)廠商的做法,因?yàn)楸阋耍矣眠^(guò)microchip的,人家就是真正的eeprom,按字節(jié)寫(xiě)入,不需要擦除,小一些的都沒(méi)有頁(yè)的概念,直接按地址寫(xiě)
回復(fù)

使用道具 舉報(bào)

9#
ID:963918 發(fā)表于 2022-11-26 12:21 | 只看該作者
看內(nèi)置EEPROM是不是真正的EEPROM,如果是FLASH模擬的,就要慎用,在某些時(shí)候擦寫(xiě)會(huì)影響到主程序區(qū)。
回復(fù)

使用道具 舉報(bào)

10#
ID:401564 發(fā)表于 2022-11-26 12:30 | 只看該作者
hxdby 發(fā)表于 2022-11-26 10:35
好多人說(shuō)單片機(jī)內(nèi)置eeprom是flash的完全是誤導(dǎo),估計(jì)都是只用過(guò)stc的,用內(nèi)部flash模擬eeprom大多是國(guó)產(chǎn)廠 ...

但PIC單片機(jī)一樣的,有很多電路要外置EEPROM
因?yàn)?PIC單片機(jī)的EEPROM內(nèi)存沒(méi)幾個(gè)是超過(guò)1K,有的型號(hào)甚至只有256B
回復(fù)

使用道具 舉報(bào)

11#
ID:996773 發(fā)表于 2022-11-26 14:58 | 只看該作者
看使用情況,我是做收音機(jī)程序的,寫(xiě)入數(shù)據(jù)次數(shù)一天內(nèi)也只有幾次,按字節(jié)寫(xiě)24c02,畢竟多一個(gè)元件浪費(fèi),后來(lái)才用內(nèi)部eeprom,因?yàn)橹桓膭?dòng)幾個(gè)字節(jié)的數(shù)據(jù),eeprom只能整個(gè)扇區(qū)寫(xiě),我是先把整個(gè)扇區(qū)全讀到單片機(jī)擴(kuò)展內(nèi)存,改動(dòng)幾個(gè)字節(jié)后再一下子全寫(xiě)入eeprom,很方便,程序也不復(fù)雜,多幾條讀出寫(xiě)入指令,很穩(wěn)定,不要聽(tīng)別人亂講啥的不穩(wěn)定,但那種一秒鐘就要寫(xiě)一次的甚至幾十次的還是用外置的片子,內(nèi)置模擬eeprom肯定扛不住幾天十多萬(wàn)次的讀寫(xiě)
回復(fù)

使用道具 舉報(bào)

12#
ID:624769 發(fā)表于 2022-11-26 16:19 | 只看該作者
如果標(biāo)題是: "論壇里有沒(méi)有人在做項(xiàng)目時(shí),明明單片機(jī)內(nèi)部有Eeprom, 但是還外接Eeprom, 請(qǐng)問(wèn)基于什么原因你還要外接Eeprom"
可能,我會(huì)舉幾個(gè)實(shí)際例子,再說(shuō)一下理由。

偏偏來(lái)個(gè)“很多人”,最討厭猜別人的心思。尤其是猜對(duì)了沒(méi)獎(jiǎng),猜錯(cuò)了還有噴子。鬼知道“很多人”為什么要外接?有人不會(huì)用內(nèi)部的,有人為了打一塊學(xué)習(xí)板,有人為了堆料。誰(shuí)知道?
大多數(shù)單片機(jī),內(nèi)部的Eeprom 也是可以單字節(jié)讀寫(xiě),并且不需要擦除可以直接修改的,和國(guó)內(nèi)國(guó)外沒(méi)有關(guān)系。
無(wú)非論壇里提問(wèn)題的人多是不說(shuō)單片機(jī)型號(hào),而大部分問(wèn)問(wèn)題的人又是用的STC, 才會(huì)有了不少人回答問(wèn)題先入為主用 STC來(lái)舉例子。這不是作為認(rèn)為別人只用過(guò)STC的理由或者依據(jù),更不能自己除了 STC沒(méi)用過(guò)或者學(xué)過(guò)其他國(guó)內(nèi)的單片機(jī),或者只了解了幾款國(guó)內(nèi)的單片機(jī)和幾款國(guó)外的單片機(jī),就片面以為 STC 能代表 “大多數(shù)國(guó)內(nèi)”的單片機(jī),就片面的認(rèn)為,國(guó)產(chǎn)的單片機(jī)才會(huì)用 flash 模擬 Eeprom.
撇開(kāi)成本不談,在都是片內(nèi)“Eeprom” 的前提下,flash 模擬 Eeprom 是有優(yōu)勢(shì)的,除了擦除比較麻煩,讀/寫(xiě) 上,flash 模擬的 Eeprom 遠(yuǎn)比真實(shí)Eeprom要快,尤其是讀上面,所以,對(duì)于頻繁讀取,偶爾寫(xiě)入,這樣的需求,懂得人,會(huì)優(yōu)先選擇flash 模擬 的Eeprom 而不是真實(shí)的"Eeprom"。
正因?yàn)橛胁煌男枨�,�?huì)有不同的選擇,所以有不少的單片機(jī),也會(huì)同時(shí)提供 片內(nèi) 真實(shí)Eeprom 的讀寫(xiě),以及片內(nèi)Flash 的讀寫(xiě)的 兩種方式,讓程序員按需使用。

撇開(kāi)實(shí)際應(yīng)用的需要,以偏蓋面的下結(jié)論毫無(wú)意義。


回復(fù)

使用道具 舉報(bào)

13#
ID:584814 發(fā)表于 2022-11-26 18:48 | 只看該作者
使用習(xí)慣且外置的價(jià)格可以忽略。
回復(fù)

使用道具 舉報(bào)

14#
ID:401564 發(fā)表于 2022-11-27 12:15 | 只看該作者
188610329 發(fā)表于 2022-11-26 16:19
如果標(biāo)題是: "論壇里有沒(méi)有人在做項(xiàng)目時(shí),明明單片機(jī)內(nèi)部有Eeprom, 但是還外接Eeprom, 請(qǐng)問(wèn)基于什么原因你 ...

如果不算成本
對(duì)于頻繁讀寫(xiě),真正的應(yīng)該選外部鐵電EEPROM
鐵電近乎完美,因?yàn)椴挥玫却龑?xiě)入,整體讀寫(xiě)速度還是很快的
回復(fù)

使用道具 舉報(bào)

15#
ID:308903 發(fā)表于 2022-11-28 08:13 | 只看該作者
能不能延伸討論下,外置咋用
回復(fù)

使用道具 舉報(bào)

16#
ID:420836 發(fā)表于 2022-11-28 08:55 | 只看該作者
單片機(jī)內(nèi)置的EEPROM體積不夠大,設(shè)計(jì)者習(xí)慣于外加EEPROM來(lái)擴(kuò)展存儲(chǔ)空間。
回復(fù)

使用道具 舉報(bào)

17#
ID:958310 發(fā)表于 2022-11-28 09:07 | 只看該作者
片外eeprom是獨(dú)立于單片機(jī)的,如果軟件要升級(jí)把單片機(jī)的flash擦了后升級(jí)就會(huì)把保存的數(shù)據(jù)清除了。但是獨(dú)立的eeprom就不會(huì)。
回復(fù)

使用道具 舉報(bào)

18#
ID:1054345 發(fā)表于 2022-11-28 11:29 | 只看該作者
他們最大差異就是:FLASH按塊/扇區(qū)進(jìn)行讀寫(xiě)操作,EEPROM支持按字節(jié)讀寫(xiě)操作。    其次,容量大小不同:FLASH容量可以做到很大,但EEPROM容量一般都很小。    再次,就是它們的應(yīng)用場(chǎng)景不同:EERPOM存儲(chǔ)零散小容量數(shù)據(jù),比如:標(biāo)志位、一組數(shù)據(jù)等。FLASH存儲(chǔ)大容量數(shù)據(jù),比如:程序代碼、圖片信息等。    再次,內(nèi)部結(jié)構(gòu)不同,F(xiàn)lash結(jié)構(gòu)更簡(jiǎn)單,成本更低,類(lèi)似前面和大家分享的《單片機(jī)中RAM少的原因》。    當(dāng)然,還有很多其他區(qū)別,但隨著技術(shù)的提升,它們二者已經(jīng)很接近了。以前它們不能滿足的功能,現(xiàn)在基本都能滿足了。
回復(fù)

使用道具 舉報(bào)

19#
ID:1054345 發(fā)表于 2022-11-28 11:36 | 只看該作者
#include "stm32f10x.h"  
#include "string.h"
#include "stdio.h"  
void delay(void);  
void GPIO_Configuration(void);
void uart_init();
extern void USART_OUT(USART_TypeDef* USARTx, uint16_t *Data,...);
void RCC_Configuration(void)  
{  
SystemInit();   
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|
RCC_APB2Periph_GPIOA|
RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOD |
RCC_APB2Periph_AFIO|  
RCC_APB2Periph_GPIOC,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
}
void NVIC_Configuration(void)  
{  

  NVIC_InitTypeDef NVIC_InitStructure;   
  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);      
   
  


  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn|USART2_IRQn;  
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);  


}  




void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data)  
{  
    USART_SendData(USARTx, Data);  
    while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET){}  
}  
void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str)   
{   
    while (0 != *str)   
    {   
        UART_PutChar(USARTx, *str);   
        str++;   
    }   
}




int main(void)  
{  
RCC_Configuration();
GPIO_Configuration();  
NVIC_Configuration();  
uart_init();


while(1)  
  {  
   GPIO_ResetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13);  
delay();  
   GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_13);  
   delay();  
   GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_13);
delay();   
   GPIO_SetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13);  
   delay();   

//USART_SendData(USART1, '1');  
UART_PutStr(USART1,(uint8_t*)("234"));
UART_PutStr(USART2,(uint8_t*)("234"));
  }  
}  




void GPIO_Configuration(void)  
{   
  GPIO_InitTypeDef GPIO_InitStructure;   
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_13;     
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;     
GPIO_Init(GPIOC,&GPIO_InitStructure);  


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   /* Configure USART2 Rx (PA.03) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_3;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

}  

void uart_init()
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

USART_Init(USART1, &USART_InitStructure);  
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

USART_Init(USART2, &USART_InitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART2, USART_IT_TXE, ENABLE);

USART_Cmd(USART1, ENABLE);      
USART_Cmd(USART2, ENABLE);      
}


void USART1_IRQHandler(void)      //′®¿ú1 ÖD¶Ï·tÎñ3ìDò  
{  
static u8 RX_dat[256]={0};static int i;     
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)//USART_IT_RXNE£o½óêÕÖD¶Ï  
{   
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
RX_dat[i++]=USART_ReceiveData(USART1);   
   }
if(RX_dat[0]=='{' &&  RX_dat[i-1]=='}')
{
//UART_PutStr(USART2,"fdg");
}
}  
void USART2_IRQHandler(void)      //′®¿ú2 ÖD¶Ï·tÎñ3ìDò  
{  
  unsigned int i;  
   
}  
回復(fù)

使用道具 舉報(bào)

20#
ID:624769 發(fā)表于 2022-11-28 13:57 | 只看該作者
Y_G_G 發(fā)表于 2022-11-27 12:15
如果不算成本
對(duì)于頻繁讀寫(xiě),真正的應(yīng)該選外部鐵電EEPROM
鐵電近乎完美,因?yàn)椴挥玫却龑?xiě)入,整體讀寫(xiě)速度 ...

對(duì)于頻繁讀來(lái)講, 外部不管用什么材料的 Eeprom,受限IO口的速度,就算你用的并口傳輸,發(fā)出讀指令,到IO口收到返回?cái)?shù)據(jù),速度都比不過(guò) 讀片內(nèi)的速度。
而且,你也說(shuō)了如果不算成本,所以架空項(xiàng)目去討論,意義真的不大。
回復(fù)

使用道具 舉報(bào)

21#
ID:401564 發(fā)表于 2022-11-28 14:58 | 只看該作者
188610329 發(fā)表于 2022-11-28 13:57
對(duì)于頻繁讀來(lái)講, 外部不管用什么材料的 Eeprom,受限IO口的速度,就算你用的并口傳輸,發(fā)出讀指令,到IO ...

我說(shuō)的是讀寫(xiě),不是單純的讀
STC8G的擦除扇區(qū)時(shí)間為4-6mS,其它型號(hào)的也都差不多
FLASH就算只更改一個(gè)地址的數(shù)據(jù),都得先讀取,保存,再擦除扇區(qū),也就是說(shuō),你只更改一個(gè)數(shù)據(jù),用時(shí)也至少是4mS起步
鐵電就是IIC一個(gè)起始寫(xiě)入停止的過(guò)程而已
而且,F(xiàn)LASH的壽命比起鐵電來(lái),差太多了
回復(fù)

使用道具 舉報(bào)

22#
ID:378108 發(fā)表于 2022-11-29 23:40 | 只看該作者
用 外接的這幫人,不會(huì)用內(nèi)部的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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