国产韩国精品一区二区三区,一本色道综合久久加勒比,亚洲欧洲中文日韩久久av乱码,国产一区二区女内射,亚洲精品无码成人片在线观看

w25q64扇區地址,寫(xiě)扇區錯誤

摘要:在單片機開(kāi)發(fā)板上或者是核心板上通常會(huì )看到除了MCU之外的的芯片—EEPROM和FLASH,一般是AT24CXX、W25QXX這兩顆芯片。但在利用單片機做一些項目的時(shí)候,比如做一個(gè)小車(chē),驅動(dòng)一些外設、顯示一些溫濕度信息等,卻發(fā)現一般沒(méi)有用到這些芯片。在做一些顯示的時(shí)候卻會(huì )用到。他們與單片機之間的通信方式就是IIC和SPI通信,在單片機的開(kāi)發(fā)中用到的非常多。很多小伙伴就會(huì )說(shuō)了,用OLED來(lái)顯示一些數據,IIC通信直接用別人的代碼,驅動(dòng)SD卡或者NRF24L01直接拿別人的SPI代碼就可以啊,難道我還自己去寫(xiě)驅動(dòng)嗎?

當然需要,學(xué)會(huì )了這些操作,層次就會(huì )提高很多,不信那就接著(zhù)往下看!

EEPROM AT24C02存儲器

學(xué)單片機的時(shí)候大家可能有一個(gè)問(wèn)題,為啥是IIC讀寫(xiě)EEPROM,而不是讀寫(xiě)其他的東西。為什么大部分的單片機開(kāi)發(fā)教程都教我利用IIC通信來(lái)讀寫(xiě)EEPROM這顆AT24C02芯片?4針0.96寸OLED也是IIC操作的,為啥他們不叫我如何利用IIC通信來(lái)操作OLED?

原因很簡(jiǎn)單,主要是讀寫(xiě)EEPROM你學(xué)完了沒(méi)有成就感,會(huì )讀寫(xiě)EEPROM又怎么樣?歸根到底是沒(méi)有掌握IIC體會(huì )到IIC通信的重要性。今年疫情很?chē)乐?,有一款紅外測溫芯片mlx90641就是通過(guò)IIC來(lái)讀取溫度的。

我想如果教程是IIC讀寫(xiě)紅外測溫芯片,大家可能會(huì )比較感興趣。言歸正傳,來(lái)說(shuō)一說(shuō)EEPROM。

ROM是Read Only Memory的縮寫(xiě),意為只能讀的存儲器。由于技術(shù)的發(fā)展,后來(lái)設計出了可以方便寫(xiě)入數據的 ROM,而這個(gè)Read Only Memory的名稱(chēng)被沿用下來(lái)了。EEPROM(Electrically Erasable Programmable ROM)是電可擦除存儲器。EEPROM 可以重復擦寫(xiě),EEPROM 是一種掉電后數據不丟失的存儲器,常用來(lái)存儲一些配置信息,以便系統重新上電的時(shí)候加載之。它的擦除和寫(xiě)入都是直接使用電路控制,不需要再使用外部設備來(lái)擦寫(xiě)。而且可以按字節為單位修改數據,無(wú)需整個(gè)芯片擦除?,F在主要使用的ROM芯片都是EEPROM。24C02是一個(gè)2K Bit的串行EEPROM存儲器(掉電不丟失),內部含有256個(gè)字節,在24C02里面有一個(gè)8字節的頁(yè)寫(xiě)緩沖器。

操作任何的IIC設備一般都要知道從機地址,也就是利用單片機操作讀寫(xiě)的那個(gè)設備的地址。一般來(lái)說(shuō)對于IIC設備地址是7位,其中高 4 位固定為:1010 b,低 3 位則由 A0/A1/A2信號線(xiàn)的電平?jīng)Q定。所以一個(gè)IIC總線(xiàn)上可以?huà)燧d2^3=8個(gè)EEPROM芯片,當然一般一個(gè)單片機只有一塊EEPROM芯片,所以我們直接把這個(gè)A2A1A0接地即可,當然接VCC也沒(méi)有問(wèn)題,如果接GND那么地址就是1010000(0X50),如果接VCC那么地址就是1010111(0X57)。

3年嵌入式物聯(lián)網(wǎng)學(xué)習資源整理分享:C語(yǔ)言、Linux開(kāi)發(fā)、數據結構;軟件開(kāi)發(fā),STM32單片機、ARM硬件開(kāi)發(fā)、物聯(lián)網(wǎng)通信開(kāi)發(fā)、綜合項目開(kāi)發(fā)教程資料;筆試面試真題。點(diǎn)擊下方插件免費領(lǐng)取↓↓↓https://s.pdb2.com/l/cnklSITCGo24eIn

因為24C02是一個(gè)2K Bit的串行EEPROM存儲器(掉電不丟失),內部含有256個(gè)字節。也就是說(shuō)有256個(gè)存儲單元,一個(gè)字節就是一個(gè)存儲單元,因為每個(gè)字節可以出存256個(gè)數,也就是說(shuō)每個(gè)存儲單元可以存0~255個(gè)數。我們可以這樣理解,AT24C02是一棟教學(xué)樓,這個(gè)教學(xué)樓有256個(gè)房間(存儲單元),沒(méi)每個(gè)房間可以容納256個(gè)學(xué)生(每個(gè)存儲單元可以存儲0 ~ 255個(gè)數)。而且這個(gè)芯片在斷電的時(shí)候數據不會(huì )丟失,利用掉電不會(huì )丟失以及這款芯片容量不大的特性,可以大致判斷它會(huì )在哪些地方可以用到。比如我們看電視得時(shí)候,正在看CCTV6電影頻道,播放的聲音比較大,那么這時(shí)候正好停電了。那么你下次來(lái)電時(shí)你打開(kāi)電視機,電視機默認肯定是CCTV6電影頻道,播放的聲音也是很大。那么這些頻道、音量這些數據就存在EEPROM里面,至于是不是ATC02就不一定了。

總結:

存儲量少,用起來(lái)方便可以任意訪(fǎng)問(wèn)地址數據,每一個(gè)存儲單片可以獨立訪(fǎng)問(wèn),寫(xiě)入前是不需要對寫(xiě)入的單片做獨立的擦除

這三個(gè)特點(diǎn)對我們理解存儲器的特性非常重要,因為接下來(lái)要說(shuō)的FLASH芯片的特性就與它完全相反。

FLASH W25Q128存儲器

FLSAH字面意思就是閃現、一瞬間的意思,所以FLSAH存儲器又稱(chēng)閃存,與 EEPROM都是掉電后數據不丟失的存儲器,但FLASH存儲器容量普遍大于 EPROM,現在基本取代了它的地位。生活中常用的 U 盤(pán)、SD卡、SSD 固態(tài)硬盤(pán)以及我們 STM32 芯片內部用于存儲程序的設備,都是 FLASH 類(lèi)型的存儲器。在存儲控制上,最主要的區別是 FLASH 芯片只能一大片一大片地擦寫(xiě),而 EEPROM可以單個(gè)字節擦寫(xiě)。

FLASH 芯片的最小擦除單位為扇區(Sector),而一個(gè)塊(Block)包含 16 個(gè)扇區,4Kbytes為一個(gè)Sector,16個(gè)扇區為1個(gè)Block。W25Q64 容量為8M字節(即 64M bit), 分為128塊(Block),每一塊的大小為64K字節,每塊又分為16個(gè)扇區(Sector),那么每個(gè)扇區就是4K個(gè)字節。W25Q128 容量為16M字節(即 128M bit),分為256塊(Block),每一塊的大小為64K字節,每塊又分為16個(gè)扇區(Sector),那么每個(gè)扇區就是4K個(gè)字節(4096個(gè)字節,也就是4096個(gè)存儲單元)。

W25Qxx的最小擦除單位為一個(gè)扇區,也就是每一次必須擦除4K字節。所以必須給W25Qxx開(kāi)辟至少4K的緩沖區,這樣對單片機的RAM的要求比較高,要求芯片必須有4K以上的RAM才能很好的操作。所有的FLASH我們在寫(xiě)之前都要擦出對應的扇區,擦除后的數據是0XFF。我們可以這樣理解。我們要改寫(xiě)FLASH芯片W25Q128的一個(gè)扇區中某一個(gè)數據,就必須在STM32芯片的內部RAM中開(kāi)辟4K字節(4096字節)的緩沖區域。先把FLASH芯片W25Q128的一個(gè)扇區中數據全部讀到STM32芯片的內部RAM中開(kāi)辟4K字節(4096字節)的緩沖區域中去,把我們要改寫(xiě)的數據在緩沖區域改寫(xiě)好之后,再把FLASH芯片W25Q128的一個(gè)扇區中的數據全部擦除完畢,擦除完成之后再把數據寫(xiě)回去。這是寫(xiě)入數據的操作,在讀數據的時(shí)候不需要以扇區為單位,想讀哪個(gè)扇區就讀哪個(gè)扇區的數據。

/*************************************************************************
* Function Name : SPI_Flash_Write
* Description : 在指定地址開(kāi)始寫(xiě)入指定長(cháng)度的數據,該函數帶擦除操作!
* Input : *pBuffer:要寫(xiě)入數據的指針
WriteAddr:開(kāi)始寫(xiě)入的地址(24bit)
NumByteToWrite:要寫(xiě)入的字節數(最大16 x 1024 x 1024)
* Output : None
* Return : None
****************************************************************************/voidSPI_Flash_Write(u8* pBuffer, u32WriteAddr, u16NumByteToWrite)
{
u8NumOfPage=0,NumOfSingle=0,Addr=0,count=0, temp =0;Addr=WriteAddr@96;//mod運算求余,若writeAddr是4096整數倍,運算結果Addr值為0NumOfPage=NumByteToWrite/4096;//計算出要寫(xiě)多少整數扇區NumOfSingle=NumByteToWrite@96;//mod運算求余,計算出剩余不滿(mǎn)一扇區的字節數count=4096-Addr;//差count個(gè)數據值,剛好可以對齊到扇區地址if(Addr==0)//Addr=0,則WriteAddr剛好按扇區對齊或者說(shuō)小于一個(gè)扇區{//NumByteToWrite

上一篇:

下一篇:

? 推薦閱讀

分享
国产韩国精品一区二区三区,一本色道综合久久加勒比,亚洲欧洲中文日韩久久av乱码,国产一区二区女内射,亚洲精品无码成人片在线观看